You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by zs...@apache.org on 2022/05/18 09:56:05 UTC

[ignite-3] branch main updated: IGNITE-16999 Sql. Refactor IgniteBuiltInMethod and IgniteMethod classes - Fixes #811.

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

zstan 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 5bb2548cb IGNITE-16999 Sql. Refactor IgniteBuiltInMethod and IgniteMethod classes - Fixes #811.
5bb2548cb is described below

commit 5bb2548cbb4354996a8cd5102000da0c607a905d
Author: zstan <st...@gmail.com>
AuthorDate: Wed May 18 12:55:07 2022 +0300

    IGNITE-16999 Sql. Refactor IgniteBuiltInMethod and IgniteMethod classes - Fixes #811.
    
    Signed-off-by: zstan <st...@gmail.com>
---
 .../sql/engine/exec/exp/IgniteBuiltInMethod.java   | 47 ----------------------
 .../sql/engine/exec/exp/IgniteSqlFunctions.java    | 12 ++++++
 .../sql/engine/exec/exp/RexToLixTranslator.java    |  5 ++-
 .../sql/engine/exec/rel/AsyncRootNode.java         |  6 +--
 .../internal/sql/engine/util/IgniteMethod.java     | 17 +++++++-
 .../engine/exec/exp/IgniteSqlFunctionsTest.java    |  4 +-
 6 files changed, 35 insertions(+), 56 deletions(-)

diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteBuiltInMethod.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteBuiltInMethod.java
deleted file mode 100644
index 953b9d717..000000000
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteBuiltInMethod.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.sql.engine.exec.exp;
-
-import java.lang.reflect.Method;
-import org.apache.calcite.linq4j.tree.Types;
-import org.apache.calcite.sql.SqlIntervalQualifier;
-import org.apache.calcite.sql.parser.SqlParserUtil;
-
-/**
- * Built-in methods.
- */
-public enum IgniteBuiltInMethod {
-    SYSTEM_RANGE2(IgniteSqlFunctions.class, "systemRange", Object.class, Object.class),
-
-    SYSTEM_RANGE3(IgniteSqlFunctions.class, "systemRange", Object.class, Object.class, Object.class),
-
-    PARSE_INTERVAL_YEAR_MONTH(SqlParserUtil.class, "intervalToMonths", String.class, SqlIntervalQualifier.class),
-
-    PARSE_INTERVAL_DAY_TIME(SqlParserUtil.class, "intervalToMillis", String.class, SqlIntervalQualifier.class);
-
-    public final Method method;
-
-    IgniteBuiltInMethod(Method method) {
-        this.method = method;
-    }
-
-    /** Defines a method. */
-    IgniteBuiltInMethod(Class clazz, String methodName, Class... argumentTypes) {
-        this(Types.lookupMethod(clazz, methodName, argumentTypes));
-    }
-}
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 df3fa8fa1..2d75feadb 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
@@ -21,6 +21,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
 import org.apache.calcite.DataContext;
+import org.apache.calcite.avatica.util.ByteString;
 import org.apache.calcite.config.CalciteConnectionConfig;
 import org.apache.calcite.linq4j.AbstractEnumerable;
 import org.apache.calcite.linq4j.Enumerable;
@@ -35,6 +36,7 @@ import org.apache.calcite.sql.SqlCall;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeSystem;
+import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.checkerframework.checker.nullness.qual.Nullable;
 
 /**
@@ -63,6 +65,11 @@ public class IgniteSqlFunctions {
         return x == null ? null : x.toPlainString();
     }
 
+    /** CAST(VARBINARY AS VARCHAR). */
+    public static String toString(ByteString b) {
+        return b == null ? null : new String(b.getBytes(), Commons.typeFactory().getDefaultCharset());
+    }
+
     private static BigDecimal setScale(int precision, int scale, BigDecimal decimal) {
         return precision == IgniteTypeSystem.INSTANCE.getDefaultPrecision(SqlTypeName.DECIMAL)
             ? decimal : decimal.setScale(scale, RoundingMode.HALF_UP);
@@ -146,6 +153,11 @@ public class IgniteSqlFunctions {
                : toBigDecimal(o.toString(), precision, scale);
     }
 
+    /** CAST(VARCHAR AS VARBINARY). */
+    public static ByteString toByteString(String s) {
+        return s == null ? null : new ByteString(s.getBytes(Commons.typeFactory().getDefaultCharset()));
+    }
+
     /**
      * Dummy table to implement the SYSTEM_RANGE function.
      */
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 bd073c817..b50e57d30 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
@@ -74,6 +74,7 @@ import org.apache.calcite.sql.validate.SqlConformance;
 import org.apache.calcite.util.BuiltInMethod;
 import org.apache.calcite.util.ControlFlowException;
 import org.apache.calcite.util.Pair;
+import org.apache.ignite.internal.sql.engine.util.IgniteMethod;
 
 /**
  * Translates {@link RexNode REX expressions} to {@link Expression linq4j expressions}.
@@ -534,8 +535,8 @@ public class RexToLixTranslator implements RexVisitor<RexToLixTranslator.Result>
                         SqlIntervalQualifier intervalQualifier = targetType.getIntervalQualifier();
 
                         Method method = intervalQualifier.isYearMonth()
-                                ? IgniteBuiltInMethod.PARSE_INTERVAL_YEAR_MONTH.method
-                                : IgniteBuiltInMethod.PARSE_INTERVAL_DAY_TIME.method;
+                                ? IgniteMethod.PARSE_INTERVAL_YEAR_MONTH.method()
+                                : IgniteMethod.PARSE_INTERVAL_DAY_TIME.method();
 
                         convert = Expressions.call(
                                 method,
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AsyncRootNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AsyncRootNode.java
index 6b5655576..56663fa0f 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AsyncRootNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AsyncRootNode.java
@@ -220,13 +220,11 @@ public class AsyncRootNode<InRowT, OutRowT> implements Downstream<InRowT>, Async
 
         assert currentReq != null;
 
-        boolean hasMoreRow = waiting != -1 || lastRow != null;
+        taskScheduled.set(false);
 
         currentReq.fut.complete(new BatchedResult<>(currentReq.buff, waiting != -1 || lastRow != null));
 
-        if (pendingRequests.isEmpty()) {
-            taskScheduled.set(false);
-        }
+        boolean hasMoreRow = waiting != -1 || lastRow != null;
 
         if (hasMoreRow) {
             scheduleTask();
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 5261e9886..74a518255 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
@@ -18,7 +18,10 @@
 package org.apache.ignite.internal.sql.engine.util;
 
 import java.lang.reflect.Method;
+import org.apache.calcite.avatica.util.ByteString;
 import org.apache.calcite.linq4j.tree.Types;
+import org.apache.calcite.sql.SqlIntervalQualifier;
+import org.apache.calcite.sql.parser.SqlParserUtil;
 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.BiScalar;
@@ -58,7 +61,19 @@ public enum IgniteMethod {
     SYSTEM_RANGE3(IgniteSqlFunctions.class, "systemRange", Object.class, Object.class, Object.class),
 
     /** See {@link FragmentMappingMetadata#fragmentMapping(MappingQueryContext)}. */
-    FRAGMENT_MAPPING(FragmentMappingMetadata.class, "fragmentMapping", MappingQueryContext.class);
+    FRAGMENT_MAPPING(FragmentMappingMetadata.class, "fragmentMapping", MappingQueryContext.class),
+
+    /** See {@link SqlParserUtil#intervalToMonths(String, SqlIntervalQualifier)}. */
+    PARSE_INTERVAL_YEAR_MONTH(SqlParserUtil.class, "intervalToMonths", String.class, SqlIntervalQualifier.class),
+
+    /** See {@link SqlParserUtil#intervalToMillis(String, SqlIntervalQualifier)}. */
+    PARSE_INTERVAL_DAY_TIME(SqlParserUtil.class, "intervalToMillis", String.class, SqlIntervalQualifier.class),
+
+    /** See {@link IgniteSqlFunctions#toString(ByteString)}. */
+    BYTESTRING_TO_STRING(IgniteSqlFunctions.class, "toString", ByteString.class),
+
+    /** See {@link IgniteSqlFunctions#toByteString(String)}. */
+    STRING_TO_BYTESTRING(IgniteSqlFunctions.class, "toByteString", String.class);
 
     private final Method method;
 
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctionsTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctionsTest.java
index fe74ad8d7..451a65cc8 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctionsTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctionsTest.java
@@ -30,7 +30,7 @@ import org.junit.jupiter.api.Test;
 public class IgniteSqlFunctionsTest {
     @Test
     public void testBigDecimalToString() {
-        assertNull(IgniteSqlFunctions.toString(null));
+        assertNull(IgniteSqlFunctions.toString((BigDecimal) null));
 
         assertEquals(
                 "10",
@@ -110,7 +110,7 @@ public class IgniteSqlFunctionsTest {
 
         assertEquals(
                 new BigDecimal(10),
-                IgniteSqlFunctions.toBigDecimal(new Byte("10"), 10, 0)
+                IgniteSqlFunctions.toBigDecimal(Byte.valueOf("10"), 10, 0)
         );
 
         assertEquals(