You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by hy...@apache.org on 2020/05/26 18:50:25 UTC

[calcite] branch master updated: [CALCITE-4009] Remove traitset remapping in ProjectJoinTransposeRule

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

hyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/master by this push:
     new 2b1254b  [CALCITE-4009] Remove traitset remapping in ProjectJoinTransposeRule
2b1254b is described below

commit 2b1254bdec18f9e869f3287fb8ab471903e97829
Author: Haisheng Yuan <h....@alibaba-inc.com>
AuthorDate: Sun May 24 14:47:51 2020 -0500

    [CALCITE-4009] Remove traitset remapping in ProjectJoinTransposeRule
    
    Remove traitset mapping that was added to ProjectJoinTransposeRule by
    CALCITE-3353. Now it becomes obsolete, we should fail fast if that happens.
    Otherwise, all the downstream projects that uses this rule will be wasted time
    to deal with traitsets they don't need.
---
 .../rel/rules/ProjectJoinTransposeRule.java        | 40 +-----------------
 .../org/apache/calcite/test/RelOptRulesTest.java   | 49 ----------------------
 2 files changed, 2 insertions(+), 87 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java
index 5d6510c..b0c1ef3 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java
@@ -19,11 +19,6 @@ package org.apache.calcite.rel.rules;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
 import org.apache.calcite.plan.RelOptUtil;
-import org.apache.calcite.plan.RelTraitSet;
-import org.apache.calcite.rel.RelCollation;
-import org.apache.calcite.rel.RelCollationTraitDef;
-import org.apache.calcite.rel.RelCollations;
-import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.Join;
 import org.apache.calcite.rel.core.Project;
@@ -35,9 +30,7 @@ import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexOver;
 import org.apache.calcite.rex.RexShuttle;
-import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.tools.RelBuilderFactory;
-import org.apache.calcite.util.mapping.Mappings;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -152,40 +145,11 @@ public class ProjectJoinTransposeRule extends RelOptRule implements Transformati
               projJoinFieldList,
               adjustments);
     }
-    RelTraitSet traits = join.getTraitSet();
-    final List<RelCollation> originCollations = traits.getTraits(RelCollationTraitDef.INSTANCE);
-
-    if (originCollations != null && !originCollations.isEmpty()) {
-      List<RelCollation> newCollations = new ArrayList<>();
-      final int originLeftCnt = join.getLeft().getRowType().getFieldCount();
-      final Mappings.TargetMapping leftMapping = RelOptUtil.permutationPushDownProject(
-              ((Project) leftProjRel).getProjects(), join.getLeft().getRowType(),
-              0, 0);
-      final Mappings.TargetMapping rightMapping = RelOptUtil.permutationPushDownProject(
-              ((Project) rightProjRel).getProjects(), join.getRight().getRowType(),
-              originLeftCnt, leftProjRel.getRowType().getFieldCount());
-      for (RelCollation collation: originCollations) {
-        List<RelFieldCollation> fc = new ArrayList<>();
-        final List<RelFieldCollation> fieldCollations = collation.getFieldCollations();
-        for (RelFieldCollation relFieldCollation: fieldCollations) {
-          final int fieldIndex = relFieldCollation.getFieldIndex();
-          Mappings.TargetMapping mapping = fieldIndex < originLeftCnt ? leftMapping : rightMapping;
-          RelFieldCollation newFieldCollation = RexUtil.apply(mapping, relFieldCollation);
-          if (newFieldCollation == null) {
-            break;
-          }
-          fc.add(newFieldCollation);
-        }
-        newCollations.add(RelCollations.of(fc));
-      }
-      if (!newCollations.isEmpty()) {
-        traits = traits.replace(newCollations);
-      }
-    }
+
     // create a new join with the projected children
     Join newJoinRel =
         join.copy(
-            traits,
+            join.getTraitSet(),
             newJoinFilter,
             leftProjRel,
             rightProjRel,
diff --git a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
index 9324d78..0c97896 100644
--- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
@@ -132,7 +132,6 @@ import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexInputRef;
 import org.apache.calcite.rex.RexNode;
-import org.apache.calcite.rex.RexOver;
 import org.apache.calcite.runtime.Hook;
 import org.apache.calcite.sql.SqlFunction;
 import org.apache.calcite.sql.SqlFunctionCategory;
@@ -142,7 +141,6 @@ import org.apache.calcite.sql.SqlOperator;
 import org.apache.calcite.sql.SqlOperatorBinding;
 import org.apache.calcite.sql.SqlSpecialOperator;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
-import org.apache.calcite.sql.parser.SqlParser;
 import org.apache.calcite.sql.type.OperandTypes;
 import org.apache.calcite.sql.type.ReturnTypes;
 import org.apache.calcite.sql.type.SqlTypeName;
@@ -151,8 +149,6 @@ import org.apache.calcite.sql.validate.SqlValidator;
 import org.apache.calcite.sql2rel.RelDecorrelator;
 import org.apache.calcite.sql2rel.SqlToRelConverter;
 import org.apache.calcite.test.catalog.MockCatalogReader;
-import org.apache.calcite.tools.FrameworkConfig;
-import org.apache.calcite.tools.Frameworks;
 import org.apache.calcite.tools.Program;
 import org.apache.calcite.tools.Programs;
 import org.apache.calcite.tools.RelBuilder;
@@ -1074,51 +1070,6 @@ class RelOptRulesTest extends RelOptTestBase {
         .check();
   }
 
-  /**
-   * Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-3353">[CALCITE-3353]
-   * ProjectJoinTransposeRule caused AssertionError when creating a new Join</a>.
-   */
-  @Test void testProjectJoinTransposeWithMergeJoin() {
-    ProjectJoinTransposeRule testRule = new ProjectJoinTransposeRule(
-            Project.class, Join.class, expr -> !(expr instanceof RexOver),
-            RelFactories.LOGICAL_BUILDER);
-    ImmutableList<RelOptRule> commonRules = ImmutableList.of(
-            EnumerableRules.ENUMERABLE_PROJECT_RULE,
-            EnumerableRules.ENUMERABLE_MERGE_JOIN_RULE,
-            EnumerableRules.ENUMERABLE_SORT_RULE,
-            EnumerableRules.ENUMERABLE_VALUES_RULE);
-    final RuleSet rules = RuleSets.ofList(ImmutableList.<RelOptRule>builder()
-            .addAll(commonRules)
-            .add(ProjectJoinTransposeRule.INSTANCE)
-            .build());
-    final RuleSet testRules = RuleSets.ofList(ImmutableList.<RelOptRule>builder()
-            .addAll(commonRules)
-            .add(testRule).build());
-
-    FrameworkConfig config = Frameworks.newConfigBuilder()
-            .parserConfig(SqlParser.Config.DEFAULT)
-            .traitDefs(ConventionTraitDef.INSTANCE, RelCollationTraitDef.INSTANCE)
-            .build();
-
-    RelBuilder builder = RelBuilder.create(config);
-    RelNode logicalPlan = builder
-            .values(new String[]{"id", "name"}, "1", "anna", "2", "bob", "3", "tom")
-            .values(new String[]{"name", "age"}, "anna", "14", "bob", "17", "tom", "22")
-            .join(JoinRelType.INNER, "name")
-            .project(builder.field(3))
-            .build();
-
-    RelTraitSet desiredTraits = logicalPlan.getTraitSet()
-            .replace(EnumerableConvention.INSTANCE);
-    RelOptPlanner planner = logicalPlan.getCluster().getPlanner();
-    RelNode enumerablePlan1 = Programs.of(rules).run(planner, logicalPlan,
-            desiredTraits, ImmutableList.of(), ImmutableList.of());
-    RelNode enumerablePlan2 = Programs.of(testRules).run(planner, logicalPlan,
-            desiredTraits, ImmutableList.of(), ImmutableList.of());
-    assertEquals(RelOptUtil.toString(enumerablePlan1), RelOptUtil.toString(enumerablePlan2));
-  }
-
   /** Test case for
    * <a href="https://issues.apache.org/jira/browse/CALCITE-889">[CALCITE-889]
    * Implement SortUnionTransposeRule</a>. */