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

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

commit bafaa253b8ab1d3b0b17e5c5c087c0c2e44cfe53
Author: zstan <stanilov...@gmail.com>
AuthorDate: Wed Sep 20 09:26:04 2023 +0300

    IGNITE-20336 Sql. Remove conversion from java types to TypeSpec
---
 .../ignite/internal/sql/engine/util/TypeUtils.java | 60 ++++++++----------
 .../sql/engine/exec/RuntimeSortedIndexTest.java    | 28 ++++----
 .../sql/engine/exec/rel/BaseAggregateTest.java     | 42 ++++++------
 .../sql/engine/exec/rel/ExecutionTest.java         | 74 ++++++++++++++--------
 .../rel/HashAggregateSingleGroupExecutionTest.java | 54 ++++++++--------
 .../exec/rel/HashIndexSpoolExecutionTest.java      | 11 ++--
 .../engine/exec/rel/MergeJoinExecutionTest.java    | 23 ++++---
 .../exec/rel/NestedLoopJoinExecutionTest.java      | 30 +++++----
 .../exec/rel/SortedIndexSpoolExecutionTest.java    |  7 +-
 .../exec/rel/TableScanNodeExecutionTest.java       | 11 ++--
 .../engine/exec/rel/TableSpoolExecutionTest.java   |  4 +-
 11 files changed, 197 insertions(+), 147 deletions(-)

diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
index 65ac0da499..a516c19e2f 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
@@ -45,7 +45,6 @@ import org.apache.calcite.avatica.util.ByteString;
 import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
-import org.apache.calcite.rel.type.RelDataTypeFactoryImpl.JavaType;
 import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.runtime.SqlFunctions;
 import org.apache.calcite.sql.type.BasicSqlType;
@@ -151,22 +150,12 @@ public class TypeUtils {
         return builder.build();
     }
 
-    /**
-     * CreateRowType.
-     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-     */
-    public static RelDataType createRowType(IgniteTypeFactory typeFactory, 
Class<?>... fields) {
-        List<RelDataType> types = Arrays.stream(fields)
-                .map(typeFactory::createJavaType)
-                .collect(Collectors.toList());
-
-        return createRowType(typeFactory, types, "$F");
+    /** Assembly output type from input types. */
+    public static RelDataType createRowType(IgniteTypeFactory typeFactory, 
List<RelDataType> fields) {
+        return createRowType(typeFactory, fields.toArray(new RelDataType[0]));
     }
 
-    /**
-     * CreateRowType.
-     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-     */
+    /** Assembly output type from input types. */
     public static RelDataType createRowType(IgniteTypeFactory typeFactory, 
RelDataType... fields) {
         List<RelDataType> types = Arrays.asList(fields);
 
@@ -396,18 +385,6 @@ public class TypeUtils {
         }
     }
 
-    /**
-     * Converts a {@link NativeType native type} to {@link RelDataType 
relational type} with respect to the nullability flag.
-     *
-     * @param factory Type factory.
-     * @param nativeType A native type to convert.
-     * @param nullable A flag that specify whether the resulting type should 
be nullable or not.
-     * @return Relational type.
-     */
-    public static RelDataType native2relationalType(RelDataTypeFactory 
factory, NativeType nativeType, boolean nullable) {
-        return 
factory.createTypeWithNullability(native2relationalType(factory, nativeType), 
nullable);
-    }
-
     /**
      * Converts a {@link NativeType native type} to {@link RelDataType 
relational type}.
      *
@@ -488,6 +465,29 @@ public class TypeUtils {
         }
     }
 
+    /**
+     * Converts a {@link NativeType native type} to {@link RelDataType 
relational type} with respect to the nullability flag.
+     *
+     * @param factory Type factory.
+     * @param nativeType A native type to convert.
+     * @param nullable A flag that specify whether the resulting type should 
be nullable or not.
+     * @return Relational type.
+     */
+    public static RelDataType native2relationalType(RelDataTypeFactory 
factory, NativeType nativeType, boolean nullable) {
+        return 
factory.createTypeWithNullability(native2relationalType(factory, nativeType), 
nullable);
+    }
+
+    /**
+     * Converts a {@link NativeType native types} to {@link RelDataType 
relational types}.
+     *
+     * @param factory Type factory.
+     * @param nativeTypes A native types to convert.
+     * @return Relational types.
+     */
+    public static List<RelDataType> native2relationalTypes(RelDataTypeFactory 
factory, NativeType... nativeTypes) {
+        return Arrays.stream(nativeTypes).map(t -> 
native2relationalType(factory, t)).collect(Collectors.toList());
+    }
+
     /** Converts {@link ColumnType} to corresponding {@link NativeType}. */
     public static NativeType columnType2NativeType(ColumnType columnType, int 
precision, int scale, int length) {
         switch (columnType) {
@@ -663,14 +663,10 @@ public class TypeUtils {
 
             return new RowType(fields, type.isNullable());
 
-        } else if (SqlTypeUtil.isMap(type) || SqlTypeUtil.isMultiset(type))  {
+        } else if (SqlTypeUtil.isMap(type) || SqlTypeUtil.isMultiset(type) || 
SqlTypeUtil.isArray(type)) {
             // TODO https://issues.apache.org/jira/browse/IGNITE-20162
             //  Add collection types support
             throw new IllegalArgumentException("Collection types is not 
supported: " + type);
-        } else if (SqlTypeUtil.isArray(type) || type instanceof JavaType) {
-            // TODO Remove after is fixed 
https://issues.apache.org/jira/browse/IGNITE-20336
-            //  Move SqlTypeUtil.isArray(type) to collections type support 
branch.
-            return new BaseTypeSpec(null, true);
         } else {
             throw new IllegalArgumentException("Unexpected type: " + type);
         }
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
index 0f7b63813e..3c57ed2fe1 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
@@ -34,6 +34,8 @@ import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.util.ImmutableIntList;
 import org.apache.calcite.util.Pair;
+import org.apache.ignite.internal.schema.NativeType;
+import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.sql.engine.framework.ArrayRowHandler;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.BaseQueryContext;
@@ -52,17 +54,19 @@ import org.junit.jupiter.api.Test;
 public class RuntimeSortedIndexTest extends IgniteAbstractTest {
     private static final int UNIQUE_GROUPS = 10_000;
 
-    private static final int[] NOT_UNIQUE_ROWS_IN_GROUP = new int[]{1, 10};
-
-    private static final Pair<Class<?>[], ImmutableIntList>[] ROW_TYPES = new 
Pair[]{
-            new Pair(new Class<?>[]{int.class, int.class, int.class}, 
ImmutableIntList.of(1)),
-            new Pair(new Class<?>[]{int.class, long.class, int.class}, 
ImmutableIntList.of(1)),
-            new Pair(new Class<?>[]{int.class, String.class, int.class}, 
ImmutableIntList.of(1)),
-            new Pair(new Class<?>[]{int.class, Date.class, int.class}, 
ImmutableIntList.of(1)),
-            new Pair(new Class<?>[]{int.class, Time.class, int.class}, 
ImmutableIntList.of(1)),
-            new Pair(new Class<?>[]{int.class, Timestamp.class, int.class}, 
ImmutableIntList.of(1)),
-            new Pair(new Class<?>[]{int.class, String.class, Time.class, 
Date.class, Timestamp.class, int.class},
-                    ImmutableIntList.of(1, 2, 3, 4))
+    private static final int[] NOT_UNIQUE_ROWS_IN_GROUP = {1, 10};
+
+    private static final Pair<NativeType[], ImmutableIntList>[] ROW_TYPES = 
new Pair[]{
+            new Pair(new NativeType[]{NativeTypes.INT32, NativeTypes.INT32, 
NativeTypes.INT32}, ImmutableIntList.of(1)),
+
+            new Pair(new NativeType[]{NativeTypes.INT32, NativeTypes.INT64, 
NativeTypes.INT32}, ImmutableIntList.of(1)),
+            new Pair(new NativeType[]{NativeTypes.INT32, NativeTypes.STRING, 
NativeTypes.INT32}, ImmutableIntList.of(1)),
+            new Pair(new NativeType[]{NativeTypes.INT32, NativeTypes.DATE, 
NativeTypes.INT32}, ImmutableIntList.of(1)),
+            new Pair(new NativeType[]{NativeTypes.INT32, NativeTypes.time(), 
NativeTypes.INT32}, ImmutableIntList.of(1)),
+            new Pair(new NativeType[]{NativeTypes.INT32, 
NativeTypes.datetime(), NativeTypes.INT32}, ImmutableIntList.of(1)),
+            new Pair(new NativeType[]{NativeTypes.INT32, 
NativeTypes.timestamp(), NativeTypes.INT32}, ImmutableIntList.of(1)),
+            new Pair(new NativeType[]{NativeTypes.INT32, NativeTypes.STRING, 
NativeTypes.time(),
+                    NativeTypes.DATE, NativeTypes.datetime(), 
NativeTypes.INT32}, ImmutableIntList.of(1, 2, 3, 4))
     };
 
     /** Search count. */
@@ -73,7 +77,7 @@ public class RuntimeSortedIndexTest extends 
IgniteAbstractTest {
         IgniteTypeFactory tf = Commons.typeFactory();
 
         List<Pair<RelDataType, ImmutableIntList>> testIndexes = 
Arrays.stream(ROW_TYPES)
-                .map(rt -> Pair.of(TypeUtils.createRowType(tf, rt.getKey()), 
rt.getValue()))
+                .map(rt -> Pair.of(TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, rt.getKey())), rt.getValue()))
                 .collect(Collectors.toList());
 
         for (Pair<RelDataType, ImmutableIntList> testIdx : testIndexes) {
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/BaseAggregateTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/BaseAggregateTest.java
index 34deb2d214..00fa3ee1fd 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/BaseAggregateTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/BaseAggregateTest.java
@@ -40,6 +40,7 @@ import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.ImmutableIntList;
+import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.exec.RowHandler;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AccumulatorWrapper;
@@ -62,7 +63,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
     public void count(TestAggregateType testAgg) {
         ExecutionContext<Object[]> ctx = executionContext(true);
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row(0, 200),
                 row(1, 300),
@@ -85,7 +86,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
@@ -114,7 +115,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
     public void min(TestAggregateType testAgg) {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row(0, 200),
                 row(1, 300),
@@ -137,7 +138,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
@@ -166,7 +167,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
     public void max(TestAggregateType testAgg) {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row(0, 200),
                 row(1, 300),
@@ -189,7 +190,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
@@ -221,7 +222,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row(0, 200),
                 row(1, 300),
@@ -244,7 +245,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
@@ -324,7 +325,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
     ) {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, scanInput);
 
         AggregateCall call = AggregateCall.create(
@@ -342,7 +343,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
@@ -381,7 +382,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row(0, 200),
                 row(1, 200),
@@ -409,7 +410,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
@@ -447,7 +448,8 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
                 ExecutionContext<Object[]> ctx = executionContext();
                 IgniteTypeFactory tf = ctx.getTypeFactory();
-                RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+                RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                        NativeTypes.INT32, NativeTypes.INT32));
 
                 ScanNode<Object[]> scan = new ScanNode<>(
                         ctx,
@@ -474,7 +476,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
                 List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-                RelDataType aggRowType = TypeUtils.createRowType(tf, 
int.class);
+                RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
                 SingleNode<Object[]> aggChain = createAggregateNodesChain(
                         testAgg,
@@ -510,7 +512,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
     public void sumIntegerOverflow(TestAggregateType testAgg) {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row(0, Integer.MAX_VALUE / 2),
                 row(0, Integer.MAX_VALUE / 2 + 11)
@@ -531,7 +533,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
@@ -559,7 +561,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
     public void sumLongOverflow(TestAggregateType testAgg) {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
long.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT64));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row(0, Long.MAX_VALUE / 2),
                 row(0, Long.MAX_VALUE / 2 + 11)
@@ -580,7 +582,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
@@ -611,7 +613,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
     public void countOfEmptyWithRewind(TestAggregateType testAgg) {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Collections.emptyList());
 
         AggregateCall call = AggregateCall.create(
@@ -630,7 +632,7 @@ public abstract class BaseAggregateTest extends 
AbstractExecutionTest {
 
         List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
-        RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
+        RelDataType aggRowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
 
         SingleNode<Object[]> aggChain = createAggregateNodesChain(
                 testAgg,
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ExecutionTest.java
index 78fab094fe..8e87011342 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ExecutionTest.java
@@ -73,7 +73,6 @@ public class ExecutionTest extends AbstractExecutionTest {
         // WHERE P.ID >= 2
 
         ExecutionContext<Object[]> ctx = executionContext(true);
-        IgniteTypeFactory tf = ctx.getTypeFactory();
 
         ScanNode<Object[]> persons = new ScanNode<>(ctx, Arrays.asList(
                 new Object[]{0, "Igor", "Seliverstov"},
@@ -89,9 +88,14 @@ public class ExecutionTest extends AbstractExecutionTest {
                 new Object[]{3, 0, "Core"}
         ));
 
-        RelDataType outType = TypeUtils.createRowType(tf, int.class, 
String.class, String.class, int.class, int.class, String.class);
-        RelDataType leftType = TypeUtils.createRowType(tf, int.class, 
String.class, String.class);
-        RelDataType rightType = TypeUtils.createRowType(tf, int.class, 
int.class, String.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+
+        RelDataType outType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.STRING, 
NativeTypes.INT32, NativeTypes.INT32, NativeTypes.STRING));
+        RelDataType leftType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.STRING));
+        RelDataType rightType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.INT32, NativeTypes.STRING));
 
         RowHandler<Object[]> hnd = ctx.rowHandler();
 
@@ -126,7 +130,8 @@ public class ExecutionTest extends AbstractExecutionTest {
     public void testRowFactoryAssembly() {
         ExecutionContext<Object[]> ctx = executionContext(false);
 
-        RelDataType rowType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, boolean.class);
+        RelDataType rowType = TypeUtils.createRowType(ctx.getTypeFactory(),
+                TypeUtils.native2relationalTypes(ctx.getTypeFactory(), 
NativeTypes.INT32, NativeTypes.STRING, NativeTypes.BOOLEAN));
 
         RowSchema rowSchema = 
rowSchemaFromRelTypes(RelOptUtil.getFieldTypeList(rowType));
 
@@ -208,10 +213,13 @@ public class ExecutionTest extends AbstractExecutionTest {
                 new Object[]{2, "SQL"}
         ));
 
-        RelDataType outType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class,
-                int.class, String.class);
-        RelDataType leftType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
-        RelDataType rightType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+
+        RelDataType outType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32, 
NativeTypes.INT32, NativeTypes.STRING));
+        RelDataType leftType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
+        RelDataType rightType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.STRING));
 
         RowHandler<Object[]> hnd = ctx.rowHandler();
 
@@ -263,10 +271,13 @@ public class ExecutionTest extends AbstractExecutionTest {
                 new Object[]{3, "QA"}
         ));
 
-        RelDataType outType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, int.class,
-                String.class, Integer.class);
-        RelDataType leftType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class);
-        RelDataType rightType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+
+        RelDataType outType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32, 
NativeTypes.STRING, NativeTypes.INT32));
+        RelDataType leftType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.STRING));
+        RelDataType rightType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
 
         RowHandler<Object[]> hnd = ctx.rowHandler();
 
@@ -318,10 +329,13 @@ public class ExecutionTest extends AbstractExecutionTest {
                 new Object[]{3, "QA"}
         ));
 
-        RelDataType outType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class,
-                int.class, String.class);
-        RelDataType leftType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
-        RelDataType rightType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+
+        RelDataType outType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32, 
NativeTypes.INT32, NativeTypes.STRING));
+        RelDataType leftType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
+        RelDataType rightType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.STRING));
 
         RowHandler<Object[]> hnd = ctx.rowHandler();
 
@@ -374,9 +388,13 @@ public class ExecutionTest extends AbstractExecutionTest {
                 new Object[]{3, "QA"}
         ));
 
-        RelDataType outType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
-        RelDataType leftType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
-        RelDataType rightType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+
+        RelDataType outType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
+        RelDataType leftType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
+        RelDataType rightType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.STRING));
 
         RowHandler<Object[]> hnd = ctx.rowHandler();
 
@@ -426,9 +444,13 @@ public class ExecutionTest extends AbstractExecutionTest {
                 new Object[]{3, "QA"}
         ));
 
-        RelDataType outType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
-        RelDataType leftType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
-        RelDataType rightType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+
+        RelDataType outType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
+        RelDataType leftType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
+        RelDataType rightType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.STRING));
 
         RowHandler<Object[]> hnd = ctx.rowHandler();
 
@@ -472,7 +494,8 @@ public class ExecutionTest extends AbstractExecutionTest {
     public void testCorrelatedNestedLoopJoin(int leftSize, int rightSize, int 
rightBufSize, JoinRelType joinType) {
         ExecutionContext<Object[]> ctx = executionContext(true);
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
String.class, int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
 
         ScanNode<Object[]> left = new ScanNode<>(ctx, new TestTable(leftSize, 
rowType));
         ScanNode<Object[]> right = new ScanNode<>(ctx, new 
TestTable(rightSize, rowType));
@@ -521,7 +544,8 @@ public class ExecutionTest extends AbstractExecutionTest {
     public void testMergeJoin() {
         ExecutionContext<Object[]> ctx = executionContext(true);
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
String.class, int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
 
         int inBufSize = Commons.IN_BUFFER_SIZE;
 
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateSingleGroupExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateSingleGroupExecutionTest.java
index a277f75e23..04fbd95a34 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateSingleGroupExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateSingleGroupExecutionTest.java
@@ -35,6 +35,7 @@ import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.ImmutableIntList;
+import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AccumulatorWrapper;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AggregateType;
@@ -56,7 +57,7 @@ public class HashAggregateSingleGroupExecutionTest extends 
AbstractExecutionTest
     public void mapReduceSum() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -95,7 +96,7 @@ public class HashAggregateSingleGroupExecutionTest extends 
AbstractExecutionTest
     public void mapReduceMin() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -134,7 +135,7 @@ public class HashAggregateSingleGroupExecutionTest extends 
AbstractExecutionTest
     public void mapReduceMax() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -173,7 +174,7 @@ public class HashAggregateSingleGroupExecutionTest extends 
AbstractExecutionTest
     public void mapReduceCount() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -205,19 +206,20 @@ public class HashAggregateSingleGroupExecutionTest 
extends AbstractExecutionTest
                 accFactory(ctx, reduceAggCall.getReduceCall(), REDUCE, 
hashRowType), rowFactory());
         reduce.register(map);
 
-        RootNode<Object[]> root = new RootNode<>(ctx);
-        root.register(reduce);
+        try (RootNode<Object[]> root = new RootNode<>(ctx)) {
+            root.register(reduce);
 
-        assertTrue(root.hasNext());
-        assertEquals(4, root.next()[0]);
-        assertFalse(root.hasNext());
+            assertTrue(root.hasNext());
+            assertEquals(4, root.next()[0]);
+            assertFalse(root.hasNext());
+        }
     }
 
     @Test
     public void singleAvg() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -253,7 +255,7 @@ public class HashAggregateSingleGroupExecutionTest extends 
AbstractExecutionTest
     public void singleSum() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -277,19 +279,20 @@ public class HashAggregateSingleGroupExecutionTest 
extends AbstractExecutionTest
         HashAggregateNode<Object[]> agg = newHashAggNode(ctx, SINGLE, grpSets, 
rowType, call);
         agg.register(scan);
 
-        RootNode<Object[]> root = new RootNode<>(ctx);
-        root.register(agg);
+        try (RootNode<Object[]> root = new RootNode<>(ctx)) {
+            root.register(agg);
 
-        assertTrue(root.hasNext());
-        assertEquals(2900, root.next()[0]);
-        assertFalse(root.hasNext());
+            assertTrue(root.hasNext());
+            assertEquals(2900, root.next()[0]);
+            assertFalse(root.hasNext());
+        }
     }
 
     @Test
     public void singleMin() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -325,7 +328,7 @@ public class HashAggregateSingleGroupExecutionTest extends 
AbstractExecutionTest
     public void singleMax() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -361,7 +364,7 @@ public class HashAggregateSingleGroupExecutionTest extends 
AbstractExecutionTest
     public void singleCount() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, String.class, 
int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
                 row("Igor", 200),
                 row("Roman", 300),
@@ -389,15 +392,16 @@ public class HashAggregateSingleGroupExecutionTest 
extends AbstractExecutionTest
 
         agg.register(scan);
 
-        RootNode<Object[]> root = new RootNode<>(ctx);
-        root.register(agg);
+        try (RootNode<Object[]> root = new RootNode<>(ctx)) {
+            root.register(agg);
 
-        assertTrue(root.hasNext());
-        assertEquals(4, root.next()[0]);
-        assertFalse(root.hasNext());
+            assertTrue(root.hasNext());
+            assertEquals(4, root.next()[0]);
+            assertFalse(root.hasNext());
+        }
     }
 
-    protected Supplier<List<AccumulatorWrapper<Object[]>>> accFactory(
+    Supplier<List<AccumulatorWrapper<Object[]>>> accFactory(
             ExecutionContext<Object[]> ctx,
             AggregateCall call,
             AggregateType type,
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashIndexSpoolExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashIndexSpoolExecutionTest.java
index 3fb7d9fb39..4f5ecb5834 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashIndexSpoolExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashIndexSpoolExecutionTest.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.function.Predicate;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
@@ -35,15 +36,15 @@ import org.apache.ignite.internal.util.Pair;
 import org.junit.jupiter.api.Test;
 
 /**
- * HashIndexSpoolExecutionTest.
- * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
+ * Hash index based spool implementation test.
  */
 public class HashIndexSpoolExecutionTest extends AbstractExecutionTest {
     @Test
     public void testIndexSpool() {
         ExecutionContext<Object[]> ctx = executionContext(true);
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
String.class, int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
 
         int inBufSize = Commons.IN_BUFFER_SIZE;
 
@@ -132,7 +133,9 @@ public class HashIndexSpoolExecutionTest extends 
AbstractExecutionTest {
     @Test
     public void testNullsInSearchRow() {
         ExecutionContext<Object[]> ctx = executionContext(true);
-        RelDataType rowType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, int.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.INT32));
 
         ScanNode<Object[]> scan = new ScanNode<>(ctx, new TestTable(
                 4,
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/MergeJoinExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/MergeJoinExecutionTest.java
index bce573e224..9dd048749d 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/MergeJoinExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/MergeJoinExecutionTest.java
@@ -40,6 +40,7 @@ import org.apache.calcite.rel.core.JoinRelType;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.sql.validate.SqlConformanceEnum;
 import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl;
 import org.apache.ignite.internal.sql.engine.framework.ArrayRowHandler;
@@ -474,10 +475,13 @@ public class MergeJoinExecutionTest extends 
AbstractExecutionTest {
     private void verifyJoin(Object[][] left, Object[][] right, JoinRelType 
joinType, Object[][] expRes, boolean equalNulls) {
         ExecutionContext<Object[]> ctx = executionContext(true);
 
-        RelDataType leftType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+
+        RelDataType leftType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> leftNode = new ScanNode<>(ctx, Arrays.asList(left));
 
-        RelDataType rightType = TypeUtils.createRowType(ctx.getTypeFactory(), 
Integer.class, String.class);
+        RelDataType rightType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.STRING));
         ScanNode<Object[]> rightNode = new ScanNode<>(ctx, 
Arrays.asList(right));
 
         IgniteTypeFactory typeFactory = Commons.typeFactory();
@@ -511,16 +515,17 @@ public class MergeJoinExecutionTest extends 
AbstractExecutionTest {
         }
         project.register(join);
 
-        RootNode<Object[]> node = new RootNode<>(ctx);
-        node.register(project);
+        try (RootNode<Object[]> node = new RootNode<>(ctx)) {
+            node.register(project);
 
-        ArrayList<Object[]> rows = new ArrayList<>();
+            ArrayList<Object[]> rows = new ArrayList<>();
 
-        while (node.hasNext()) {
-            rows.add(node.next());
-        }
+            while (node.hasNext()) {
+                rows.add(node.next());
+            }
 
-        assertThat(rows.toArray(EMPTY), equalTo(expRes));
+            assertThat(rows.toArray(EMPTY), equalTo(expRes));
+        }
     }
 
     /**
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/NestedLoopJoinExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/NestedLoopJoinExecutionTest.java
index 1d0acf9a63..d81a03331a 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/NestedLoopJoinExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/NestedLoopJoinExecutionTest.java
@@ -33,8 +33,10 @@ import java.util.HashSet;
 import java.util.Set;
 import org.apache.calcite.rel.core.JoinRelType;
 import org.apache.calcite.rel.type.RelDataType;
+import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.exec.RowHandler;
+import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.TypeUtils;
 import org.junit.jupiter.api.Test;
 
@@ -307,17 +309,22 @@ public class NestedLoopJoinExecutionTest extends 
AbstractExecutionTest {
     private void verifyJoin(Object[][] left, Object[][] right, JoinRelType 
joinType, Object[][] expRes) {
         ExecutionContext<Object[]> ctx = executionContext(true);
 
-        RelDataType leftType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class, Integer.class);
+        IgniteTypeFactory tf = ctx.getTypeFactory();
+
+        RelDataType leftType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
         ScanNode<Object[]> leftNode = new ScanNode<>(ctx, Arrays.asList(left));
 
-        RelDataType rightType = TypeUtils.createRowType(ctx.getTypeFactory(), 
int.class, String.class);
+        RelDataType rightType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32, NativeTypes.STRING));
         ScanNode<Object[]> rightNode = new ScanNode<>(ctx, 
Arrays.asList(right));
 
         RelDataType outType;
         if (setOf(SEMI, ANTI).contains(joinType)) {
-            outType = TypeUtils.createRowType(ctx.getTypeFactory(), int.class, 
String.class, Integer.class);
+            outType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                    NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
         } else {
-            outType = TypeUtils.createRowType(ctx.getTypeFactory(), int.class, 
String.class, Integer.class, int.class, String.class);
+            outType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                    NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32, 
NativeTypes.INT32, NativeTypes.STRING));
         }
 
         RowHandler<Object[]> hnd = ctx.rowHandler();
@@ -334,16 +341,17 @@ public class NestedLoopJoinExecutionTest extends 
AbstractExecutionTest {
         }
         project.register(join);
 
-        RootNode<Object[]> node = new RootNode<>(ctx);
-        node.register(project);
+        try (RootNode<Object[]> node = new RootNode<>(ctx)) {
+            node.register(project);
 
-        ArrayList<Object[]> rows = new ArrayList<>();
+            ArrayList<Object[]> rows = new ArrayList<>();
 
-        while (node.hasNext()) {
-            rows.add(node.next());
-        }
+            while (node.hasNext()) {
+                rows.add(node.next());
+            }
 
-        assertArrayEquals(expRes, rows.toArray(EMPTY));
+            assertArrayEquals(expRes, rows.toArray(EMPTY));
+        }
     }
 
     /**
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortedIndexSpoolExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortedIndexSpoolExecutionTest.java
index 5bc3c0f9c9..c51b1a21c3 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortedIndexSpoolExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortedIndexSpoolExecutionTest.java
@@ -30,6 +30,7 @@ import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.util.ImmutableIntList;
+import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
@@ -45,7 +46,8 @@ public class SortedIndexSpoolExecutionTest extends 
AbstractExecutionTest {
     public void testIndexSpool() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
String.class, int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
 
         int inBufSize = Commons.IN_BUFFER_SIZE;
 
@@ -152,7 +154,8 @@ public class SortedIndexSpoolExecutionTest extends 
AbstractExecutionTest {
     public void testUnspecifiedValuesInSearchRow() {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
String.class, int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
 
         ScanNode<Object[]> scan = new ScanNode<>(
                 ctx,
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/TableScanNodeExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/TableScanNodeExecutionTest.java
index eb47674b0c..d97b0149c0 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/TableScanNodeExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/TableScanNodeExecutionTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.sql.engine.exec.rel;
 
+import static 
org.apache.ignite.internal.sql.engine.util.TypeUtils.rowSchemaFromRelTypes;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
 
@@ -73,13 +74,11 @@ public class TableScanNodeExecutionTest extends 
AbstractExecutionTest {
     public void testScanNodeDataPropagation() throws InterruptedException {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
String.class, int.class);
 
-        RowSchema rowSchema = RowSchema.builder()
-                .addField(NativeTypes.INT32)
-                .addField(NativeTypes.STRING)
-                .addField(NativeTypes.INT32)
-                .build();
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
+
+        RowSchema rowSchema = rowSchemaFromRelTypes(List.of(rowType));
 
         int inBufSize = Commons.IN_BUFFER_SIZE;
 
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/TableSpoolExecutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/TableSpoolExecutionTest.java
index ba2b2742d0..40bff438ae 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/TableSpoolExecutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/TableSpoolExecutionTest.java
@@ -27,6 +27,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiFunction;
 import java.util.stream.IntStream;
 import org.apache.calcite.rel.type.RelDataType;
+import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
@@ -100,7 +101,8 @@ public class TableSpoolExecutionTest extends 
AbstractExecutionTest {
     public void checkTableSpool(BiFunction<ExecutionContext<Object[]>, 
RelDataType, TableSpoolNode<Object[]>> spoolFactory) {
         ExecutionContext<Object[]> ctx = executionContext();
         IgniteTypeFactory tf = ctx.getTypeFactory();
-        RelDataType rowType = TypeUtils.createRowType(tf, int.class, 
String.class, int.class);
+        RelDataType rowType = TypeUtils.createRowType(tf, 
TypeUtils.native2relationalTypes(tf,
+                NativeTypes.INT32, NativeTypes.STRING, NativeTypes.INT32));
 
         int inBufSize = Commons.IN_BUFFER_SIZE;
 

Reply via email to