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 <15013153+zabe...@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[