[ 
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)

Reply via email to