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[