You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tl...@apache.org on 2021/07/06 12:37:30 UTC

[ignite-3] branch main updated: IGNITE-14903 Bump calcite version up to 1.27.0 (#198)

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

tledkov 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 c5fb166  IGNITE-14903 Bump calcite version up to 1.27.0 (#198)
c5fb166 is described below

commit c5fb1665927dbba2ee3690d71ea430f07d4647e7
Author: Evgeniy Stanilovskiy <st...@gmail.com>
AuthorDate: Tue Jul 6 15:37:22 2021 +0300

    IGNITE-14903 Bump calcite version up to 1.27.0 (#198)
---
 .../query/calcite/exec/exp/RexImpTable.java           |  9 +++++----
 .../query/calcite/prepare/IgniteSqlValidator.java     |  7 +++++--
 .../rule/FilterSpoolMergeToHashIndexSpoolRule.java    | 19 ++++++++++++++++++-
 .../calcite/rule/logical/LogicalOrToUnionRule.java    |  7 ++++---
 .../processors/query/calcite/util/RexUtils.java       |  2 +-
 .../processors/query/calcite/planner/PlannerTest.java |  4 ++--
 parent/pom.xml                                        |  8 ++++----
 7 files changed, 39 insertions(+), 17 deletions(-)

diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexImpTable.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexImpTable.java
index bf91db0..93dff87 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexImpTable.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexImpTable.java
@@ -991,10 +991,10 @@ public class RexImpTable {
             final Expression expression;
             Class clazz = method.getDeclaringClass();
             if (Modifier.isStatic(method.getModifiers()))
-                expression = EnumUtils.call(clazz, method.getName(), argValueList);
+                expression = EnumUtils.call(null, clazz, method.getName(), argValueList);
             else {
-                expression = EnumUtils.call(clazz, method.getName(),
-                    Util.skip(argValueList, 1), argValueList.get(0));
+                expression = EnumUtils.call(argValueList.get(0), clazz, method.getName(),
+                    Util.skip(argValueList, 1));
             }
             return expression;
         }
@@ -1060,7 +1060,7 @@ public class RexImpTable {
             newOperands.add(errorBehavior);
             newOperands.add(defaultValueOnError);
             Class clazz = method.getDeclaringClass();
-            final Expression expression = EnumUtils.call(clazz, method.getName(), newOperands);
+            final Expression expression = EnumUtils.call(null, clazz, method.getName(), newOperands);
 
             final Type returnType =
                 translator.typeFactory.getJavaClass(call.getType());
@@ -1094,6 +1094,7 @@ public class RexImpTable {
         @Override Expression implementSafe(RexToLixTranslator translator,
             RexCall call, List<Expression> argValueList) {
             return EnumUtils.call(
+                null,
                 SqlFunctions.class,
                 methodName,
                 argValueList);
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
index dbff0c5..e0630ec 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
@@ -57,6 +57,7 @@ import org.apache.ignite.internal.processors.query.calcite.schema.IgniteTable;
 import org.apache.ignite.internal.processors.query.calcite.schema.TableDescriptor;
 import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
 import org.apache.ignite.internal.processors.query.calcite.util.IgniteResource;
+import org.jetbrains.annotations.Nullable;
 
 import static org.apache.calcite.util.Static.RESOURCE;
 import static org.apache.ignite.internal.processors.query.calcite.Stubs.boolFoo;
@@ -252,10 +253,12 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
     }
 
     /** {@inheritDoc} */
-    @Override public void validateAggregateParams(SqlCall aggCall, SqlNode filter, SqlNodeList orderList, SqlValidatorScope scope) {
+    @Override public void validateAggregateParams(SqlCall aggCall,
+        @Nullable SqlNode filter, @Nullable SqlNodeList distinctList,
+        @Nullable SqlNodeList orderList, SqlValidatorScope scope) {
         validateAggregateFunction(aggCall, (SqlAggFunction) aggCall.getOperator());
 
-        super.validateAggregateParams(aggCall, filter, orderList, scope);
+        super.validateAggregateParams(aggCall, filter, null, orderList, scope);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/FilterSpoolMergeToHashIndexSpoolRule.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/FilterSpoolMergeToHashIndexSpoolRule.java
index 59727d7..3bb6daf 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/FilterSpoolMergeToHashIndexSpoolRule.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/FilterSpoolMergeToHashIndexSpoolRule.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.plan.RelRule;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelCollations;
@@ -28,7 +29,9 @@ import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.Filter;
 import org.apache.calcite.rel.core.RelFactories;
 import org.apache.calcite.rel.core.Spool;
+import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexUtil;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteFilter;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteHashIndexSpool;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteTableSpool;
@@ -38,6 +41,8 @@ import org.apache.ignite.internal.processors.query.calcite.util.RexUtils;
 
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
 
+import static org.apache.ignite.internal.processors.query.calcite.util.RexUtils.isBinaryComparison;
+
 /**
  * Rule that pushes filter into the spool.
  */
@@ -56,6 +61,7 @@ public class FilterSpoolMergeToHashIndexSpoolRule extends RelRule<FilterSpoolMer
         final IgniteTableSpool spool = call.rel(1);
 
         RelOptCluster cluster = spool.getCluster();
+        RexBuilder builder = RexUtils.builder(cluster);
 
         RelTraitSet trait = spool.getTraitSet();
         CorrelationTrait filterCorr = TraitUtils.correlation(filter);
@@ -65,9 +71,20 @@ public class FilterSpoolMergeToHashIndexSpoolRule extends RelRule<FilterSpoolMer
 
         RelNode input = spool.getInput();
 
+        RexNode condition0 = RexUtil.expandSearch(builder, null, filter.getCondition());
+
+        condition0 = RexUtil.toCnf(builder, condition0);
+
+        List<RexNode> conjunctions = RelOptUtil.conjunctions(condition0);
+
+        //TODO: https://issues.apache.org/jira/browse/IGNITE-14916
+        for (RexNode rexNode : conjunctions)
+            if (!isBinaryComparison(rexNode))
+                return;
+
         List<RexNode> searchRow = RexUtils.buildHashSearchRow(
             cluster,
-            filter.getCondition(),
+            condition0,
             spool.getRowType()
         );
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/logical/LogicalOrToUnionRule.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/logical/LogicalOrToUnionRule.java
index fd62804..e91d148 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/logical/LogicalOrToUnionRule.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/logical/LogicalOrToUnionRule.java
@@ -66,9 +66,10 @@ public class LogicalOrToUnionRule extends RelRule<LogicalOrToUnionRule.Config> {
 
         RelNode input = rel.getInput(0);
 
-        call.transformTo(rel, ImmutableMap.of(
-            createUnionAll(cluster, input, operands.get(0), operands.get(1)), rel,
-            createUnionAll(cluster, input, operands.get(1), operands.get(0)), rel
+        RelNode rel0 = createUnionAll(cluster, input, operands.get(0), operands.get(1));
+
+        call.transformTo(rel0, ImmutableMap.of(
+            createUnionAll(cluster, input, operands.get(1), operands.get(0)), rel0
         ));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/RexUtils.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/RexUtils.java
index 225a291..f601669 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/RexUtils.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/RexUtils.java
@@ -382,7 +382,7 @@ public class RexUtils {
     }
 
     /** */
-    private static boolean isBinaryComparison(RexNode exp) {
+    public static boolean isBinaryComparison(RexNode exp) {
         return TREE_INDEX_COMPARISON.contains(exp.getKind()) &&
             (exp instanceof RexCall) &&
             ((RexCall)exp).getOperands().size() == 2;
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
index 4fe7ef4..a0115b4 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
@@ -1720,8 +1720,8 @@ public class PlannerTest extends AbstractPlannerTest {
 
         assertNotNull(phys);
         assertEquals("" +
-                "IgniteProject(DEPTNO=[$3], NAME=[$4], ID=[$0], NAME0=[$1], DEPTNO0=[$2])\n" +
-                "  IgniteSort(sort0=[$1], sort1=[$3], dir0=[ASC], dir1=[ASC])\n" +
+                "IgniteSort(sort0=[$3], sort1=[$0], dir0=[ASC], dir1=[ASC])\n" +
+                "  IgniteProject(DEPTNO=[$3], NAME=[$4], ID=[$0], NAME0=[$1], DEPTNO0=[$2])\n" +
                 "    IgniteNestedLoopJoin(condition=[AND(=($3, $2), >=($1, $4))], joinType=[inner])\n" +
                 "      IgniteIndexScan(table=[[PUBLIC, EMP]], index=[emp_idx])\n" +
                 "      IgniteIndexScan(table=[[PUBLIC, DEPT]], index=[dep_idx])\n",
diff --git a/parent/pom.xml b/parent/pom.xml
index 4eb459f..52f27e7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -73,12 +73,12 @@
         <typesafe.version>1.4.1</typesafe.version>
         <hamcrest.version>2.2</hamcrest.version>
         <scalecube.version>2.6.6</scalecube.version>
-        <calcite.version>1.26.0</calcite.version>
-        <janino.version>3.0.11</janino.version>
-        <avatica.version>1.17.0</avatica.version>
+        <calcite.version>1.27.0</calcite.version>
+        <janino.version>3.1.4</janino.version>
+        <avatica.version>1.18.0</avatica.version>
         <jsonpath.version>2.4.0</jsonpath.version>
         <reflections.version>0.9.10</reflections.version>
-        <javassist.version>3.27.0-GA</javassist.version>
+        <javassist.version>3.28.0-GA</javassist.version>
         <esri.geometry.version>2.2.3</esri.geometry.version>
         <rocksdb.version>6.20.3</rocksdb.version>
         <disruptor.version>3.3.7</disruptor.version>