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(