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

Reply via email to