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

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

commit 22d25603af24089ec408d0a3e40e080afe396fc7
Author: amashenkov <[email protected]>
AuthorDate: Tue Aug 1 23:34:56 2023 +0300

    Styles.
---
 .../sql/engine/exec/ExecutionServiceImpl.java      |  2 +-
 .../internal/sql/engine/rel/AbstractIndexScan.java |  3 +-
 .../engine/rel/logical/IgniteLogicalIndexScan.java |  5 +-
 .../engine/rule/logical/LogicalOrToUnionRule.java  |  3 --
 .../sql/engine/schema/CatalogSqlSchemaManager.java |  1 -
 .../sql/engine/schema/IgniteSchemaIndex.java       | 13 +++++
 .../sql/engine/exec/ExecutionServiceImplTest.java  |  6 +--
 .../engine/framework/PredefinedSchemaManager.java  | 10 ++--
 .../sql/engine/framework/TestBuilders.java         | 56 ++++++++++++++--------
 .../internal/sql/engine/framework/TestIndex.java   | 40 +++++-----------
 .../internal/sql/engine/framework/TestNode.java    |  2 +-
 .../internal/sql/engine/framework/TestTable.java   | 19 ++++----
 12 files changed, 85 insertions(+), 75 deletions(-)

diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
index e330ebd4ed..a89cf33464 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
@@ -428,7 +428,7 @@ public class ExecutionServiceImpl<RowT> implements 
ExecutionService, TopologyEve
 
     private DistributedQueryManager getOrCreateQueryManager(QueryStartRequest 
msg) {
         return queryManagerMap.computeIfAbsent(msg.queryId(), key -> {
-            BaseQueryContext ctx = createQueryContext(key, msg.schema(), 
(int)msg.schemaVersion(), msg.parameters());
+            BaseQueryContext ctx = createQueryContext(key, msg.schema(), (int) 
msg.schemaVersion(), msg.parameters());
 
             return new DistributedQueryManager(ctx);
         });
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/AbstractIndexScan.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/AbstractIndexScan.java
index d7e416f6ce..27617f13ba 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/AbstractIndexScan.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/AbstractIndexScan.java
@@ -41,7 +41,6 @@ import 
org.apache.ignite.internal.sql.engine.metadata.cost.IgniteCost;
 import org.apache.ignite.internal.sql.engine.prepare.bounds.MultiBounds;
 import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
-import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.jetbrains.annotations.Nullable;
 
@@ -126,7 +125,7 @@ public abstract class AbstractIndexScan extends 
ProjectableFilterableTableScan {
 
         double cost = 0;
 
-        if (type == Type.HASH) {
+        if (type == IgniteIndex.Type.HASH) {
             boolean notExact = (searchBounds() == null)
                     || searchBounds().stream().anyMatch(bound -> bound.type() 
== SearchBounds.Type.RANGE);
 
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/logical/IgniteLogicalIndexScan.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/logical/IgniteLogicalIndexScan.java
index 25ba268f2a..3bcc96c058 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/logical/IgniteLogicalIndexScan.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/logical/IgniteLogicalIndexScan.java
@@ -27,9 +27,8 @@ import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.mapping.Mappings;
 import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.AbstractIndexScan;
-import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
-import org.apache.ignite.internal.sql.engine.schema.IgniteSchemaIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
+import org.apache.ignite.internal.sql.engine.schema.IgniteSchemaIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteTable;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
@@ -111,7 +110,7 @@ public class IgniteLogicalIndexScan extends 
AbstractIndexScan {
             RelTraitSet traits,
             RelOptTable tbl,
             String idxName,
-            IgniteIndex.Type type,
+            Type type,
             @Nullable List<RexNode> proj,
             @Nullable RexNode cond,
             @Nullable List<SearchBounds> searchBounds,
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/LogicalOrToUnionRule.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/LogicalOrToUnionRule.java
index e7f1463ffe..26d905975d 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/LogicalOrToUnionRule.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/LogicalOrToUnionRule.java
@@ -26,7 +26,6 @@ import org.apache.calcite.plan.RelOptRuleCall;
 import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.plan.RelRule;
 import org.apache.calcite.plan.RelTraitSet;
-import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rex.RexBuilder;
@@ -38,10 +37,8 @@ import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.tools.RelBuilder;
 import org.apache.calcite.util.mapping.Mappings;
 import 
org.apache.ignite.internal.sql.engine.rel.logical.IgniteLogicalTableScan;
-import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteSchemaIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteTable;
-import org.apache.ignite.internal.sql.engine.trait.TraitUtils;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.apache.ignite.internal.util.CollectionUtils;
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/CatalogSqlSchemaManager.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/CatalogSqlSchemaManager.java
index 861018ba3b..c0c7ce63cb 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/CatalogSqlSchemaManager.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/CatalogSqlSchemaManager.java
@@ -50,7 +50,6 @@ import 
org.apache.ignite.internal.schema.DefaultValueGenerator;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
 import org.apache.ignite.internal.sql.engine.trait.IgniteDistribution;
 import org.apache.ignite.internal.sql.engine.trait.IgniteDistributions;
-import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 /**
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/IgniteSchemaIndex.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/IgniteSchemaIndex.java
index 09870c0fdc..6a237efe97 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/IgniteSchemaIndex.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/IgniteSchemaIndex.java
@@ -155,6 +155,19 @@ public class IgniteSchemaIndex {
     }
 
     //TODO: cache rowType as it can't be changed.
+    /**
+     * Returns index row type.
+     *
+     * <p>This is a struct type whose fields describe the names and types of 
indexed columns.</p>
+     *
+     * <p>The implementer must use the type factory provided. This ensures that
+     * the type is converted into a canonical form; other equal types in the 
same
+     * query will use the same object.</p>
+     *
+     * @param typeFactory Type factory with which to create the type
+     * @param tableDescriptor Table descriptor.
+     * @return Row type.
+     */
     public RelDataType getRowType(IgniteTypeFactory typeFactory, 
TableDescriptor tableDescriptor) {
         RelDataTypeFactory.Builder b = new 
RelDataTypeFactory.Builder(typeFactory);
 
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
index 319f27736f..4d6d1054b9 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
@@ -34,7 +34,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -90,7 +89,6 @@ import 
org.apache.ignite.internal.sql.engine.schema.ColumnDescriptor;
 import org.apache.ignite.internal.sql.engine.schema.ColumnDescriptorImpl;
 import org.apache.ignite.internal.sql.engine.schema.DefaultValueStrategy;
 import org.apache.ignite.internal.sql.engine.schema.IgniteCatalogSchema;
-import org.apache.ignite.internal.sql.engine.schema.IgniteSchema;
 import org.apache.ignite.internal.sql.engine.schema.SqlSchemaManager;
 import org.apache.ignite.internal.sql.engine.schema.TableDescriptorImpl;
 import org.apache.ignite.internal.sql.engine.sql.ParsedResult;
@@ -782,7 +780,9 @@ public class ExecutionServiceImplTest {
                     MailboxRegistry mailboxRegistry,
                     ExchangeService exchangeService,
                     ResolvedDependencies deps) {
-                HashFunctionFactory<Object[]> funcFactory = new 
HashFunctionFactoryImpl<>(ctx.getRootSchema().unwrap(IgniteCatalogSchema.class),
 ctx.rowHandler());
+                IgniteCatalogSchema schema = 
ctx.getRootSchema().unwrap(IgniteCatalogSchema.class);
+
+                HashFunctionFactory<Object[]> funcFactory = new 
HashFunctionFactoryImpl<>(schema, ctx.rowHandler());
 
                 return new LogicalRelImplementor<>(ctx, funcFactory, 
mailboxRegistry, exchangeService, deps) {
                     @Override
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/PredefinedSchemaManager.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/PredefinedSchemaManager.java
index 637e77058e..612a7e2ff0 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/PredefinedSchemaManager.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/PredefinedSchemaManager.java
@@ -71,8 +71,8 @@ public class PredefinedSchemaManager implements 
SqlSchemaManager {
 
     /** {@inheritDoc} */
     @Override
-    public SchemaPlus schema(String name, int version) {
-        return schema(name);
+    public @Nullable SchemaPlus schema(@Nullable String name, int version) {
+        return getSchema(name);
     }
 
     /** {@inheritDoc} */
@@ -83,11 +83,11 @@ public class PredefinedSchemaManager implements 
SqlSchemaManager {
 
     /** {@inheritDoc} */
     @Override
-    public SchemaPlus latestSchema(@Nullable String name) {
-        return schema(name);
+    public @Nullable SchemaPlus latestSchema(@Nullable String name) {
+        return getSchema(name);
     }
 
-    private SchemaPlus schema(@Nullable String schemaName) {
+    private @Nullable SchemaPlus getSchema(@Nullable String schemaName) {
         return root.getSubSchema(schemaName == null ? DEFAULT_SCHEMA_NAME : 
schemaName);
     }
 }
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 270da0b545..69f30e2673 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
@@ -33,6 +33,7 @@ import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.schema.Table;
 import org.apache.ignite.internal.schema.NativeType;
 import org.apache.ignite.internal.sql.engine.exec.ArrayRowHandler;
@@ -47,10 +48,12 @@ import 
org.apache.ignite.internal.sql.engine.schema.ColumnDescriptorImpl;
 import org.apache.ignite.internal.sql.engine.schema.DefaultValueStrategy;
 import org.apache.ignite.internal.sql.engine.schema.IgniteCatalogSchema;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Collation;
-import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
+import org.apache.ignite.internal.sql.engine.schema.IgniteSchemaIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteTable;
+import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
 import org.apache.ignite.internal.sql.engine.schema.TableDescriptorImpl;
 import org.apache.ignite.internal.sql.engine.trait.IgniteDistribution;
+import org.apache.ignite.internal.sql.engine.trait.TraitUtils;
 import org.apache.ignite.internal.sql.engine.util.BaseQueryContext;
 import org.apache.ignite.network.ClusterNode;
 import org.jetbrains.annotations.Nullable;
@@ -424,16 +427,19 @@ public class TestBuilders {
                 throw new IllegalArgumentException("Table must contain at 
least one column");
             }
 
-            TestTable testTable = new TestTable(
-                    new TableDescriptorImpl(columns, distribution),
+            TableDescriptorImpl tableDescriptor = new 
TableDescriptorImpl(columns, distribution);
+
+            Map<String, IgniteSchemaIndex> indexMap = indexBuilders.stream()
+                    .map(idx -> idx.build(tableDescriptor))
+                    .collect(Collectors.toMap(TestIndex::name, 
Function.identity()));
+
+            return new TestTable(
+                    tableDescriptor,
                     Objects.requireNonNull(name),
                     Map.of(),
-                    size
+                    size,
+                    indexMap
             );
-
-            
indexBuilders.stream().map(AbstractIndexBuilderImpl::build).forEach(testTable::addIndex);
-
-            return testTable;
         }
 
         /** {@inheritDoc} */
@@ -477,11 +483,13 @@ public class TestBuilders {
         }
 
         private TestTable build() {
-            TestTable testTable = new TestTable(new 
TableDescriptorImpl(columns, distribution), name, dataProviders, size);
+            TableDescriptorImpl tableDescriptor = new 
TableDescriptorImpl(columns, distribution);
 
-            indexBuilders.forEach(idx -> testTable.addIndex(idx.build()));
+            Map<String, IgniteSchemaIndex> indexMap = indexBuilders.stream()
+                    .map(idx -> idx.build(tableDescriptor))
+                    .collect(Collectors.toMap(TestIndex::name, 
Function.identity()));
 
-            return testTable;
+            return new TestTable(tableDescriptor, name, dataProviders, size, 
indexMap);
         }
     }
 
@@ -509,7 +517,7 @@ public class TestBuilders {
 
         /** {@inheritDoc} */
         @Override
-        public TestIndex build() {
+        public TestIndex build(TableDescriptor desc) {
             if (name == null) {
                 throw new IllegalArgumentException("Name is not specified");
             }
@@ -522,7 +530,9 @@ public class TestBuilders {
                 throw new IllegalArgumentException("Collation must be 
specified for each of columns.");
             }
 
-            return new TestIndex(name, Type.SORTED, columns, collations, 
dataProviders);
+            RelCollation collation = TraitUtils.createCollation(columns, 
collations, desc);
+
+            return TestIndex.createSorted(name, desc.distribution(), 
collation, dataProviders);
         }
     }
 
@@ -549,7 +559,7 @@ public class TestBuilders {
 
         /** {@inheritDoc} */
         @Override
-        public TestIndex build() {
+        public TestIndex build(TableDescriptor desc) {
             if (name == null) {
                 throw new IllegalArgumentException("Name is not specified");
             }
@@ -560,7 +570,9 @@ public class TestBuilders {
 
             assert collations == null : "Collation is not supported.";
 
-            return new TestIndex(name, Type.HASH, columns, null, 
dataProviders);
+            RelCollation collation = TraitUtils.createCollation(columns, 
collations, desc);
+
+            return TestIndex.createHash(name, desc.distribution(), collation, 
dataProviders);
         }
     }
 
@@ -587,10 +599,12 @@ public class TestBuilders {
         }
 
         @Override
-        TestIndex build() {
+        TestIndex build(TableDescriptor desc) {
             assert collations.size() == columns.size();
 
-            return TestIndex.createSorted(name, columns, collations, 
dataProviders);
+            RelCollation collation = TraitUtils.createCollation(columns, 
collations, desc);
+
+            return TestIndex.createSorted(name, desc.distribution(), 
collation, dataProviders);
         }
     }
 
@@ -617,10 +631,12 @@ public class TestBuilders {
         }
 
         @Override
-        TestIndex build() {
+        TestIndex build(TableDescriptor desc) {
             assert collations == null;
 
-            return TestIndex.createHash(name, columns, dataProviders);
+            RelCollation collation = TraitUtils.createCollation(columns, 
collations, desc);
+
+            return TestIndex.createHash(name, desc.distribution(), collation, 
dataProviders);
         }
     }
 
@@ -723,7 +739,7 @@ public class TestBuilders {
             return self();
         }
 
-        abstract TestIndex build();
+        abstract TestIndex build(TableDescriptor desc);
     }
 
     private abstract static class AbstractDataSourceBuilderImpl<ChildT> {
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestIndex.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestIndex.java
index dd8449e6bb..f7678459d3 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestIndex.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestIndex.java
@@ -19,64 +19,50 @@ package org.apache.ignite.internal.sql.engine.framework;
 
 import static org.apache.ignite.lang.IgniteStringFormatter.format;
 
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
-import org.jetbrains.annotations.Nullable;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
+import org.apache.ignite.internal.sql.engine.schema.IgniteSchemaIndex;
+import org.apache.ignite.internal.sql.engine.trait.IgniteDistribution;
 
 /**
  * A test index that implements all the necessary for the optimizer methods to 
be used to prepare a query, as well as provides access to the
  * data to use this index in execution-related scenarios.
  */
-public class TestIndex extends IgniteIndex {
+public class TestIndex extends IgniteSchemaIndex {
     private static final String DATA_PROVIDER_NOT_CONFIGURED_MESSAGE_TEMPLATE =
             "DataProvider is not configured [index={}, node={}]";
 
     /** Factory method for creating hash-index. */
-    static TestIndex createHash(String name, List<String> indexedColumns, 
Map<String, DataProvider<?>> dataProviders) {
-        return new TestIndex(name, Type.HASH, indexedColumns, null, 
dataProviders);
+    static TestIndex createHash(String name, IgniteDistribution distribution, 
RelCollation collation,
+            Map<String, DataProvider<?>> dataProviders) {
+        return new TestIndex(name, Type.HASH, distribution, collation, 
dataProviders);
     }
 
     /** Factory method for creating sorted-index. */
-    static TestIndex createSorted(String name, List<String> columns, 
List<Collation> collations,
+    static TestIndex createSorted(String name, IgniteDistribution 
distribution, RelCollation collation,
             Map<String, DataProvider<?>> dataProviders) {
-        return new TestIndex(name, Type.SORTED, columns, collations, 
dataProviders);
+        return new TestIndex(name, Type.SORTED, distribution, collation, 
dataProviders);
     }
 
     private static final AtomicInteger ID = new AtomicInteger();
 
-    private final int id = ID.incrementAndGet();
-    private final String name;
-
     private final Map<String, DataProvider<?>> dataProviders;
 
     /** Constructor. */
     TestIndex(
             String name,
             Type type,
-            List<String> columns,
-            @Nullable List<Collation> collations,
+            IgniteDistribution distribution,
+            RelCollation collation,
             Map<String, DataProvider<?>> dataProviders
     ) {
-        super(type, columns, collations);
+        super(ID.incrementAndGet(), name, type, distribution, collation);
 
-        this.name = name;
         this.dataProviders = dataProviders;
     }
 
-    /** Returns an id of the index. */
-    @Override
-    public int id() {
-        return id;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public String name() {
-        return name;
-    }
-
     /**
      * Returns the data provider for the given node.
      *
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestNode.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestNode.java
index 031f7a8ac3..440ca7ed6d 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestNode.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestNode.java
@@ -146,7 +146,7 @@ public class TestNode implements LifecycleAware {
                     @Override
                     public Node<Object[]> visit(IgniteIndexScan rel) {
                         TestTable tbl = rel.getTable().unwrap(TestTable.class);
-                        TestIndex idx = (TestIndex) 
tbl.getIndex(rel.indexName());
+                        TestIndex idx = (TestIndex) 
tbl.indexes().get(rel.indexName());
 
                         DataProvider<Object[]> dataProvider = 
idx.dataProvider(ctx.localNode().name());
 
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestTable.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestTable.java
index 4e860d7745..87ad26f24d 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestTable.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestTable.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.sql.engine.framework;
 import static org.apache.ignite.lang.IgniteStringFormatter.format;
 
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -51,9 +50,8 @@ import 
org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.jetbrains.annotations.Nullable;
 
 /**
- * A test table that implements all the necessary for the optimizer methods to 
be used
- * to prepare a query, as well as provides access to the data to use this 
table in
- * execution-related scenarios.
+ * A test table that implements all the necessary for the optimizer methods to 
be used to prepare a query, as well as provides access to the
+ * data to use this table in execution-related scenarios.
  */
 public class TestTable implements IgniteTable {
     private static final String DATA_PROVIDER_NOT_CONFIGURED_MESSAGE_TEMPLATE =
@@ -62,7 +60,7 @@ public class TestTable implements IgniteTable {
     private static final AtomicInteger ID = new AtomicInteger();
 
     private final int id = ID.incrementAndGet();
-    private final Map<String, IgniteIndex> indexes = new HashMap<>();
+    private final Map<String, IgniteSchemaIndex> indexes;
 
     private final String name;
     private final double rowCnt;
@@ -83,6 +81,7 @@ public class TestTable implements IgniteTable {
         this.rowCnt = rowCnt;
         this.colocationGroup = colocationGroup;
 
+        indexes = Map.of();
         dataProviders = Collections.emptyMap();
     }
 
@@ -91,12 +90,14 @@ public class TestTable implements IgniteTable {
             TableDescriptor descriptor,
             String name,
             Map<String, DataProvider<?>> dataProviders,
-            double rowCnt
+            double rowCnt,
+            Map<String, IgniteSchemaIndex> indexMap
     ) {
         this.descriptor = descriptor;
         this.name = name;
         this.rowCnt = rowCnt;
         this.dataProviders = dataProviders;
+        indexes = indexMap;
 
         this.colocationGroup = 
ColocationGroup.forNodes(List.copyOf(dataProviders.keySet()));
     }
@@ -241,19 +242,19 @@ public class TestTable implements IgniteTable {
     /** {@inheritDoc} */
     @Override
     public Map<String, IgniteSchemaIndex> indexes() {
-        throw new UnsupportedOperationException("Not implemented yet");
+        return indexes;
     }
 
     /** {@inheritDoc} */
     @Override
     public void addIndex(IgniteIndex idxTbl) {
-        indexes.put(idxTbl.name(), idxTbl);
+        throw new UnsupportedOperationException("Not implemented yet");
     }
 
     /** {@inheritDoc} */
     @Override
     public IgniteIndex getIndex(String idxName) {
-        return indexes.get(idxName);
+        throw new UnsupportedOperationException("Not implemented yet");
     }
 
     /** {@inheritDoc} */

Reply via email to