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 8276700f76d01321bb297daa70c855d90c71a54d
Author: amashenkov <[email protected]>
AuthorDate: Tue Aug 1 22:18:28 2023 +0300

    Replace IgniteIndex with IgniteSchemaIndex
---
 .../sql/engine/exec/LogicalRelImplementor.java     |  8 +++---
 .../internal/sql/engine/exec/RowConverter.java     |  2 +-
 .../internal/sql/engine/exec/ScannableTable.java   |  4 +--
 .../sql/engine/exec/ScannableTableImpl.java        |  5 ++--
 .../sql/engine/exec/rel/IndexScanNode.java         |  8 +++---
 .../engine/rel/logical/IgniteLogicalIndexScan.java |  6 ++--
 .../sql/engine/rule/LogicalScanConverterRule.java  |  7 ++---
 .../sql/engine/rule/logical/ExposeIndexRule.java   |  4 +--
 .../sql/engine/schema/CatalogSqlSchemaManager.java | 33 ++++++++++++++--------
 .../sql/engine/schema/IgniteSchemaIndex.java       | 27 +++++++++++++++++-
 .../exec/rel/IndexScanNodeExecutionTest.java       | 15 ++++++++--
 .../engine/exec/rel/ScannableTableSelfTest.java    | 17 ++++-------
 .../internal/sql/engine/framework/TestIndex.java   |  1 +
 13 files changed, 87 insertions(+), 50 deletions(-)

diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/LogicalRelImplementor.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/LogicalRelImplementor.java
index 464a0c0d5a..0b4e3e7cd0 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/LogicalRelImplementor.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/LogicalRelImplementor.java
@@ -103,8 +103,8 @@ import 
org.apache.ignite.internal.sql.engine.rel.agg.IgniteReduceHashAggregate;
 import org.apache.ignite.internal.sql.engine.rel.agg.IgniteReduceSortAggregate;
 import org.apache.ignite.internal.sql.engine.rel.set.IgniteSetOp;
 import org.apache.ignite.internal.sql.engine.rule.LogicalScanConverterRule;
-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.schema.IgniteSchemaIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteTable;
 import org.apache.ignite.internal.sql.engine.trait.Destination;
 import org.apache.ignite.internal.sql.engine.trait.IgniteDistribution;
@@ -329,7 +329,7 @@ public class LogicalRelImplementor<RowT> implements 
IgniteRelVisitor<Node<RowT>>
         RelDataType rowType = tbl.getRowType(typeFactory, requiredColumns);
         ScannableTable scannableTable = 
resolvedDependencies.scannableTable(tbl.id());
 
-        IgniteIndex idx = tbl.getIndex(rel.indexName());
+        IgniteSchemaIndex idx = tbl.indexes().get(rel.indexName());
 
         List<SearchBounds> searchBounds = rel.searchBounds();
         RexNode condition = rel.condition();
@@ -343,8 +343,8 @@ public class LogicalRelImplementor<RowT> implements 
IgniteRelVisitor<Node<RowT>>
         if (searchBounds != null) {
             Comparator<RowT> searchRowComparator = null;
 
-            if (idx.collations() != null) {
-                searchRowComparator = 
expressionFactory.comparator(TraitUtils.createCollation(idx.collations()));
+            if (idx.type() != Type.SORTED) {
+                searchRowComparator = 
expressionFactory.comparator(idx.collation());
             }
 
             ranges = expressionFactory.ranges(searchBounds, 
idx.getRowType(typeFactory, tbl.descriptor()), searchRowComparator);
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/RowConverter.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/RowConverter.java
index 3abd4cd5c9..ff6df49cdd 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/RowConverter.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/RowConverter.java
@@ -40,7 +40,7 @@ public final class RowConverter {
     /**
      * Creates binary tuple schema for index rows.
      */
-    public static BinaryTupleSchema createIndexRowSchema(List<String> 
indexedColumns, TableDescriptor tableDescriptor) {
+    public static BinaryTupleSchema createIndexRowSchema(List<Integer> 
indexedColumns, TableDescriptor tableDescriptor) {
         Element[] elements = indexedColumns.stream()
                 .map(tableDescriptor::columnDescriptor)
                 .map(colDesc -> new Element(colDesc.physicalType(), true))
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ScannableTable.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ScannableTable.java
index 1ea160ca8e..7d52acc2e9 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ScannableTable.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ScannableTable.java
@@ -57,7 +57,7 @@ public interface ScannableTable {
      * @return A publisher that produces rows.
      */
     <RowT> Publisher<RowT> indexRangeScan(ExecutionContext<RowT> ctx, 
PartitionWithTerm partWithTerm,
-            RowFactory<RowT> rowFactory, int indexId, List<String> columns,
+            RowFactory<RowT> rowFactory, int indexId, List<Integer> columns,
             @Nullable RangeCondition<RowT> cond, @Nullable BitSet 
requiredColumns);
 
     /**
@@ -74,6 +74,6 @@ public interface ScannableTable {
      * @return A publisher that produces rows.
      */
     <RowT> Publisher<RowT> indexLookup(ExecutionContext<RowT> ctx, 
PartitionWithTerm partWithTerm,
-            RowFactory<RowT> rowFactory, int indexId, List<String> columns,
+            RowFactory<RowT> rowFactory, int indexId, List<Integer> columns,
             RowT key, @Nullable BitSet requiredColumns);
 }
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ScannableTableImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ScannableTableImpl.java
index 147086a52b..b20e934673 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ScannableTableImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ScannableTableImpl.java
@@ -83,7 +83,7 @@ public class ScannableTableImpl implements ScannableTable {
             PartitionWithTerm partWithTerm,
             RowFactory<RowT> rowFactory,
             int indexId,
-            List<String> columns,
+            List<Integer> columns,
             @Nullable RangeCondition<RowT> cond,
             @Nullable BitSet requiredColumns
     ) {
@@ -143,7 +143,8 @@ public class ScannableTableImpl implements ScannableTable {
             PartitionWithTerm partWithTerm,
             RowFactory<RowT> rowFactory,
             int indexId,
-            List<String> columns, RowT key,
+            List<Integer> columns,
+            RowT key,
             @Nullable BitSet requiredColumns
     ) {
 
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
index 55ad834cdf..52647241eb 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
@@ -31,7 +31,7 @@ import 
org.apache.ignite.internal.sql.engine.exec.ScannableTable;
 import org.apache.ignite.internal.sql.engine.exec.exp.RangeCondition;
 import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
 import org.apache.ignite.internal.sql.engine.metadata.PartitionWithTerm;
-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.TableDescriptor;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.apache.ignite.internal.util.SubscriptionUtils;
@@ -43,7 +43,7 @@ import org.jetbrains.annotations.Nullable;
  */
 public class IndexScanNode<RowT> extends StorageScanNode<RowT> {
     /** Schema index. */
-    private final IgniteIndex schemaIndex;
+    private final IgniteSchemaIndex schemaIndex;
 
     private final ScannableTable table;
 
@@ -75,7 +75,7 @@ public class IndexScanNode<RowT> extends 
StorageScanNode<RowT> {
     public IndexScanNode(
             ExecutionContext<RowT> ctx,
             RowHandler.RowFactory<RowT> rowFactory,
-            IgniteIndex schemaIndex,
+            IgniteSchemaIndex schemaIndex,
             ScannableTable table,
             TableDescriptor tableDescriptor,
             Collection<PartitionWithTerm> partsWithTerms,
@@ -124,7 +124,7 @@ public class IndexScanNode<RowT> extends 
StorageScanNode<RowT> {
 
     private Publisher<RowT> partitionPublisher(PartitionWithTerm partWithTerm, 
@Nullable RangeCondition<RowT> cond) {
         int indexId = schemaIndex.id();
-        List<String> columns = schemaIndex.columns();
+        List<Integer> columns = schemaIndex.collation().getKeys();
         ExecutionContext<RowT> ctx = context();
 
         switch (schemaIndex.type()) {
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 d76a263c68..25ba268f2a 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
@@ -28,9 +28,9 @@ 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.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.sql.engine.util.RexUtils;
@@ -53,8 +53,8 @@ public class IgniteLogicalIndexScan extends AbstractIndexScan 
{
     ) {
         IgniteTable tbl = table.unwrap(IgniteTable.class);
         IgniteTypeFactory typeFactory = Commons.typeFactory(cluster);
-        IgniteIndex index = tbl.getIndex(idxName);
-        RelCollation collation = TraitUtils.createCollation(index.columns(), 
index.collations(), tbl.descriptor());
+        IgniteSchemaIndex index = tbl.indexes().get(idxName);
+        RelCollation collation = index.collation();
 
         List<SearchBounds> searchBounds;
         if (index.type() == Type.HASH) {
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
index 836cfe19de..42632f6469 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
@@ -39,10 +39,9 @@ import 
org.apache.ignite.internal.sql.engine.rel.IgniteTableScan;
 import 
org.apache.ignite.internal.sql.engine.rel.ProjectableFilterableTableScan;
 import 
org.apache.ignite.internal.sql.engine.rel.logical.IgniteLogicalIndexScan;
 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.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.trait.TraitUtils;
 
 /**
  * LogicalScanConverterRule.
@@ -62,10 +61,10 @@ public abstract class LogicalScanConverterRule<T extends 
ProjectableFilterableTa
                 ) {
                     RelOptCluster cluster = rel.getCluster();
                     IgniteTable table = 
rel.getTable().unwrap(IgniteTable.class);
-                    IgniteIndex index = table.getIndex(rel.indexName());
+                    IgniteSchemaIndex index = 
table.indexes().get(rel.indexName());
 
                     RelDistribution distribution = table.distribution();
-                    RelCollation collation = 
TraitUtils.createCollation(index.columns(), index.collations(), 
table.descriptor());
+                    RelCollation collation = index.collation();
                     RelCollation outputCollation = index.type() == Type.HASH ? 
RelCollations.EMPTY : collation;
 
                     if (rel.projects() != null || rel.requiredColumns() != 
null) {
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/ExposeIndexRule.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/ExposeIndexRule.java
index ffd52389dd..2eb00d359b 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/ExposeIndexRule.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/ExposeIndexRule.java
@@ -32,8 +32,8 @@ import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import 
org.apache.ignite.internal.sql.engine.rel.logical.IgniteLogicalIndexScan;
 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.IgniteIndex.Type;
+import org.apache.ignite.internal.sql.engine.schema.IgniteSchemaIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteTable;
 import org.immutables.value.Value;
 
@@ -85,7 +85,7 @@ public class ExposeIndexRule extends 
RelRule<ExposeIndexRule.Config> {
 
     /** Filter pre known not applicable variants. Significant shrink search 
space in some cases. */
     private static boolean filter(IgniteTable table, String idxName, 
List<SearchBounds> searchBounds) {
-        IgniteIndex index = table.getIndex(idxName);
+        IgniteSchemaIndex index = table.indexes().get(idxName);
 
         return index.type() == Type.SORTED || (searchBounds != null
                 && searchBounds.stream().noneMatch(bound -> bound.type() == 
SearchBounds.Type.RANGE));
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 432ad5834c..861018ba3b 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,6 +50,7 @@ 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;
 
 /**
@@ -116,21 +117,11 @@ public class CatalogSqlSchemaManager implements 
SqlSchemaManager {
             TableDescriptorImpl tableDescriptorImpl = 
tableDescriptorMap.get(tableId);
             assert tableDescriptorImpl != null : "Table is not found in 
schema: " + tableId;
 
-            String indexName = indexDescriptor.name();
             Map<String, IgniteSchemaIndex> tableIndexes = 
schemaTableIndexes.computeIfAbsent(tableId, id -> new LinkedHashMap<>());
 
-            Type type;
-            if (indexDescriptor instanceof CatalogSortedIndexDescriptor) {
-                type = Type.SORTED;
-            } else if (indexDescriptor instanceof CatalogHashIndexDescriptor) {
-                type = Type.HASH;
-            } else {
-                throw new IllegalArgumentException("Unexpected index type: " + 
indexDescriptor);
-            }
+            IgniteSchemaIndex schemaIndex = createSchemaIndex(indexDescriptor, 
tableDescriptorImpl);
 
-            RelCollation indexCollation = 
IgniteSchemaIndex.createIndexCollation(indexDescriptor, tableDescriptorImpl);
-            IgniteSchemaIndex schemaIndex = new IgniteSchemaIndex(indexName, 
type, tableDescriptorImpl.distribution(), indexCollation);
-            tableIndexes.put(indexName, schemaIndex);
+            tableIndexes.put(schemaIndex.name(), schemaIndex);
 
             schemaTableIndexes.put(tableId, tableIndexes);
         }
@@ -156,6 +147,24 @@ public class CatalogSqlSchemaManager implements 
SqlSchemaManager {
         return rootSchema.add(schemaName, igniteSchema);
     }
 
+    private static IgniteSchemaIndex createSchemaIndex(CatalogIndexDescriptor 
indexDescriptor, TableDescriptorImpl tableDescriptorImpl) {
+        Type type;
+        if (indexDescriptor instanceof CatalogSortedIndexDescriptor) {
+            type = IgniteIndex.Type.SORTED;
+        } else if (indexDescriptor instanceof CatalogHashIndexDescriptor) {
+            type = IgniteIndex.Type.HASH;
+        } else {
+            throw new IllegalArgumentException("Unexpected index type: " + 
indexDescriptor);
+        }
+
+        int indexId = indexDescriptor.id();
+        String indexName = indexDescriptor.name();
+        IgniteDistribution distribution = tableDescriptorImpl.distribution();
+        RelCollation indexCollation = 
IgniteSchemaIndex.createIndexCollation(indexDescriptor, tableDescriptorImpl);
+
+        return new IgniteSchemaIndex(indexId, indexName, type, distribution, 
indexCollation);
+    }
+
     private static TableDescriptorImpl 
createTableDescriptor(CatalogTableDescriptor descriptor) {
         List<ColumnDescriptor> colDescriptors = new ArrayList<>();
         List<Integer> colocationColumns = new ArrayList<>();
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 5a5171bca4..09870c0fdc 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
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.sql.engine.schema;
 
+import static 
org.apache.ignite.internal.sql.engine.util.TypeUtils.native2relationalType;
+
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.calcite.plan.Convention;
@@ -28,6 +30,8 @@ import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.RelFieldCollation.Direction;
 import org.apache.calcite.rel.RelFieldCollation.NullDirection;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.util.ImmutableBitSet;
 import 
org.apache.ignite.internal.catalog.descriptors.CatalogHashIndexDescriptor;
@@ -37,12 +41,15 @@ import 
org.apache.ignite.internal.catalog.descriptors.CatalogSortedIndexDescript
 import 
org.apache.ignite.internal.sql.engine.rel.logical.IgniteLogicalIndexScan;
 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.type.IgniteTypeFactory;
 
 /**
  * Auxiliary data structure to represent a table index.
  */
 public class IgniteSchemaIndex {
 
+    private final int id;
+
     private final String name;
 
     private final IgniteDistribution tableDistribution;
@@ -52,13 +59,19 @@ public class IgniteSchemaIndex {
     private final Type type;
 
     /** Constructor. */
-    public IgniteSchemaIndex(String name, Type type, IgniteDistribution 
tableDistribution, RelCollation collation) {
+    public IgniteSchemaIndex(int indexId, String name, Type type, 
IgniteDistribution tableDistribution, RelCollation collation) {
+        this.id = indexId;
         this.name = name;
         this.type = type;
         this.tableDistribution = tableDistribution;
         this.collation = collation;
     }
 
+    /** Returns an id of the index. */
+    public int id() {
+        return id;
+    }
+
     /** Returns the name of this index. */
     public String name() {
         return name;
@@ -140,4 +153,16 @@ public class IgniteSchemaIndex {
             throw new IllegalArgumentException("Unexpected index type: " + 
descriptor);
         }
     }
+
+    //TODO: cache rowType as it can't be changed.
+    public RelDataType getRowType(IgniteTypeFactory typeFactory, 
TableDescriptor tableDescriptor) {
+        RelDataTypeFactory.Builder b = new 
RelDataTypeFactory.Builder(typeFactory);
+
+        for (RelFieldCollation fieldCollation : 
collation.getFieldCollations()) {
+            ColumnDescriptor colDesc = 
tableDescriptor.columnDescriptor(fieldCollation.getFieldIndex());
+            b.add(colDesc.name(), native2relationalType(typeFactory, 
colDesc.physicalType(), colDesc.nullable()));
+        }
+
+        return b.build();
+    }
 }
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNodeExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNodeExecutionTest.java
index 1b6fb59cde..86525e3aaf 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNodeExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNodeExecutionTest.java
@@ -32,6 +32,7 @@ import java.util.concurrent.Flow.Publisher;
 import java.util.concurrent.Flow.Subscriber;
 import java.util.concurrent.Flow.Subscription;
 import java.util.stream.Collectors;
+import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rel.type.RelDataTypeFactory.Builder;
@@ -49,8 +50,11 @@ import 
org.apache.ignite.internal.sql.engine.exec.exp.RangeCondition;
 import org.apache.ignite.internal.sql.engine.metadata.PartitionWithTerm;
 import 
org.apache.ignite.internal.sql.engine.planner.AbstractPlannerTest.TestTableDescriptor;
 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.TableDescriptor;
+import org.apache.ignite.internal.sql.engine.trait.IgniteDistribution;
 import org.apache.ignite.internal.sql.engine.trait.IgniteDistributions;
+import org.apache.ignite.internal.sql.engine.trait.TraitUtils;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.apache.ignite.internal.table.InternalTable;
 import org.jetbrains.annotations.Nullable;
@@ -177,7 +181,12 @@ public class IndexScanNodeExecutionTest extends 
AbstractExecutionTest {
 
         TableDescriptor tableDescriptor = new 
TestTableDescriptor(IgniteDistributions::single, rowType);
 
-        IgniteIndex schemaIndex = new IgniteIndex(index);
+        //TODO: avoid IgniteIndex creation.
+        IgniteIndex idx = new IgniteIndex(index);
+        RelCollation collations = TraitUtils.createCollation(idx.columns(), 
idx.collations(), tableDescriptor);
+        IgniteDistribution distribution = tableDescriptor.distribution();
+
+        IgniteSchemaIndex schemaIndex = new IgniteSchemaIndex(index.id(), 
index.name(), idx.type(), distribution, collations);
         RowFactory<Object[]> rowFactory = 
ctx.rowHandler().factory(ctx.getTypeFactory(), rowType);
         SingleRangeIterable<Object[]> conditions = new 
SingleRangeIterable<>(new Object[]{}, null, false, false);
         List<PartitionWithTerm> partitions = scannableTable.getPartitions();
@@ -212,7 +221,7 @@ public class IndexScanNodeExecutionTest extends 
AbstractExecutionTest {
         /** {@inheritDoc} */
         @Override
         public <RowT> Publisher<RowT> indexRangeScan(ExecutionContext<RowT> 
ctx, PartitionWithTerm partWithTerm,
-                RowFactory<RowT> rowFactory, int indexId, List<String> columns,
+                RowFactory<RowT> rowFactory, int indexId, List<Integer> 
columns,
                 @Nullable RangeCondition<RowT> cond, @Nullable BitSet 
requiredColumns) {
 
             List<T> list = partitionedData.get(partWithTerm.partId());
@@ -221,7 +230,7 @@ public class IndexScanNodeExecutionTest extends 
AbstractExecutionTest {
 
         @Override
         public <RowT> Publisher<RowT> indexLookup(ExecutionContext<RowT> ctx, 
PartitionWithTerm partWithTerm,
-                RowFactory<RowT> rowFactory, int indexId, List<String> columns,
+                RowFactory<RowT> rowFactory, int indexId, List<Integer> 
columns,
                 RowT key, @Nullable BitSet requiredColumns) {
 
             return newPublisher(ctx, partWithTerm, rowFactory);
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ScannableTableSelfTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ScannableTableSelfTest.java
index 0e0dfd5d9d..fd91cfabbf 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ScannableTableSelfTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ScannableTableSelfTest.java
@@ -48,11 +48,11 @@ import java.util.concurrent.Flow.Subscriber;
 import java.util.concurrent.Flow.Subscription;
 import java.util.concurrent.SubmissionPublisher;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory.Builder;
-import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.index.SortedIndex;
@@ -641,7 +641,7 @@ public class ScannableTableSelfTest {
             RowHandler<Object[]> rowHandler = ArrayRowHandler.INSTANCE;
             RowFactory<Object[]> rowFactory = rowHandler.factory(TYPE_FACTORY, 
input.rowType);
             RangeCondition<Object[]> rangeCondition = 
condition.asRangeCondition();
-            List<String> indexColumns = input.getIndexColumns();
+            List<Integer> indexColumns = input.getIndexColumns();
 
             Publisher<Object[]> publisher = scannableTable.indexRangeScan(ctx, 
new PartitionWithTerm(partitionId, term), rowFactory,
                     indexId, indexColumns, rangeCondition, requiredFields);
@@ -675,7 +675,7 @@ public class ScannableTableSelfTest {
 
             RowHandler<Object[]> rowHandler = ArrayRowHandler.INSTANCE;
             RowFactory<Object[]> rowFactory = rowHandler.factory(TYPE_FACTORY, 
input.rowType);
-            List<String> indexColumns = input.getIndexColumns();
+            List<Integer> indexColumns = input.getIndexColumns();
 
             Publisher<Object[]> publisher = scannableTable.indexLookup(ctx, 
new PartitionWithTerm(partitionId, term), rowFactory,
                     indexId, indexColumns, key, requiredFields);
@@ -743,15 +743,8 @@ public class ScannableTableSelfTest {
             publisher.closeExceptionally(t);
         }
 
-        private List<String> getIndexColumns() {
-            List<String> columns = new ArrayList<>();
-
-            indexColumns.stream().forEach(i -> {
-                RelDataTypeField field = rowType.getFieldList().get(i);
-                columns.add(field.getName());
-            });
-
-            return columns;
+        private List<Integer> getIndexColumns() {
+            return indexColumns.stream().boxed().collect(Collectors.toList());
         }
     }
 
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 f9da45677b..dd8449e6bb 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
@@ -66,6 +66,7 @@ public class TestIndex extends IgniteIndex {
     }
 
     /** Returns an id of the index. */
+    @Override
     public int id() {
         return id;
     }

Reply via email to