This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-26840
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 5479041687bf08154eff11d9ef85eb63283eb8de
Author: AMashenkov <[email protected]>
AuthorDate: Thu Jan 22 20:05:22 2026 +0300

    wip
---
 .../catalog/commands/AbstractCreateIndexCommand.java  |  2 +-
 .../catalog/systemviews/TablesSystemViewProvider.java |  7 +++++--
 .../handler/requests/jdbc/JdbcMetadataCatalog.java    |  3 ++-
 .../catalog/CatalogToSchemaDescriptorConverter.java   |  8 ++++++--
 .../sql/engine/schema/SqlSchemaManagerImpl.java       | 19 ++++++++-----------
 5 files changed, 22 insertions(+), 17 deletions(-)

diff --git 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AbstractCreateIndexCommand.java
 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AbstractCreateIndexCommand.java
index db797e1dc65..1208e63e46e 100644
--- 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AbstractCreateIndexCommand.java
+++ 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AbstractCreateIndexCommand.java
@@ -98,7 +98,7 @@ public abstract class AbstractCreateIndexCommand extends 
AbstractIndexCommand {
             }
         }
 
-        if (unique && !new 
HashSet<>(columns).containsAll(table.colocationColumnNames())) {
+        if (unique && !new 
HashSet<>(columns).containsAll(CatalogUtils.resolveColumnNames(table, 
table.colocationColumns()))) {
             throw new CatalogValidationException("Unique index must include 
all colocation columns.");
         }
 
diff --git 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/TablesSystemViewProvider.java
 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/TablesSystemViewProvider.java
index be21817ab9b..e8a03f814e6 100644
--- 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/TablesSystemViewProvider.java
+++ 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/TablesSystemViewProvider.java
@@ -27,6 +27,7 @@ import java.util.concurrent.Flow.Publisher;
 import java.util.function.Supplier;
 import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogSystemViewProvider;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import 
org.apache.ignite.internal.catalog.descriptors.CatalogTableColumnDescriptor;
 import org.apache.ignite.internal.catalog.descriptors.CatalogTableDescriptor;
 import org.apache.ignite.internal.systemview.api.SystemView;
@@ -75,7 +76,8 @@ public class TablesSystemViewProvider implements 
CatalogSystemViewProvider {
                 .addColumn("TABLE_PK_INDEX_ID", INT32, entry -> 
entry.table.primaryKeyIndexId())
                 .addColumn("ZONE_NAME", STRING, entry -> entry.zoneName)
                 .addColumn("STORAGE_PROFILE", STRING, entry -> 
entry.table.storageProfile())
-                .addColumn("TABLE_COLOCATION_COLUMNS", STRING, entry -> 
concatColumns(entry.table.colocationColumnNames()))
+                .addColumn("TABLE_COLOCATION_COLUMNS", STRING, entry ->
+                        
concatColumns(CatalogUtils.resolveColumnNames(entry.table, 
entry.table.colocationColumns())))
                 .addColumn("SCHEMA_ID", INT32, entry -> entry.table.schemaId())
                 .addColumn("ZONE_ID", INT32, entry -> entry.table.zoneId())
                 // TODO https://issues.apache.org/jira/browse/IGNITE-24589: 
Next columns are deprecated and should be removed.
@@ -84,7 +86,8 @@ public class TablesSystemViewProvider implements 
CatalogSystemViewProvider {
                 .addColumn("NAME", STRING, entry -> entry.table.name())
                 .addColumn("ID", INT32, entry -> entry.table.id())
                 .addColumn("PK_INDEX_ID", INT32, entry -> 
entry.table.primaryKeyIndexId())
-                .addColumn("COLOCATION_KEY_INDEX", STRING, entry -> 
concatColumns(entry.table.colocationColumnNames()))
+                .addColumn("COLOCATION_KEY_INDEX", STRING, entry ->
+                        
concatColumns(CatalogUtils.resolveColumnNames(entry.table, 
entry.table.colocationColumns())))
                 .addColumn("ZONE", STRING, entry -> entry.zoneName)
                 .dataProvider(viewDataPublisher)
                 .build();
diff --git 
a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcMetadataCatalog.java
 
b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcMetadataCatalog.java
index 325ab117a10..045e7180b60 100644
--- 
a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcMetadataCatalog.java
+++ 
b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcMetadataCatalog.java
@@ -34,6 +34,7 @@ import java.util.TreeSet;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Stream;
 import org.apache.ignite.internal.catalog.CatalogService;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import org.apache.ignite.internal.catalog.descriptors.CatalogColumnContainer;
 import org.apache.ignite.internal.catalog.descriptors.CatalogObjectDescriptor;
 import org.apache.ignite.internal.catalog.descriptors.CatalogSchemaDescriptor;
@@ -244,7 +245,7 @@ public class JdbcMetadataCatalog {
     private static JdbcPrimaryKeyMeta createPrimaryKeyMeta(String schemaName, 
CatalogTableDescriptor tbl) {
         String keyName = PK + tbl.name();
 
-        List<String> keyColNames = List.copyOf(tbl.primaryKeyColumnNames());
+        List<String> keyColNames = CatalogUtils.resolveColumnNames(tbl, 
tbl.primaryKeyColumns());
 
         return new JdbcPrimaryKeyMeta(schemaName, tbl.name(), keyName, 
keyColNames);
     }
diff --git 
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverter.java
 
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverter.java
index 32caadb3900..c4780c26b21 100644
--- 
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverter.java
+++ 
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverter.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import org.apache.ignite.internal.catalog.commands.DefaultValue;
 import org.apache.ignite.internal.catalog.commands.DefaultValue.ConstantValue;
 import org.apache.ignite.internal.catalog.commands.DefaultValue.FunctionCall;
@@ -171,11 +172,14 @@ public final class CatalogToSchemaDescriptorConverter {
             columns.add(convert(column));
         }
 
+        List<String> colocationColumns = tableDescriptor.primaryKeyColumns() 
== tableDescriptor.colocationColumns()
+                ? null : CatalogUtils.resolveColumnNames(tableDescriptor, 
tableDescriptor.colocationColumns());
+
         return new SchemaDescriptor(
                 tableVersion,
                 columns,
-                tableDescriptor.primaryKeyColumnNames(),
-                tableDescriptor.colocationColumnNames()
+                CatalogUtils.resolveColumnNames(tableDescriptor, 
tableDescriptor.primaryKeyColumns()),
+                colocationColumns
         );
     }
 
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 a8ce4668786..418bdfe2793 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
@@ -20,6 +20,8 @@ package org.apache.ignite.internal.sql.engine.schema;
 import static 
org.apache.ignite.internal.catalog.descriptors.CatalogIndexStatus.AVAILABLE;
 import static 
org.apache.ignite.internal.util.CompletableFutures.nullCompletedFuture;
 
+import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntList;
 import it.unimi.dsi.fastutil.objects.Object2IntMap;
 import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
 import java.util.ArrayList;
@@ -30,7 +32,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Supplier;
-import java.util.stream.Collectors;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitSet;
@@ -292,7 +293,6 @@ public class SqlSchemaManagerImpl implements 
SqlSchemaManager {
     private TableDescriptor createTableDescriptorForTable(Catalog catalog, 
CatalogTableDescriptor descriptor) {
         List<CatalogTableColumnDescriptor> columns = descriptor.columns();
         List<ColumnDescriptor> colDescriptors = new ArrayList<>(columns.size() 
+ 2);
-        Object2IntMap<String> columnToIndex = buildColumnToIndexMap(columns);
 
         for (int i = 0; i < columns.size(); i++) {
             CatalogTableColumnDescriptor col = columns.get(i);
@@ -303,7 +303,7 @@ public class SqlSchemaManagerImpl implements 
SqlSchemaManager {
         }
 
         if (Commons.implicitPkEnabled()) {
-            int implicitPkColIdx = 
columnToIndex.getOrDefault(Commons.IMPLICIT_PK_COL_NAME, -1);
+            int implicitPkColIdx = 
descriptor.columnIndex(Commons.IMPLICIT_PK_COL_NAME);
 
             if (implicitPkColIdx != -1) {
                 colDescriptors.set(implicitPkColIdx, 
injectDefault(colDescriptors.get(implicitPkColIdx)));
@@ -317,17 +317,14 @@ public class SqlSchemaManagerImpl implements 
SqlSchemaManager {
 
         CatalogZoneDescriptor zoneDescriptor = 
Objects.requireNonNull(catalog.zone(descriptor.zoneId()));
         CatalogSchemaDescriptor schemaDescriptor = 
Objects.requireNonNull(catalog.schema(descriptor.schemaId()));
-        IgniteDistribution distribution = createDistribution(descriptor, 
columnToIndex, schemaDescriptor.name(), zoneDescriptor.name());
+        IgniteDistribution distribution = createDistribution(descriptor, 
schemaDescriptor.name(), zoneDescriptor.name());
 
         return new TableDescriptorImpl(colDescriptors, distribution);
     }
 
-    private IgniteDistribution createDistribution(
-            CatalogTableDescriptor descriptor, Object2IntMap<String> 
columnToIndex, String schemaName, String zoneName
-    ) {
-        List<Integer> colocationColumns = 
descriptor.colocationColumnNames().stream()
-                .map(columnToIndex::getInt)
-                .collect(Collectors.toList());
+    private IgniteDistribution createDistribution(CatalogTableDescriptor 
descriptor, String schemaName, String zoneName) {
+        IntList colocationColumns = 
IntArrayList.toList(descriptor.colocationColumns().intStream()
+                .map(descriptor::columnIndexById));
 
         int tableId = descriptor.id();
         int zoneId = descriptor.zoneId();
@@ -493,7 +490,7 @@ public class SqlSchemaManagerImpl implements 
SqlSchemaManager {
 
                 CatalogZoneDescriptor zoneDescriptor = 
Objects.requireNonNull(catalog.zone(table.zoneId()));
                 CatalogSchemaDescriptor schemaDescriptor = 
Objects.requireNonNull(catalog.schema(table.schemaId()));
-                IgniteDistribution distribution = createDistribution(table, 
columnToIndex, schemaDescriptor.name(), zoneDescriptor.name());
+                IgniteDistribution distribution = createDistribution(table, 
schemaDescriptor.name(), zoneDescriptor.name());
 
                 return createSchemaIndex(
                         indexDescriptor,

Reply via email to