You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Aleksandr Polovtcev (Jira)" <ji...@apache.org> on 2021/11/28 19:05:00 UTC
[jira] [Updated] (IGNITE-16009) Use column and index names as Named List keys
[ https://issues.apache.org/jira/browse/IGNITE-16009?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aleksandr Polovtcev updated IGNITE-16009:
-----------------------------------------
Description:
Ignite 3 uses the Configuration framework to describe table schema and it currently uses the following approach for storing columns and indices of a particular table: both of these are represented as a Named List, where keys are sequentially ordered numbers converted into Strings and values are the corresponding View classes.
This is most likely a legacy feature needed when Named Lists didn't have an ordering guarantee and didn't have the functionality for retrieving values by index.
I propose to change this approach to a more simple one: use column/index names instead of sequentially ordered numbers in such Named Lists. This will make the code, that uses it, more straightforward. Consider the following example:
*Old approach*
{code:java}
ColumnDefinition columnDefinition = SchemaBuilders.column("valStr2", ColumnType.string())
.withDefaultValueExpression("default")
.build();
ignite0.tables().alterTable(TABLE_NAME,
tblChanger -> tblChanger.changeColumns(cols -> {
int colIdx = tblChanger.columns().namedListKeys().stream()
.mapToInt(Integer::parseInt).max().getAsInt() + 1;
cols.create(String.valueOf(colIdx), colChg -> convert(columnDefinition, colChg));
})
{code}
*New approach*
{code:java}
ColumnDefinition columnDefinition = SchemaBuilders.column("valStr2", ColumnType.string())
.withDefaultValueExpression("default")
.build();
ignite0.tables().alterTable(TABLE_NAME,
tblChanger -> tblChanger.changeColumns(cols ->
cols.create(columnDefinition.name(), colChg -> convert(columnDefinition, colChg))
)
{code}
was:
Ignite 3 uses the Configuration framework to describe table schema and it currently uses the following approach for storing columns and indices in a particular table: both of these are represented as a Named List, where keys are sequentially ordered numbers converted into Strings and values are the corresponding View classes.
This is most likely a legacy feature needed when Named Lists didn't have an ordering guarantee and didn't have the functionality for retrieving values by index.
I propose to change this approach to a more simple one: use column/index names instead of sequentially ordered numbers in such Named Lists. This will make the code, that uses it, more straightforward. Consider the following example:
*Old approach*
{code:java}
ColumnDefinition columnDefinition = SchemaBuilders.column("valStr2", ColumnType.string())
.withDefaultValueExpression("default")
.build();
ignite0.tables().alterTable(TABLE_NAME,
tblChanger -> tblChanger.changeColumns(cols -> {
int colIdx = tblChanger.columns().namedListKeys().stream()
.mapToInt(Integer::parseInt).max().getAsInt() + 1;
cols.create(String.valueOf(colIdx), colChg -> convert(columnDefinition, colChg));
})
{code}
*New approach*
{code:java}
ColumnDefinition columnDefinition = SchemaBuilders.column("valStr2", ColumnType.string())
.withDefaultValueExpression("default")
.build();
ignite0.tables().alterTable(TABLE_NAME,
tblChanger -> tblChanger.changeColumns(cols ->
cols.create(columnDefinition.name(), colChg -> convert(columnDefinition, colChg))
)
{code}
> Use column and index names as Named List keys
> ---------------------------------------------
>
> Key: IGNITE-16009
> URL: https://issues.apache.org/jira/browse/IGNITE-16009
> Project: Ignite
> Issue Type: Improvement
> Reporter: Aleksandr Polovtcev
> Assignee: Aleksandr Polovtcev
> Priority: Major
> Labels: ignite-3
>
> Ignite 3 uses the Configuration framework to describe table schema and it currently uses the following approach for storing columns and indices of a particular table: both of these are represented as a Named List, where keys are sequentially ordered numbers converted into Strings and values are the corresponding View classes.
> This is most likely a legacy feature needed when Named Lists didn't have an ordering guarantee and didn't have the functionality for retrieving values by index.
> I propose to change this approach to a more simple one: use column/index names instead of sequentially ordered numbers in such Named Lists. This will make the code, that uses it, more straightforward. Consider the following example:
> *Old approach*
> {code:java}
> ColumnDefinition columnDefinition = SchemaBuilders.column("valStr2", ColumnType.string())
> .withDefaultValueExpression("default")
> .build();
> ignite0.tables().alterTable(TABLE_NAME,
> tblChanger -> tblChanger.changeColumns(cols -> {
> int colIdx = tblChanger.columns().namedListKeys().stream()
> .mapToInt(Integer::parseInt).max().getAsInt() + 1;
> cols.create(String.valueOf(colIdx), colChg -> convert(columnDefinition, colChg));
> })
> {code}
>
> *New approach*
> {code:java}
> ColumnDefinition columnDefinition = SchemaBuilders.column("valStr2", ColumnType.string())
> .withDefaultValueExpression("default")
> .build();
> ignite0.tables().alterTable(TABLE_NAME,
> tblChanger -> tblChanger.changeColumns(cols ->
> cols.create(columnDefinition.name(), colChg -> convert(columnDefinition, colChg))
> )
> {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)