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,
