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));