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 2021/10/29 07:11:36 UTC

[ignite] branch sql-calcite updated: IGNITE-15778 Calcite. Bump version up to 1.28.0 - Fixes #9507.

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

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


The following commit(s) were added to refs/heads/sql-calcite by this push:
     new 46a8626  IGNITE-15778 Calcite. Bump version up to 1.28.0 - Fixes #9507.
46a8626 is described below

commit 46a862658f2c51a9b37f249260c492d80bea766c
Author: zstan <st...@gmail.com>
AuthorDate: Fri Oct 29 10:09:51 2021 +0300

    IGNITE-15778 Calcite. Bump version up to 1.28.0 - Fixes #9507.
    
    Signed-off-by: zstan <st...@gmail.com>
---
 modules/calcite/pom.xml                            |  6 +-
 .../calcite/rule/CorrelateToNestedLoopRule.java    | 56 ++++-----------
 .../calcite/rule/CorrelatedNestedLoopJoinRule.java | 80 +++++-----------------
 .../rule/TableFunctionScanConverterRule.java       | 22 ------
 .../integration/TableDdlIntegrationTest.java       |  2 +-
 5 files changed, 35 insertions(+), 131 deletions(-)

diff --git a/modules/calcite/pom.xml b/modules/calcite/pom.xml
index 74b9095..e892be1 100644
--- a/modules/calcite/pom.xml
+++ b/modules/calcite/pom.xml
@@ -26,9 +26,9 @@
 
     <!-- Module specific package versions -->
     <properties>
-        <calcite.version>1.27.0</calcite.version>
-        <janino.version>3.1.4</janino.version>
-        <avatica.version>1.18.0</avatica.version>
+        <calcite.version>1.28.0</calcite.version>
+        <janino.version>3.1.6</janino.version>
+        <avatica.version>1.19.0</avatica.version>
         <jsonpath.version>2.4.0</jsonpath.version>
         <reflections.version>0.9.10</reflections.version>
         <javassist.version>3.28.0-GA</javassist.version>
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CorrelateToNestedLoopRule.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CorrelateToNestedLoopRule.java
index 0c31678..019be98 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CorrelateToNestedLoopRule.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CorrelateToNestedLoopRule.java
@@ -19,19 +19,18 @@ package org.apache.ignite.internal.processors.query.calcite.rule;
 
 import java.util.Collections;
 import java.util.Set;
-import org.apache.calcite.plan.Convention;
 import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
-import org.apache.calcite.plan.RelTrait;
 import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.PhysicalNode;
 import org.apache.calcite.rel.RelNode;
-import org.apache.calcite.rel.convert.ConverterRule;
 import org.apache.calcite.rel.core.Correlate;
 import org.apache.calcite.rel.core.CorrelationId;
 import org.apache.calcite.rel.core.JoinRelType;
-import org.apache.calcite.rel.core.RelFactories;
 import org.apache.calcite.rel.logical.LogicalCorrelate;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteConvention;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCorrelatedNestedLoopJoin;
 import org.apache.ignite.internal.processors.query.calcite.trait.CorrelationTrait;
@@ -44,24 +43,17 @@ import org.apache.ignite.internal.processors.query.calcite.trait.RewindabilityTr
  * converted to other logical operators if decorrelation is enabled, but in some cases query can't
  * be decorrelated (when table function is used for example), this rule is required to support such cases.
  */
-public class CorrelateToNestedLoopRule extends ConverterRule {
+public class CorrelateToNestedLoopRule extends AbstractIgniteConverterRule<LogicalCorrelate> {
     /** */
-    public static final RelOptRule INSTANCE = Config.DEFAULT.toRule();
+    public static final RelOptRule INSTANCE = new CorrelateToNestedLoopRule();
 
     /** */
-    public CorrelateToNestedLoopRule(Config cfg) {
-        super(cfg);
+    public CorrelateToNestedLoopRule() {
+        super(LogicalCorrelate.class, "CorrelateToNestedLoopRule");
     }
 
     /** {@inheritDoc} */
-    @Override public RelNode convert(RelNode rel) {
-        throw new IllegalStateException("Should not be called");
-    }
-
-    /** {@inheritDoc} */
-    @Override public void onMatch(RelOptRuleCall call) {
-        LogicalCorrelate rel = call.rel(0);
-
+    @Override protected PhysicalNode convert(RelOptPlanner planner, RelMetadataQuery mq, LogicalCorrelate rel) {
         final RelOptCluster cluster = rel.getCluster();
 
         final Set<CorrelationId> correlationIds = Collections.singleton(rel.getCorrelationId());
@@ -76,7 +68,7 @@ public class CorrelateToNestedLoopRule extends ConverterRule {
         RelNode left = convert(rel.getLeft(), leftInTraits);
         RelNode right = convert(rel.getRight(), rightInTraits);
 
-        call.transformTo(
+        return
             new IgniteCorrelatedNestedLoopJoin(
                 cluster,
                 outTraits,
@@ -85,33 +77,15 @@ public class CorrelateToNestedLoopRule extends ConverterRule {
                 cluster.getRexBuilder().makeLiteral(true),
                 correlationIds,
                 rel.getJoinType()
-            )
-        );
+            );
     }
 
-    /** */
-    @SuppressWarnings("ClassNameSameAsAncestorName")
-    public interface Config extends ConverterRule.Config {
-        /** */
-        Config DEFAULT = ConverterRule.Config.INSTANCE
-            .withDescription("CorrelateToNestedLoopRule")
-            .withRelBuilderFactory(RelFactories.LOGICAL_BUILDER)
-            .as(Config.class)
-            .withConversion(LogicalCorrelate.class, Convention.NONE, IgniteConvention.INSTANCE);
-
-        /** */
-        default Config withConversion(Class<? extends Correlate> clazz, RelTrait in, RelTrait out) {
-            return withInTrait(in)
-                .withOutTrait(out)
-                .withOperandSupplier(b ->
-                    b.operand(clazz).predicate(CorrelateToNestedLoopRule::preMatch).convert(in))
-                .as(Config.class);
-        }
+    /** {@inheritDoc} */
+    @Override public void onMatch(RelOptRuleCall call) {
+        Correlate join = call.rel(0);
 
-        /** {@inheritDoc} */
-        @Override default CorrelateToNestedLoopRule toRule() {
-            return new CorrelateToNestedLoopRule(this);
-        }
+        if (preMatch(join))
+            super.onMatch(call);
     }
 
     /** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CorrelatedNestedLoopJoinRule.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CorrelatedNestedLoopJoinRule.java
index 538546c..3ca4e22 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CorrelatedNestedLoopJoinRule.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CorrelatedNestedLoopJoinRule.java
@@ -22,62 +22,49 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.calcite.plan.Convention;
 import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
-import org.apache.calcite.plan.RelOptUtil;
-import org.apache.calcite.plan.RelTrait;
 import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.PhysicalNode;
 import org.apache.calcite.rel.RelNode;
-import org.apache.calcite.rel.convert.ConverterRule;
 import org.apache.calcite.rel.core.CorrelationId;
 import org.apache.calcite.rel.core.Join;
 import org.apache.calcite.rel.core.JoinRelType;
-import org.apache.calcite.rel.core.RelFactories;
 import org.apache.calcite.rel.logical.LogicalJoin;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexCorrelVariable;
 import org.apache.calcite.rex.RexInputRef;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexShuttle;
 import org.apache.calcite.tools.RelBuilder;
-import org.apache.calcite.util.ImmutableBeans;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteConvention;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCorrelatedNestedLoopJoin;
 import org.apache.ignite.internal.processors.query.calcite.trait.CorrelationTrait;
 import org.apache.ignite.internal.processors.query.calcite.trait.RewindabilityTrait;
-import org.apache.ignite.internal.util.typedef.F;
 
 /** */
-public class CorrelatedNestedLoopJoinRule extends ConverterRule {
+public class CorrelatedNestedLoopJoinRule extends AbstractIgniteConverterRule<LogicalJoin> {
     /** */
-    public static final RelOptRule INSTANCE = Config.DEFAULT.toRule();
+    public static final RelOptRule INSTANCE = new CorrelatedNestedLoopJoinRule(1);
 
     /** TODO: https://issues.apache.org/jira/browse/IGNITE-14757 */
-    public static final RelOptRule INSTANCE_BATCHED = Config.DEFAULT.withBatchSize(100).toRule();
+    public static final RelOptRule INSTANCE_BATCHED = new CorrelatedNestedLoopJoinRule(100);
 
     /** */
     private final int batchSize;
 
     /** */
-    public CorrelatedNestedLoopJoinRule(Config cfg) {
-        super(cfg);
-
-        int batchSize = cfg.batchSize();
-        assert batchSize >= 0;
+    public CorrelatedNestedLoopJoinRule(int batchSize) {
+        super(LogicalJoin.class, "CorrelatedNestedLoopJoin");
 
         this.batchSize = batchSize;
     }
 
     /** {@inheritDoc} */
-    @Override public RelNode convert(RelNode rel) {
-        throw new IllegalStateException("Should not be called");
-    }
-
-    /** {@inheritDoc} */
-    @Override public void onMatch(RelOptRuleCall call) {
-        Join rel = call.rel(0);
+    @Override protected PhysicalNode convert(RelOptPlanner planner, RelMetadataQuery mq, LogicalJoin rel) {
         final int leftFieldCount = rel.getLeft().getRowType().getFieldCount();
         final RelOptCluster cluster = rel.getCluster();
         final RexBuilder rexBuilder = cluster.getRexBuilder();
@@ -86,15 +73,6 @@ public class CorrelatedNestedLoopJoinRule extends ConverterRule {
         final Set<CorrelationId> correlationIds = new HashSet<>();
         final ArrayList<RexNode> corrVar = new ArrayList<>();
 
-        final Set<CorrelationId> corrIds = RelOptUtil.getVariablesUsed(rel.getRight());
-
-        // TODO: remove all near 'if' scope after https://issues.apache.org/jira/browse/CALCITE-4673 will be merged.
-        if (corrIds.size() > 1) {
-            CorrelationId corr0 = F.first(corrIds);
-            corrVar.add(rexBuilder.makeCorrel(rel.getLeft().getRowType(), corr0));
-            correlationIds.add(corr0);
-        }
-
         if (corrVar.isEmpty()) {
             for (int i = 0; i < batchSize; i++) {
                 CorrelationId correlationId = cluster.createCorrel();
@@ -151,7 +129,7 @@ public class CorrelatedNestedLoopJoinRule extends ConverterRule {
         RelNode left = convert(rel.getLeft(), leftInTraits);
         right = convert(right, rightInTraits);
 
-        call.transformTo(
+        return
             new IgniteCorrelatedNestedLoopJoin(
                 cluster,
                 outTraits,
@@ -160,41 +138,15 @@ public class CorrelatedNestedLoopJoinRule extends ConverterRule {
                 rel.getCondition(),
                 correlationIds,
                 joinType
-            )
-        );
+            );
     }
 
-    /** */
-    @SuppressWarnings("ClassNameSameAsAncestorName")
-    public interface Config extends ConverterRule.Config {
-        /** */
-        Config DEFAULT = ConverterRule.Config.INSTANCE
-            .withDescription("CorrelatedNestedLoopJoin")
-            .withRelBuilderFactory(RelFactories.LOGICAL_BUILDER)
-            .as(Config.class)
-            .withConversion(LogicalJoin.class, Convention.NONE, IgniteConvention.INSTANCE)
-            .withBatchSize(1);
-
-        /** Description of the rule instance. */
-        @ImmutableBeans.Property
-        int batchSize();
-
-        /** Sets {@link #description()}. */
-        Config withBatchSize(int batchSize);
-
-        /** */
-        default Config withConversion(Class<? extends Join> clazz, RelTrait in, RelTrait out) {
-            return withInTrait(in)
-                .withOutTrait(out)
-                .withOperandSupplier(b ->
-                    b.operand(clazz).predicate(CorrelatedNestedLoopJoinRule::preMatch).convert(in))
-                .as(Config.class);
-        }
+    /** {@inheritDoc} */
+    @Override public void onMatch(RelOptRuleCall call) {
+        LogicalJoin join = call.rel(0);
 
-        /** {@inheritDoc} */
-        @Override default CorrelatedNestedLoopJoinRule toRule() {
-            return new CorrelatedNestedLoopJoinRule(this);
-        }
+        if (preMatch(join))
+            super.onMatch(call);
     }
 
     /** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/TableFunctionScanConverterRule.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/TableFunctionScanConverterRule.java
index 2235b0b..4a21c94 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/TableFunctionScanConverterRule.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/TableFunctionScanConverterRule.java
@@ -16,20 +16,14 @@
  */
 package org.apache.ignite.internal.processors.query.calcite.rule;
 
-import java.util.List;
 import java.util.Set;
 import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelOptRule;
-import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.PhysicalNode;
-import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.CorrelationId;
 import org.apache.calcite.rel.logical.LogicalTableFunctionScan;
 import org.apache.calcite.rel.metadata.RelMetadataQuery;
-import org.apache.calcite.rex.RexBuilder;
-import org.apache.calcite.sql2rel.DeduplicateCorrelateVariables;
-import org.apache.calcite.util.Util;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteConvention;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteTableFunctionScan;
 import org.apache.ignite.internal.processors.query.calcite.trait.CorrelationTrait;
@@ -37,7 +31,6 @@ import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistribut
 import org.apache.ignite.internal.processors.query.calcite.trait.RewindabilityTrait;
 import org.apache.ignite.internal.processors.query.calcite.util.RexUtils;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
 
 /**
  * Rule to convert a {@link LogicalTableFunctionScan} to an {@link IgniteTableFunctionScan}.
@@ -60,23 +53,8 @@ public class TableFunctionScanConverterRule extends AbstractIgniteConverterRule<
             .replace(RewindabilityTrait.REWINDABLE)
             .replace(IgniteDistributions.broadcast());
 
-        RexBuilder rexBuilder = rel.getCluster().getRexBuilder();
-
         Set<CorrelationId> corrIds = RexUtils.extractCorrelationIds(rel.getCall());
 
-        // TODO: remove all near 'if' scope after https://issues.apache.org/jira/browse/CALCITE-4673 will be merged.
-        if (corrIds.size() > 1) {
-            final List<CorrelationId> correlNames = U.arrayList(corrIds);
-
-            RelNode rel0 = DeduplicateCorrelateVariables.go(rexBuilder, correlNames.get(0), Util.skip(correlNames), rel);
-
-            corrIds = RelOptUtil.getVariablesUsed(rel0);
-
-            assert corrIds.size() == 1 : "Multiple correlates are applied: " + corrIds;
-
-            rel = (LogicalTableFunctionScan)rel0;
-        }
-
         if (!corrIds.isEmpty())
             traitSet = traitSet.replace(CorrelationTrait.correlations(corrIds));
 
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/TableDdlIntegrationTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/TableDdlIntegrationTest.java
index d35cf9d..b7c02c4 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/TableDdlIntegrationTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/TableDdlIntegrationTest.java
@@ -735,7 +735,7 @@ public class TableDdlIntegrationTest extends AbstractDdlIntegrationTest {
     public void alterTableLogging() {
         String cacheName = "cache";
 
-        IgniteCache<Object, Object> cache = client.getOrCreateCache(new CacheConfiguration<>(cacheName)
+        client.getOrCreateCache(new CacheConfiguration<>(cacheName)
             .setDataRegionName(PERSISTENT_DATA_REGION).setIndexedTypes(Integer.class, Integer.class));
 
         assertTrue(client.cluster().isWalEnabled(cacheName));