You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by za...@apache.org on 2019/06/07 23:17:21 UTC

[calcite] branch master updated: Following [CALCITE-2822] simplify test and related classes/rules

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

zabetak 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 941cd4e  Following [CALCITE-2822] simplify test and related classes/rules
941cd4e is described below

commit 941cd4e9540e3ef9b7c15daee42831a0c63da8b9
Author: zabetak <15...@users.noreply.github.com>
AuthorDate: Sat Jun 8 01:12:20 2019 +0200

    Following [CALCITE-2822] simplify test and related classes/rules
    
    I accidentally pushed CALCITE-2822 without these changes. Apologies for
    the multiple commits.
---
 .../rel/rules/MultiJoinProjectTransposeRule.java   |  12 +-
 .../org/apache/calcite/test/RelOptRulesTest.java   | 207 ++++++++-------------
 .../org/apache/calcite/test/RelOptRulesTest.xml    |   2 +-
 3 files changed, 86 insertions(+), 135 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
index d87a600..c69a6c2 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
@@ -107,18 +107,15 @@ public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule {
 
   //~ Methods ----------------------------------------------------------------
 
-  // override JoinProjectTransposeRule
-  protected boolean hasLeftChild(RelOptRuleCall call) {
+  @Override protected boolean hasLeftChild(RelOptRuleCall call) {
     return call.rels.length != 4;
   }
 
-  // override JoinProjectTransposeRule
-  protected boolean hasRightChild(RelOptRuleCall call) {
+  @Override protected boolean hasRightChild(RelOptRuleCall call) {
     return call.rels.length > 3;
   }
 
-  // override JoinProjectTransposeRule
-  protected Project getRightChild(RelOptRuleCall call) {
+  @Override protected Project getRightChild(RelOptRuleCall call) {
     if (call.rels.length == 4) {
       return call.rel(2);
     } else {
@@ -126,8 +123,7 @@ public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule {
     }
   }
 
-  // override JoinProjectTransposeRule
-  protected RelNode getProjectChild(
+  @Override protected RelNode getProjectChild(
       RelOptRuleCall call,
       Project project,
       boolean leftChild) {
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 1882ef6..a32a084 100644
--- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
@@ -21,7 +21,6 @@ import org.apache.calcite.adapter.enumerable.EnumerableRules;
 import org.apache.calcite.config.CalciteConnectionConfigImpl;
 import org.apache.calcite.plan.Context;
 import org.apache.calcite.plan.Contexts;
-import org.apache.calcite.plan.Convention;
 import org.apache.calcite.plan.ConventionTraitDef;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -39,7 +38,6 @@ import org.apache.calcite.prepare.Prepare;
 import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelCollationTraitDef;
 import org.apache.calcite.rel.RelCollations;
-import org.apache.calcite.rel.RelDistributionTraitDef;
 import org.apache.calcite.rel.RelDistributions;
 import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.RelNode;
@@ -62,10 +60,7 @@ import org.apache.calcite.rel.logical.LogicalTableScan;
 import org.apache.calcite.rel.metadata.CachingRelMetadataProvider;
 import org.apache.calcite.rel.metadata.ChainedRelMetadataProvider;
 import org.apache.calcite.rel.metadata.DefaultRelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMdCollation;
-import org.apache.calcite.rel.metadata.RelMdDistribution;
 import org.apache.calcite.rel.metadata.RelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.calcite.rel.rules.AggregateExpandDistinctAggregatesRule;
 import org.apache.calcite.rel.rules.AggregateExtractProjectRule;
 import org.apache.calcite.rel.rules.AggregateFilterTransposeRule;
@@ -135,7 +130,6 @@ import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexNode;
-import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.runtime.Hook;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlNode;
@@ -144,9 +138,7 @@ import org.apache.calcite.sql.SqlSpecialOperator;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.sql.type.ReturnTypes;
 import org.apache.calcite.sql.type.SqlTypeName;
-import org.apache.calcite.sql.validate.SqlConformanceEnum;
 import org.apache.calcite.sql.validate.SqlValidator;
-import org.apache.calcite.sql.validate.SqlValidatorUtil;
 import org.apache.calcite.sql2rel.SqlToRelConverter;
 import org.apache.calcite.test.catalog.MockCatalogReader;
 import org.apache.calcite.tools.Program;
@@ -5566,13 +5558,7 @@ public class RelOptRulesTest extends RelOptTestBase {
   }
 
   @Test public void testFilterAndProjectWithMultiJoin() throws Exception {
-    final Tester tester = new TesterImpl(getDiffRepos(),
-        false, false, true, false,
-        null, null, SqlToRelConverter.Config.DEFAULT,
-        SqlConformanceEnum.DEFAULT, Contexts.empty());
-
     final HepProgram preProgram = new HepProgramBuilder()
-        .addMatchOrder(HepMatchOrder.BOTTOM_UP)
         .addRuleCollection(Arrays.asList(MyFilterRule.INSTANCE, MyProjectRule.INSTANCE))
         .build();
 
@@ -5583,136 +5569,105 @@ public class RelOptRulesTest extends RelOptTestBase {
         new ProjectMultiJoinMergeRule(MyProject.class, RelFactories.LOGICAL_BUILDER);
 
     HepProgram program = new HepProgramBuilder()
-        .addMatchOrder(HepMatchOrder.BOTTOM_UP)
-        .addRuleInstance(JoinToMultiJoinRule.INSTANCE)
-        .addRuleCollection(Arrays.asList(filterMultiJoinMergeRule, projectMultiJoinMergeRule))
+        .addRuleCollection(
+            Arrays.asList(
+                JoinToMultiJoinRule.INSTANCE,
+                filterMultiJoinMergeRule,
+                projectMultiJoinMergeRule))
         .build();
 
-    checkPlanning(tester, preProgram, new HepPlanner(program),
-        "select * from (select * from emp e1 left outer join dept d on e1.deptno = d.deptno "
-            + "where d.deptno > 3)", false);
+    sql("select * from emp e1 left outer join dept d on e1.deptno = d.deptno where d.deptno > 3")
+        .withPre(preProgram).with(program).check();
   }
-}
 
-/**
- * Custom implementation of {@link Filter} for use
- * in test case to verify that {@link FilterMultiJoinMergeRule}
- * can be created with any {@link Filter} and not limited to
- * {@link org.apache.calcite.rel.logical.LogicalFilter}
- */
-class MyFilter extends Filter {
+  /**
+   * Custom implementation of {@link Filter} for use
+   * in test case to verify that {@link FilterMultiJoinMergeRule}
+   * can be created with any {@link Filter} and not limited to
+   * {@link org.apache.calcite.rel.logical.LogicalFilter}
+   */
+  private static class MyFilter extends Filter {
+
+    MyFilter(
+        RelOptCluster cluster,
+        RelTraitSet traitSet,
+        RelNode child,
+        RexNode condition) {
+      super(cluster, traitSet, child, condition);
+    }
 
-  MyFilter(
-      RelOptCluster cluster,
-      RelTraitSet traitSet,
-      RelNode child,
-      RexNode condition) {
-    super(cluster, traitSet, child, condition);
-  }
+    public MyFilter copy(RelTraitSet traitSet, RelNode input,
+        RexNode condition) {
+      return new MyFilter(getCluster(), traitSet, input, condition);
+    }
 
-  public MyFilter copy(RelTraitSet traitSet, RelNode input,
-      RexNode condition) {
-    return new MyFilter(getCluster(), traitSet, input, condition);
   }
 
-  /** Creates a MyFilter. */
-  public static MyFilter create(final RelNode input, RexNode condition) {
-    final RelOptCluster cluster = input.getCluster();
-    final RelMetadataQuery mq = cluster.getMetadataQuery();
-    final RelTraitSet traitSet = cluster.traitSetOf(Convention.NONE)
-        .replaceIfs(RelCollationTraitDef.INSTANCE,
-          () -> RelMdCollation.filter(mq, input))
-        .replaceIf(RelDistributionTraitDef.INSTANCE,
-          () -> RelMdDistribution.filter(mq, input));
-    return new MyFilter(cluster, traitSet, input, condition);
-  }
-}
+  /**
+   * Rule to transform {@link LogicalFilter} into
+   * custom MyFilter
+   */
+  private static class MyFilterRule extends RelOptRule {
+    static final MyFilterRule INSTANCE =
+        new MyFilterRule(LogicalFilter.class, RelFactories.LOGICAL_BUILDER);
 
-/**
- * Rule to transform {@link LogicalFilter} into
- * custom MyFilter
- */
-class MyFilterRule extends RelOptRule {
-  static final MyFilterRule INSTANCE =
-      new MyFilterRule(LogicalFilter.class, RelFactories.LOGICAL_BUILDER);
+    private MyFilterRule(Class<? extends Filter> clazz,
+        RelBuilderFactory relBuilderFactory) {
+      super(RelOptRule.operand(clazz, RelOptRule.any()), relBuilderFactory, null);
+    }
 
-  private MyFilterRule(Class<? extends Filter> clazz,
-      RelBuilderFactory relBuilderFactory) {
-    super(RelOptRule.operand(clazz, RelOptRule.any()), relBuilderFactory, null);
+    @Override public void onMatch(RelOptRuleCall call) {
+      final LogicalFilter logicalFilter = call.rel(0);
+      final RelNode input = logicalFilter.getInput();
+      final MyFilter myFilter = new MyFilter(input.getCluster(), input.getTraitSet(), input,
+          logicalFilter.getCondition());
+      call.transformTo(myFilter);
+    }
   }
 
-  @Override public void onMatch(RelOptRuleCall call) {
-    final LogicalFilter logicalFilter = call.rel(0);
-    final MyFilter myFilter = MyFilter.create(logicalFilter.getInput(),
-        logicalFilter.getCondition());
-    call.transformTo(myFilter);
-  }
-}
+  /**
+   * Custom implementation of {@link Project} for use
+   * in test case to verify that {@link ProjectMultiJoinMergeRule}
+   * can be created with any {@link Project} and not limited to
+   * {@link org.apache.calcite.rel.logical.LogicalProject}
+   */
+  private static class MyProject extends Project {
+    MyProject(
+        RelOptCluster cluster,
+        RelTraitSet traitSet,
+        RelNode input,
+        List<? extends RexNode> projects,
+        RelDataType rowType) {
+      super(cluster, traitSet, input, projects, rowType);
+    }
 
-/**
- * Custom implementation of {@link Project} for use
- * in test case to verify that {@link ProjectMultiJoinMergeRule}
- * can be created with any {@link Project} and not limited to
- * {@link org.apache.calcite.rel.logical.LogicalProject}
- */
-class MyProject extends Project {
-  MyProject(
-      RelOptCluster cluster,
-      RelTraitSet traitSet,
-      RelNode input,
-      List<? extends RexNode> projects,
-      RelDataType rowType) {
-    super(cluster, traitSet, input, projects, rowType);
-  }
-
-  public MyProject copy(RelTraitSet traitSet, RelNode input,
-      List<RexNode> projects, RelDataType rowType) {
-    return new MyProject(getCluster(), traitSet, input, projects, rowType);
-  }
-
-  /** Creates a MyProject. */
-  public static MyProject create(final RelNode input,
-      final List<? extends RexNode> projects, List<String> fieldNames) {
-    final RelOptCluster cluster = input.getCluster();
-    final RelDataType rowType =
-        RexUtil.createStructType(cluster.getTypeFactory(), projects,
-          fieldNames, SqlValidatorUtil.F_SUGGESTER);
-    return create(input, projects, rowType);
-  }
-
-  /** Creates a MyProject. */
-  public static MyProject create(final RelNode input,
-      final List<? extends RexNode> projects, RelDataType rowType) {
-    final RelOptCluster cluster = input.getCluster();
-    final RelMetadataQuery mq = cluster.getMetadataQuery();
-    final RelTraitSet traitSet =
-        cluster.traitSet().replace(Convention.NONE)
-          .replaceIfs(RelCollationTraitDef.INSTANCE,
-            () -> RelMdCollation.project(mq, input, projects));
-    return new MyProject(cluster, traitSet, input, projects, rowType);
+    public MyProject copy(RelTraitSet traitSet, RelNode input,
+        List<RexNode> projects, RelDataType rowType) {
+      return new MyProject(getCluster(), traitSet, input, projects, rowType);
+    }
   }
-}
 
-/**
- * Rule to transform {@link LogicalProject} into custom
- * MyProject
- */
-class MyProjectRule extends RelOptRule {
-  static final MyProjectRule INSTANCE =
-      new MyProjectRule(LogicalProject.class, RelFactories.LOGICAL_BUILDER);
+  /**
+   * Rule to transform {@link LogicalProject} into custom
+   * MyProject
+   */
+  private static class MyProjectRule extends RelOptRule {
+    static final MyProjectRule INSTANCE =
+        new MyProjectRule(LogicalProject.class, RelFactories.LOGICAL_BUILDER);
 
-  private MyProjectRule(Class<? extends Project> clazz,
-      RelBuilderFactory relBuilderFactory) {
-    super(RelOptRule.operand(clazz, RelOptRule.any()), relBuilderFactory, null);
-  }
+    private MyProjectRule(Class<? extends Project> clazz,
+        RelBuilderFactory relBuilderFactory) {
+      super(RelOptRule.operand(clazz, RelOptRule.any()), relBuilderFactory, null);
+    }
 
-  @Override public void onMatch(RelOptRuleCall call) {
-    final LogicalProject logicalProject = call.rel(0);
-    final MyProject myProject = MyProject.create(logicalProject.getInput(),
-        logicalProject.getChildExps(), logicalProject.getRowType());
-    call.transformTo(myProject);
+    @Override public void onMatch(RelOptRuleCall call) {
+      final LogicalProject logicalProject = call.rel(0);
+      final RelNode input = logicalProject.getInput();
+      final MyProject myProject = new MyProject(input.getCluster(), input.getTraitSet(), input,
+          logicalProject.getChildExps(), logicalProject.getRowType());
+      call.transformTo(myProject);
+    }
   }
 }
 
-
 // End RelOptRulesTest.java
diff --git a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
index 97ee0b9..eeb224f 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -10978,7 +10978,7 @@ EnumerableUnion(all=[true])
     </TestCase>
     <TestCase name="testFilterAndProjectWithMultiJoin">
         <Resource name="sql">
-            <![CDATA[select * from (select * from emp e1 left outer join dept d on e1.deptno = d.deptno where d.deptno > 3) where ename LIKE 'bar']]>
+            <![CDATA[select * from emp e1 left outer join dept d on e1.deptno = d.deptno where d.deptno > 3]]>
         </Resource>
         <Resource name="planBefore">
             <![CDATA[