This is an automated email from the ASF dual-hosted git repository. amashenkov pushed a commit to branch sql-virtual-column-poc in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 6e9374eb416ba7570148ad2fec0fd6a52e0604d2 Author: amashenkov <[email protected]> AuthorDate: Thu Jun 13 15:37:08 2024 +0300 Add partition column. --- .../internal/sql/engine/prepare/IgniteSqlValidator.java | 3 ++- .../sql/engine/schema/SqlSchemaManagerImpl.java | 17 +++++++++++++++++ .../internal/sql/engine/schema/TableDescriptorImpl.java | 3 +++ .../internal/sql/engine/framework/TestBuilders.java | 15 ++++++++++++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java index c2b66f287d..512d2a945e 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java @@ -948,7 +948,8 @@ public class IgniteSqlValidator extends SqlValidatorImpl { } private boolean isSystemFieldName(String alias) { - return Commons.implicitPkEnabled() && Commons.IMPLICIT_PK_COL_NAME.equals(alias); + return (Commons.implicitPkEnabled() && Commons.IMPLICIT_PK_COL_NAME.equals(alias)) + || alias.equals(Commons.PART_COL_NAME); } /** {@inheritDoc} */ diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImpl.java index 548c4b6bb2..ca92b16f44 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImpl.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImpl.java @@ -248,9 +248,26 @@ public class SqlSchemaManagerImpl implements SqlSchemaManager { .collect(Collectors.toList()); } + // Add virtual column. + colDescriptors.add(createPartitionVirtualColumn(colDescriptors)); + return new TableDescriptorImpl(colDescriptors, distribution); } + private static ColumnDescriptorImpl createPartitionVirtualColumn(List<ColumnDescriptor> colDescriptors) { + return new ColumnDescriptorImpl( + Commons.PART_COL_NAME, + false, + true, + true, + true, + colDescriptors.size(), + NativeTypes.INT32, + DefaultValueStrategy.DEFAULT_NULL, + null + ); + } + private static ColumnDescriptor injectDefault(ColumnDescriptor desc) { assert Commons.implicitPkEnabled() && Commons.IMPLICIT_PK_COL_NAME.equals(desc.name()) : desc; diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/TableDescriptorImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/TableDescriptorImpl.java index c9062bffea..761e4b8e18 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/TableDescriptorImpl.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/TableDescriptorImpl.java @@ -93,6 +93,9 @@ public class TableDescriptorImpl extends NullInitializerExpressionFactory implem /** {@inheritDoc} */ @Override public ColumnStrategy generationStrategy(RelOptTable tbl, int colIdx) { + if (descriptors[colIdx].system()) { + return ColumnStrategy.STORED; + } if (descriptors[colIdx].defaultStrategy() != DefaultValueStrategy.DEFAULT_NULL) { return ColumnStrategy.DEFAULT; } diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestBuilders.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestBuilders.java index 2f5ecd3295..88bd6d1a02 100644 --- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestBuilders.java +++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestBuilders.java @@ -126,10 +126,12 @@ import org.apache.ignite.internal.type.BitmaskNativeType; import org.apache.ignite.internal.type.DecimalNativeType; import org.apache.ignite.internal.type.NativeType; import org.apache.ignite.internal.type.NativeTypeSpec; +import org.apache.ignite.internal.type.NativeTypes; import org.apache.ignite.internal.type.NumberNativeType; import org.apache.ignite.internal.type.TemporalNativeType; import org.apache.ignite.internal.type.VarlenNativeType; import org.apache.ignite.internal.util.ArrayUtils; +import org.apache.ignite.internal.util.CollectionUtils; import org.apache.ignite.internal.util.SubscriptionUtils; import org.apache.ignite.internal.util.TransformingIterator; import org.apache.ignite.internal.util.subscription.TransformingPublisher; @@ -917,7 +919,18 @@ public class TestBuilders { throw new IllegalArgumentException("Table must contain at least one column"); } - TableDescriptorImpl tableDescriptor = new TableDescriptorImpl(columns, distribution); + TableDescriptorImpl tableDescriptor = new TableDescriptorImpl(CollectionUtils.concat(columns, + List.of(new ColumnDescriptorImpl( + Commons.PART_COL_NAME.toUpperCase(), + false, + true, + true, + false, + columns.size(), + NativeTypes.INT32, + DefaultValueStrategy.DEFAULT_NULL, + null + ))), distribution); Map<String, IgniteIndex> indexes = indexBuilders.stream() .map(idx -> idx.build(tableDescriptor))
