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

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


The following commit(s) were added to refs/heads/main by this push:
     new 9137608449 IGNITE-21243 Bump calcite version to 1.37 (#3878)
9137608449 is described below

commit 913760844952baddc49d545ec7f2aac95bd7874f
Author: ygerzhedovich <41903880+ygerzhedov...@users.noreply.github.com>
AuthorDate: Tue Jun 11 14:02:25 2024 +0300

    IGNITE-21243 Bump calcite version to 1.37 (#3878)
---
 gradle/libs.versions.toml                          |  4 +-
 modules/sql-engine/build.gradle                    |  1 -
 .../ignite/internal/sql/engine/ItDmlTest.java      |  3 +-
 .../internal/sql/engine/ItFunctionsTest.java       | 19 +++--
 .../ignite/internal/sql/engine/ItIntervalTest.java |  7 +-
 .../sql/types/decimal/cast_from_decimal.test       |  2 +-
 .../sql/types/decimal/cast_to_decimal.test         |  2 +-
 .../src/main/codegen/includes/parserImpls.ftl      |  7 +-
 .../sql/engine/exec/exp/IgniteSqlFunctions.java    | 98 ----------------------
 .../internal/sql/engine/exec/exp/RexImpTable.java  |  3 +-
 .../sql/engine/exec/exp/RexToLixTranslator.java    | 16 +++-
 .../sql/engine/sql/fun/IgniteSqlOperatorTable.java | 22 +----
 .../internal/sql/engine/util/IgniteMethod.java     |  4 -
 .../planner/AbstractAggregatePlannerTest.java      | 12 +--
 .../sql/engine/planner/CastResolutionTest.java     |  4 +-
 .../sql/engine/sql/DecimalLiteralTest.java         |  5 +-
 16 files changed, 51 insertions(+), 158 deletions(-)

diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 77fb022c8b..6c76386761 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -56,10 +56,9 @@ hamcrestOptional = "2.0.0"
 hamcrestPath = "1.0.1"
 hamcrestJson = "0.3"
 scalecube = "2.6.15"
-calcite = "1.36.0"
+calcite = "1.37.0"
 value = "2.10.1"
 janino = "3.1.12"
-avatica = "1.25.0"
 jsonpath = "2.9.0"
 javassist = "3.30.2-GA"
 rocksdb = "9.2.1"
@@ -243,7 +242,6 @@ caffeine = { module = 
"com.github.ben-manes.caffeine:caffeine", version.ref = "c
 
 calcite-core = { module = "org.apache.calcite:calcite-core", version.ref = 
"calcite" }
 calcite-linq4j = { module = "org.apache.calcite:calcite-linq4j", version.ref = 
"calcite" }
-calcite-avatica = { module = "org.apache.calcite.avatica:avatica-core", 
version.ref = "avatica" }
 fmpp = { module = "net.sourceforge.fmpp:fmpp", version.ref = "fmpp" }
 
 value-annotations = { module = "org.immutables:value-annotations", version.ref 
= "value" }
diff --git a/modules/sql-engine/build.gradle b/modules/sql-engine/build.gradle
index b24dbd327d..6f732b96cc 100644
--- a/modules/sql-engine/build.gradle
+++ b/modules/sql-engine/build.gradle
@@ -57,7 +57,6 @@ dependencies {
     implementation libs.value.annotations
     implementation libs.janino.compiler
     implementation libs.janino.core
-    implementation libs.calcite.avatica
     implementation libs.jackson.core
     implementation libs.jackson.databind
     implementation libs.jackson.annotations
diff --git 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
index 4dbf36a2e3..a9f3d73d69 100644
--- 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
+++ 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
@@ -549,8 +549,7 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
     public void testInsertDefaultNullValue() {
         checkDefaultValue(defaultValueArgs()
                 .filter(a -> !a.sqlType.endsWith("NOT NULL"))
-                // TODO: uncomment after 
https://issues.apache.org/jira/browse/IGNITE-21243
-                // .map(a -> new DefaultValueArg(a.sqlType, "NULL", null))
+                .map(a -> new DefaultValueArg(a.sqlType, "NULL", null))
                 .collect(Collectors.toList()));
     }
 
diff --git 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFunctionsTest.java
 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFunctionsTest.java
index 8657456186..c4486d51ce 100644
--- 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFunctionsTest.java
+++ 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFunctionsTest.java
@@ -381,10 +381,19 @@ public class ItFunctionsTest extends 
BaseSqlIntegrationTest {
 
         assertQuery("SELECT SUBSTRING(s from i for l) from (values ('abc', 
null, 2)) as t (s, i, l);").returns(null).check();
 
-        assertQuery("SELECT SUBSTRING('1234567', 2.1, 
3.1);").returns("234").check();
-        assertQuery("SELECT SUBSTRING('1234567', 2.1, 
3);").returns("234").check();
-        assertQuery("SELECT SUBSTRING('1234567', 2, 
3.1);").returns("234").check();
-        assertQuery("SELECT SUBSTRING('1234567', 
2.1);").returns("234567").check();
+        assertThrowsSqlException(Sql.STMT_VALIDATION_ERR,
+                "Cannot apply 'SUBSTRING' to arguments of type 
'SUBSTRING(<CHAR(7)> FROM <DECIMAL(2, 1)> FOR <DECIMAL(2, 1)>)'",
+                () -> sql("SELECT SUBSTRING('1234567', 2.1, 3.1)"));
+        assertThrowsSqlException(Sql.STMT_VALIDATION_ERR,
+                "Cannot apply 'SUBSTRING' to arguments of type 
'SUBSTRING(<CHAR(7)> FROM <DECIMAL(2, 1)> FOR <INTEGER>)'",
+                () -> sql("SELECT SUBSTRING('1234567', 2.1, 3)"));
+        assertThrowsSqlException(Sql.STMT_VALIDATION_ERR,
+                "Cannot apply 'SUBSTRING' to arguments of type 
'SUBSTRING(<CHAR(7)> FROM <INTEGER> FOR <DECIMAL(2, 1)>)'",
+                () -> sql("SELECT SUBSTRING('1234567', 2, 3.1)"));
+        // Uncomment after IGNITE-22417
+        //        assertThrowsSqlException(Sql.STMT_VALIDATION_ERR,
+        //                "Cannot apply 'SUBSTRING' to arguments of type 
'SUBSTRING(<CHAR(7)> FROM <DECIMAL(2, 1)>)'",
+        //                () -> sql("SELECT SUBSTRING('1234567', 2.1)"));
 
         // type coercion
         assertQuery("SELECT SUBSTRING('1234567', 2, 
'1');").returns("2").check();
@@ -395,8 +404,6 @@ public class ItFunctionsTest extends BaseSqlIntegrationTest 
{
         assertQuery(String.format("SELECT SUBSTRING('1234567', %d::BIGINT)", 
1)).returns("1234567").check();
         assertQuery(String.format("SELECT SUBSTRING('1234567', %d)", 
Long.MIN_VALUE)).returns("1234567").check();
         assertQuery(String.format("SELECT SUBSTRING('1234567', %d)", 
Integer.MIN_VALUE)).returns("1234567").check();
-        assertQuery(String.format("SELECT SUBSTRING('1234567', %d, %d)", 
Integer.MIN_VALUE, 10L + Integer.MAX_VALUE))
-                .returns("1234567").check();
         assertQuery(String.format("SELECT SUBSTRING('1234567', %d, %d)", -1, 
5)).returns("123").check();
 
         assertThrowsSqlException(Sql.RUNTIME_ERR, "negative substring length", 
() -> sql("SELECT SUBSTRING('1234567', 1, -1)"));
diff --git 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItIntervalTest.java
 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItIntervalTest.java
index 100f84a9f4..be97bdeae0 100644
--- 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItIntervalTest.java
+++ 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItIntervalTest.java
@@ -82,7 +82,10 @@ public class ItIntervalTest extends BaseSqlIntegrationTest {
         assertEquals(Duration.ofSeconds(3723), eval("INTERVAL '1:2:3' HOUR TO 
SECOND"));
         assertEquals(Duration.ofMillis(3723456), eval("INTERVAL '0 1:2:3.456' 
DAY TO SECOND"));
 
-        assertThrowsEx("SELECT INTERVAL '123' SECONDS", IgniteException.class, 
"exceeds precision");
+        assertEquals(Duration.ofSeconds(123), eval("INTERVAL '123' SECONDS"));
+        assertEquals(Duration.ofMillis(123987), eval("INTERVAL '123.987' 
SECONDS"));
+        // TODO: uncomment after IGNITE-19162
+        // assertEquals(Duration.ofMillis(123987654), eval("INTERVAL 
'123.987654' SECONDS"));
 
         // Interval range overflow
         assertThrowsSqlException(Sql.RUNTIME_ERR, "INTEGER out of range", () 
-> sql("SELECT INTERVAL 5000000 MONTHS * 1000"));
@@ -419,8 +422,8 @@ public class ItIntervalTest extends BaseSqlIntegrationTest {
         assertEquals(-3L, eval("EXTRACT(MINUTE FROM INTERVAL '-1 2:3:4.567' 
DAY TO SECOND)"));
         assertEquals(-4L, eval("EXTRACT(SECOND FROM INTERVAL '-1 2:3:4.567' 
DAY TO SECOND)"));
         assertEquals(-4567L, eval("EXTRACT(MILLISECOND FROM INTERVAL '-1 
2:3:4.567' DAY TO SECOND)"));
+        assertEquals(0L, eval("EXTRACT(DAY FROM INTERVAL 1 MONTH)"));
 
-        assertThrowsEx("SELECT EXTRACT(DAY FROM INTERVAL 1 MONTH)", 
IgniteException.class, "Cannot apply");
         assertThrowsEx("SELECT EXTRACT(MONTH FROM INTERVAL 1 DAY)", 
IgniteException.class, "Cannot apply");
     }
 
diff --git 
a/modules/sql-engine/src/integrationTest/sql/types/decimal/cast_from_decimal.test
 
b/modules/sql-engine/src/integrationTest/sql/types/decimal/cast_from_decimal.test
index 766520cb94..0a11413c11 100644
--- 
a/modules/sql-engine/src/integrationTest/sql/types/decimal/cast_from_decimal.test
+++ 
b/modules/sql-engine/src/integrationTest/sql/types/decimal/cast_from_decimal.test
@@ -95,7 +95,7 @@ SELECT 14751947891758972421513::DECIMAL(38,0)::BIGINT
 query IIIII
 SELECT 127::DECIMAL(3,0)::FLOAT, 
-17014118346046923173168730371588410572::DECIMAL(38,0)::FLOAT, 
-7::DECIMAL(9,1)::FLOAT, 27::DECIMAL(18,1)::FLOAT, 33::DECIMAL(38,1)::FLOAT
 ----
-127    -1.701412E37    -7      27      33
+127    -1.7014119E37   -7      27      33
 
 # double
 query IIIII
diff --git 
a/modules/sql-engine/src/integrationTest/sql/types/decimal/cast_to_decimal.test 
b/modules/sql-engine/src/integrationTest/sql/types/decimal/cast_to_decimal.test
index 4758fb3353..3f32af9f71 100644
--- 
a/modules/sql-engine/src/integrationTest/sql/types/decimal/cast_to_decimal.test
+++ 
b/modules/sql-engine/src/integrationTest/sql/types/decimal/cast_to_decimal.test
@@ -139,7 +139,7 @@ SELECT 100::FLOAT::DECIMAL(18,3), 100::FLOAT::DECIMAL(3,0), 
(-100)::FLOAT::DECIM
 query RRRR
 SELECT 100::FLOAT::DECIMAL(38,35)::FLOAT, 100::FLOAT::DECIMAL(9,6)::FLOAT, 
17014118346046923173168730371588410572::FLOAT::DECIMAL(38,0)::FLOAT, 
(-17014118346046923173168730371588410572)::FLOAT::DECIMAL(38,0)::FLOAT
 ----
-100    100     1.701412E37     -1.701412E37
+100    100     1.7014119E37    -1.7014119E37
 
 query I
 SELECT 1.25::FLOAT::DECIMAL(3,2)
diff --git a/modules/sql-engine/src/main/codegen/includes/parserImpls.ftl 
b/modules/sql-engine/src/main/codegen/includes/parserImpls.ftl
index a859029f3a..7370d10c1e 100644
--- a/modules/sql-engine/src/main/codegen/includes/parserImpls.ftl
+++ b/modules/sql-engine/src/main/codegen/includes/parserImpls.ftl
@@ -660,13 +660,8 @@ SqlTypeNameSpec IgniteDateTimeTypeName() :
 |
     <TIMESTAMP> { s = span(); }
     precision = PrecisionOpt()
-    withLocalTimeZone = TimeZoneOpt()
+    typeName = TimeZoneOpt(false)
     {
-        if (withLocalTimeZone) {
-            typeName = SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE;
-        } else {
-            typeName = SqlTypeName.TIMESTAMP;
-        }
         return new SqlBasicTypeNameSpec(typeName, precision, s.end(this));
     }
 }
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctions.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctions.java
index 313b7a275d..1b32ca19e0 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctions.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctions.java
@@ -17,8 +17,6 @@
 
 package org.apache.ignite.internal.sql.engine.exec.exp;
 
-import static java.time.format.DateTimeFormatter.ISO_LOCAL_DATE;
-import static java.time.format.DateTimeFormatter.ISO_LOCAL_TIME;
 import static org.apache.calcite.runtime.SqlFunctions.charLength;
 import static 
org.apache.ignite.internal.sql.engine.prepare.IgniteSqlValidator.NUMERIC_FIELD_OVERFLOW_ERROR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.RUNTIME_ERR;
@@ -27,11 +25,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.MathContext;
 import java.math.RoundingMode;
-import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
-import java.time.format.DateTimeFormatterBuilder;
-import java.time.format.ResolverStyle;
 import java.util.TimeZone;
 import java.util.UUID;
 import org.apache.calcite.DataContext;
@@ -52,21 +46,8 @@ import org.jetbrains.annotations.Nullable;
  * Ignite SQL functions.
  */
 public class IgniteSqlFunctions {
-    private static final DateTimeFormatter ISO_LOCAL_DATE_TIME_EX;
     private static final RoundingMode roundingMode = RoundingMode.HALF_UP;
 
-    private static final BigDecimal MAX_INT = new 
BigDecimal(Integer.MAX_VALUE);
-    private static final BigDecimal MIN_INT = new 
BigDecimal(Integer.MIN_VALUE);
-
-    static {
-        ISO_LOCAL_DATE_TIME_EX = new DateTimeFormatterBuilder()
-                .parseCaseInsensitive()
-                .append(ISO_LOCAL_DATE)
-                .appendLiteral(' ')
-                .append(ISO_LOCAL_TIME)
-                .toFormatter();
-    }
-
     /**
      * Default constructor.
      */
@@ -74,21 +55,6 @@ public class IgniteSqlFunctions {
         // No-op.
     }
 
-    /** Just a stub. Validates Date\Time literal, still use calcite 
implementation for numeric representation.
-     * Otherwise need to fix {@code DateTimeUtils#unixTimestampToString} usage 
additionally.
-     */
-    public static long timestampStringToNumeric(String dtStr) {
-        dtStr = dtStr.trim();
-        // "YYYY-MM-dd HH:mm:ss.ninenanos"
-        if (dtStr.length() > 29) {
-            dtStr = dtStr.substring(0, 29);
-        }
-
-        LocalDateTime.parse(dtStr, 
ISO_LOCAL_DATE_TIME_EX.withResolverStyle(ResolverStyle.STRICT));
-
-        return DateTimeUtils.timestampStringToUnixDate(dtStr);
-    }
-
     /** CAST(DECIMAL AS VARCHAR). */
     public static String toString(BigDecimal x) {
         return x == null ? null : x.toPlainString();
@@ -207,70 +173,6 @@ public class IgniteSqlFunctions {
         return roundedValue.setScale(originalScale, RoundingMode.UNNECESSARY);
     }
 
-    /** Returns {@link Integer} bounded value. */
-    private static int normalizeRegardingInt(BigDecimal num) {
-        int res;
-
-        if (num.compareTo(MAX_INT) >= 0) {
-            res = Integer.MAX_VALUE;
-        } else if (num.compareTo(MIN_INT) <= 0) {
-            res = Integer.MIN_VALUE;
-        } else {
-            res = num.intValue();
-        }
-
-        return res;
-    }
-
-    /** SQL SUBSTRING(string FROM ...) function. */
-    public static String substring(String c, int s) {
-        if (s <= 1) {
-            return c;
-        }
-
-        return SqlFunctions.substring(c, s);
-    }
-
-    /** SQL SUBSTRING(string FROM ...) function. */
-    public static String substring(String c, BigDecimal s) {
-        if (s.compareTo(BigDecimal.ONE) <= 0) {
-            return c;
-        }
-
-        int s0 = normalizeRegardingInt(s);
-        return SqlFunctions.substring(c, s0);
-    }
-
-    /** SQL SUBSTRING(string FROM ...) function. */
-    public static String substring(String c, int s, int l) {
-        return SqlFunctions.substring(c, s, l);
-    }
-
-    /** SQL SUBSTRING(string FROM ...) function. */
-    public static String substring(String c, int s, BigDecimal l) {
-        if (s < 0) {
-            if (l.signum() > 0) {
-                l = l.add(BigDecimal.valueOf(s));
-                return substring(c, 0, l);
-            }
-        }
-        int l0 = normalizeRegardingInt(l);
-        return SqlFunctions.substring(c, s, l0);
-    }
-
-    /** SQL SUBSTRING(string FROM ...) function. */
-    public static String substring(String c, BigDecimal s, BigDecimal l) {
-        if (s.signum() < 0) {
-            if (l.signum() > 0) {
-                l = l.add(s);
-                return substring(c, 0, l);
-            }
-        }
-        int s0 = normalizeRegardingInt(s);
-        int l0 = normalizeRegardingInt(l);
-        return SqlFunctions.substring(c, s0, l0);
-    }
-
     // TRUNCATE function
 
     /** SQL {@code TRUNCATE} operator applied to byte values. */
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
index 185cf95be0..ad47a99e78 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
@@ -318,6 +318,7 @@ import static 
org.apache.calcite.sql.fun.SqlStdOperatorTable.SLICE;
 import static org.apache.calcite.sql.fun.SqlStdOperatorTable.SOME;
 import static org.apache.calcite.sql.fun.SqlStdOperatorTable.STRUCT_ACCESS;
 import static org.apache.calcite.sql.fun.SqlStdOperatorTable.SUBMULTISET_OF;
+import static org.apache.calcite.sql.fun.SqlStdOperatorTable.SUBSTRING;
 import static org.apache.calcite.sql.fun.SqlStdOperatorTable.SUM;
 import static org.apache.calcite.sql.fun.SqlStdOperatorTable.SUM0;
 import static org.apache.calcite.sql.fun.SqlStdOperatorTable.SYSTEM_USER;
@@ -505,6 +506,7 @@ public class RexImpTable {
       defineMethod(SHA1, BuiltInMethod.SHA1.method, NullPolicy.STRICT);
       defineMethod(SHA256, BuiltInMethod.SHA256.method, NullPolicy.STRICT);
       defineMethod(SHA512, BuiltInMethod.SHA512.method, NullPolicy.STRICT);
+      defineMethod(SUBSTRING, BuiltInMethod.SUBSTRING.method, 
NullPolicy.STRICT);
       defineMethod(LEFT, BuiltInMethod.LEFT.method, NullPolicy.ANY);
       defineMethod(RIGHT, BuiltInMethod.RIGHT.method, NullPolicy.ANY);
       defineMethod(LPAD, BuiltInMethod.LPAD.method, NullPolicy.STRICT);
@@ -1014,7 +1016,6 @@ public class RexImpTable {
       defineMethod(SUBSTR, IgniteMethod.SUBSTR.method(), NullPolicy.STRICT);
       defineMethod(ROUND, IgniteMethod.ROUND.method(), NullPolicy.STRICT);
       defineMethod(TRUNCATE, IgniteMethod.TRUNCATE.method(), 
NullPolicy.STRICT);
-      defineMethod(IgniteSqlOperatorTable.SUBSTRING, 
IgniteMethod.SUBSTRING.method(), NullPolicy.STRICT);
       defineMethod(IgniteSqlOperatorTable.DECIMAL_DIVIDE, 
IgniteMethod.DECIMAL_DIVIDE.method(), NullPolicy.ARG0);
 
       map.put(TYPEOF, systemFunctionImplementor);
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexToLixTranslator.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexToLixTranslator.java
index 30e8ae436e..9dab3002b5 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexToLixTranslator.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexToLixTranslator.java
@@ -66,6 +66,8 @@ import org.apache.calcite.rex.RexCorrelVariable;
 import org.apache.calcite.rex.RexDynamicParam;
 import org.apache.calcite.rex.RexFieldAccess;
 import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexLambda;
+import org.apache.calcite.rex.RexLambdaRef;
 import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.rex.RexLocalRef;
 import org.apache.calcite.rex.RexNode;
@@ -356,7 +358,7 @@ public class RexToLixTranslator implements 
RexVisitor<RexToLixTranslator.Result>
                     case CHAR:
                     case VARCHAR:
                         convert =
-                                
Expressions.call(IgniteMethod.STRING_TO_TIMESTAMP.method(), operand);
+                                
Expressions.call(BuiltInMethod.STRING_TO_TIMESTAMP.method, operand);
                         break;
                     case DATE:
                         convert =
@@ -403,7 +405,7 @@ public class RexToLixTranslator implements 
RexVisitor<RexToLixTranslator.Result>
                         // Since this type implies a local timezone, its 
explicit indication seems redundant,
                         // so we prohibit the user from explicitly setting a 
timezone.
                         convert =
-                                
Expressions.call(IgniteMethod.STRING_TO_TIMESTAMP.method(), operand);
+                                
Expressions.call(BuiltInMethod.STRING_TO_TIMESTAMP.method, operand);
                         break;
                     case DATE:
                         convert =
@@ -1531,6 +1533,16 @@ public class RexToLixTranslator implements 
RexVisitor<RexToLixTranslator.Result>
         return visitInputRef(fieldRef);
     }
 
+    @Override
+    public Result visitLambda(RexLambda lambda) {
+        throw new RuntimeException("cannot translate expression " + lambda);
+    }
+
+    @Override
+    public Result visitLambdaRef(RexLambdaRef lambdaRef) {
+        throw new RuntimeException("cannot translate expression " + lambdaRef);
+    }
+
     Expression checkNull(Expression expr) {
         if (Primitive.flavor(expr.getType())
                 == Primitive.Flavor.PRIMITIVE) {
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
index 5556873c2b..c6bf7b562e 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.sql.engine.sql.fun;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.sql.SqlBasicFunction;
@@ -32,8 +31,6 @@ import org.apache.calcite.sql.fun.SqlSubstringFunction;
 import org.apache.calcite.sql.type.OperandTypes;
 import org.apache.calcite.sql.type.ReturnTypes;
 import org.apache.calcite.sql.type.SqlReturnTypeInference;
-import org.apache.calcite.sql.type.SqlSingleOperandTypeChecker;
-import org.apache.calcite.sql.type.SqlTypeFamily;
 import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.calcite.sql.type.SqlTypeTransforms;
 import org.apache.calcite.sql.util.ReflectiveSqlOperatorTable;
@@ -109,23 +106,6 @@ public class IgniteSqlOperatorTable extends 
ReflectiveSqlOperatorTable {
                     OperandTypes.STRING_INTEGER_OPTIONAL_INTEGER,
                     SqlFunctionCategory.STRING);
 
-    private static final SqlSingleOperandTypeChecker 
STRING_NUMERIC_OPTIONAL_NUMERIC =
-            OperandTypes.family(
-                    ImmutableList.of(SqlTypeFamily.STRING, 
SqlTypeFamily.NUMERIC,
-                            SqlTypeFamily.NUMERIC), i -> i == 2);
-
-    public static final SqlFunction SUBSTRING =
-            new SqlFunction(
-                    "SUBSTRING",
-                    SqlKind.OTHER_FUNCTION,
-                    ReturnTypes.ARG0_NULLABLE_VARYING,
-                    null,
-                    OperandTypes.STRING_INTEGER_OPTIONAL_INTEGER
-                            .or(STRING_NUMERIC_OPTIONAL_NUMERIC)
-                            .or(OperandTypes.STRING_INTEGER)
-                            .or(OperandTypes.STRING_NUMERIC),
-                    SqlFunctionCategory.STRING);
-
     /**
      * The {@code RAND_UUID()} function, which yields a random UUID.
      */
@@ -279,7 +259,7 @@ public class IgniteSqlOperatorTable extends 
ReflectiveSqlOperatorTable {
         register(SqlLibraryOperators.FROM_BASE64);
         register(SqlLibraryOperators.MD5);
         register(SqlLibraryOperators.SHA1);
-        register(SUBSTRING);
+        register(SqlStdOperatorTable.SUBSTRING);
         register(SqlLibraryOperators.LEFT);
         register(SqlLibraryOperators.RIGHT);
         register(SqlStdOperatorTable.REPLACE);
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
index 01b6a69539..8605a54231 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
@@ -68,8 +68,6 @@ public enum IgniteMethod {
     /** See {@link BiScalar#execute(ExecutionContext, Object, Object, 
RowBuilder)}. */
     BI_SCALAR_EXECUTE(BiScalar.class, "execute", ExecutionContext.class, 
Object.class, Object.class, RowBuilder.class),
 
-    STRING_TO_TIMESTAMP(IgniteSqlFunctions.class, "timestampStringToNumeric", 
String.class),
-
     /** See {@link IgniteSqlFunctions#subtractTimeZoneOffset(long, TimeZone)}. 
**/
     SUBTRACT_TIMEZONE_OFFSET(IgniteSqlFunctions.class, 
"subtractTimeZoneOffset", long.class, TimeZone.class),
 
@@ -118,8 +116,6 @@ public enum IgniteMethod {
      */
     TRUNCATE(IgniteSqlFunctions.class, "struncate", true),
 
-    SUBSTRING(IgniteSqlFunctions.class, "substring", true),
-
     /**
      * Division operator used by REDUCE phase of AVG aggregate.
      * See {@link IgniteSqlFunctions#decimalDivide(BigDecimal, BigDecimal, 
int, int)}.
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractAggregatePlannerTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractAggregatePlannerTest.java
index c8ac94287d..46fd8f68ab 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractAggregatePlannerTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractAggregatePlannerTest.java
@@ -647,23 +647,23 @@ public abstract class AbstractAggregatePlannerTest 
extends AbstractPlannerTest {
          */
         CASE_16B("SELECT ID FROM test WHERE VAL0 IN (SELECT VAL0 FROM test)", 
schema(identity(), indexByVal0Desc())),
         /**
-         * Query: SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 1) 
FROM test.
+         * Query: SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 2) 
FROM test.
          *
          * <p>Distribution single
          */
-        CASE_17("SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 1) FROM 
test", schema(single())),
+        CASE_17("SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 2) FROM 
test", schema(single())),
         /**
-         * Query: SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 1) 
FROM test.
+         * Query: SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 2) 
FROM test.
          *
          * <p>Distribution hash(0)
          */
-        CASE_17A("SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 1) 
FROM test", schema(hash())),
+        CASE_17A("SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 2) 
FROM test", schema(hash())),
         /**
-         * Query: SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 1) 
FROM test.
+         * Query: SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 2) 
FROM test.
          *
          * <p>Distribution identity(0)
          */
-        CASE_17B("SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 1) 
FROM test", schema(identity())),
+        CASE_17B("SELECT (SELECT test.val0 FROM test t ORDER BY 1 LIMIT 2) 
FROM test", schema(identity())),
         /**
          * Query: SELECT val0, val1, COUNT(*) cnt FROM test GROUP BY val0, 
val1 ORDER BY val0, val1.
          *
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CastResolutionTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CastResolutionTest.java
index 853354d341..2f8514b3ab 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CastResolutionTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CastResolutionTest.java
@@ -152,7 +152,9 @@ public class CastResolutionTest extends AbstractPlannerTest 
{
 
             for (String toType : toTypes) {
                 // TODO: https://issues.apache.org/jira/browse/IGNITE-21555
-                if 
(toType.equals(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE.getName())) {
+                if 
(toType.equals(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE.getName())
+                        || toType.equals(SqlTypeName.TIME_TZ.getName())
+                        || toType.equals(SqlTypeName.TIMESTAMP_TZ.getName())) {
                     continue;
                 }
 
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DecimalLiteralTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DecimalLiteralTest.java
index 0789b59e86..4095fb89b3 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DecimalLiteralTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DecimalLiteralTest.java
@@ -39,13 +39,12 @@ public class DecimalLiteralTest extends AbstractPlannerTest 
{
     /**
      * Type of numeric decimal literal and type of decimal literal should 
match.
      */
-    // TODO: uncomment below after 
https://issues.apache.org/jira/browse/IGNITE-21243";)
     @ParameterizedTest
     @CsvSource({
-            /* "-0.01",
+            "-0.01",
             "-0.1",
             "-10.0",
-            "-10.122",*/
+            "-10.122",
             "0.0",
             "0.1",
             "0.01",

Reply via email to