[
https://issues.apache.org/jira/browse/IGNITE-14748?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ivan Bessonov updated IGNITE-14748:
-----------------------------------
Description:
Implement some order for @NamedConfigValue fields.
Imagine that we have some
{code:java}
@Config
public class PKIndexConfigurationSchema {
@Value
String type;
@NamedConfigValue
IndexColumnConfigurationSchema columns.
{code}
and
{code:java}
@Config
public class IndexColumnConfigurationSchema {
@Value
String name;
@Value
boolean asc;
@Value
boolean affinityCol;
}
{code}
For now we have to use indexes to store such config like:
{noformat}
"PK":
"type":"PrimaryKey",
"columns": {
"0": {
"name":"REGION",
"asc":true,
"affinity":true
},
"1": {
"name":"COMPANY",
"asc":true,
"affinity":false
}
}
{noformat}
because we have to keep it's order.
But if configuration keep order for @NamedConfigValue it can look like:
{noformat}
"PK":
"type":"PrimaryKey",
"columns": {
"REGION": {
"asc":true,
"affinity":true
},
"COMPANY": {
"asc":true,
"affinity":false
}
}
{noformat}
And to allow insert value in the middle it will be nice to have some methods
like:
* listChange.create(idx, key, consumer(elementChange))
or
* listChange.createAfter(prevKeyOrNull, key, consumer(elementChange))
in addition to existing:
* listChange.create(key, consumer(elementChange))
* listChange.update(key, consumer(elementChange))
* listChange.delete(key)
BTW, lets remove listChange.update method.
h3. Implementation notes
It would make sense to store order number inside of named list entry. It would
look like implicit configuration parameter {{<idx>}}, for example. This value
will be recalculated on every update.
Index will be stored in named list itself, entries will not contain it. Reason
is simple - named list entries can be used as regular "inner" nodes and we
can't distinguish one from the another. That's why index is implicit.
was:
Implement some order for @NamedConfigValue fields.
Imagine that we have some
{code:java}
@Config
public class PKIndexConfigurationSchema {
@Value
String type;
@NamedConfigValue
IndexColumnConfigurationSchema columns.
{code}
and
{code:java}
@Config
public class IndexColumnConfigurationSchema {
@Value
String name;
@Value
boolean asc;
@Value
boolean affinityCol;
}
{code}
For now we have to use indexes to store such config like:
{noformat}
"PK":
"type":"PrimaryKey",
"columns": {
"0": {
"name":"REGION",
"asc":true,
"affinity":true
},
"1": {
"name":"COMPANY",
"asc":true,
"affinity":false
}
}
{noformat}
because we have to keep it's order.
But if configuration keep order for @NamedConfigValue it can look like:
{noformat}
"PK":
"type":"PrimaryKey",
"columns": {
"REGION": {
"asc":true,
"affinity":true
},
"COMPANY": {
"asc":true,
"affinity":false
}
}
{noformat}
And to allow insert value in the middle it will be nice to have some methods
like:
* listChange.create(idx, key, consumer(elementChange))
or
* listChange.createAfter(prevKeyOrNull, key, consumer(elementChange))
in addition to existing:
* listChange.create(key, consumer(elementChange))
* listChange.update(key, consumer(elementChange))
* listChange.delete(key)
BTW, lets remove listChange.update method.
> Ordered @NamedConfigValue
> -------------------------
>
> Key: IGNITE-14748
> URL: https://issues.apache.org/jira/browse/IGNITE-14748
> Project: Ignite
> Issue Type: Sub-task
> Reporter: Alexander Belyak
> Priority: Major
>
> Implement some order for @NamedConfigValue fields.
> Imagine that we have some
>
> {code:java}
> @Config
> public class PKIndexConfigurationSchema {
> @Value
> String type;
> @NamedConfigValue
> IndexColumnConfigurationSchema columns.
>
> {code}
> and
>
> {code:java}
> @Config
> public class IndexColumnConfigurationSchema {
> @Value
> String name;
> @Value
> boolean asc;
> @Value
> boolean affinityCol;
> }
> {code}
>
> For now we have to use indexes to store such config like:
>
> {noformat}
> "PK":
> "type":"PrimaryKey",
> "columns": {
> "0": {
> "name":"REGION",
> "asc":true,
> "affinity":true
> },
> "1": {
> "name":"COMPANY",
> "asc":true,
> "affinity":false
> }
> }
> {noformat}
>
> because we have to keep it's order.
> But if configuration keep order for @NamedConfigValue it can look like:
>
> {noformat}
> "PK":
> "type":"PrimaryKey",
> "columns": {
> "REGION": {
> "asc":true,
> "affinity":true
> },
> "COMPANY": {
> "asc":true,
> "affinity":false
> }
> }
> {noformat}
> And to allow insert value in the middle it will be nice to have some methods
> like:
> * listChange.create(idx, key, consumer(elementChange))
> or
> * listChange.createAfter(prevKeyOrNull, key, consumer(elementChange))
> in addition to existing:
> * listChange.create(key, consumer(elementChange))
> * listChange.update(key, consumer(elementChange))
> * listChange.delete(key)
> BTW, lets remove listChange.update method.
> h3. Implementation notes
> It would make sense to store order number inside of named list entry. It
> would look like implicit configuration parameter {{<idx>}}, for example. This
> value will be recalculated on every update.
> Index will be stored in named list itself, entries will not contain it.
> Reason is simple - named list entries can be used as regular "inner" nodes
> and we can't distinguish one from the another. That's why index is implicit.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)