[CALCITE-2043] Use custom RelBuilder implementation in some rules (Volodymyr Vysotskyi)
Close apache/calcite#564 Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/d407395e Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/d407395e Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/d407395e Branch: refs/heads/master Commit: d407395e05b5b37e019a44f812aae04540e6f398 Parents: a8505d2 Author: Volodymyr Vysotskyi <[email protected]> Authored: Wed Nov 8 11:12:51 2017 +0000 Committer: Julian Hyde <[email protected]> Committed: Wed Nov 15 11:48:57 2017 -0800 ---------------------------------------------------------------------- .../adapter/cassandra/CassandraRules.java | 4 +- .../CassandraToEnumerableConverterRule.java | 19 +- .../ElasticsearchToEnumerableConverterRule.java | 20 +- .../adapter/enumerable/EnumerableBindable.java | 18 +- .../adapter/enumerable/EnumerableCalcRule.java | 4 +- .../enumerable/EnumerableCorrelateRule.java | 15 +- .../enumerable/EnumerableFilterRule.java | 4 +- .../enumerable/EnumerableFilterToCalcRule.java | 10 +- .../enumerable/EnumerableInterpreterRule.java | 18 +- .../enumerable/EnumerableProjectRule.java | 4 +- .../enumerable/EnumerableProjectToCalcRule.java | 10 +- .../adapter/enumerable/EnumerableRules.java | 15 +- .../EnumerableTableFunctionScanRule.java | 19 +- .../enumerable/EnumerableTableModifyRule.java | 15 +- .../enumerable/EnumerableTableScanRule.java | 20 +- .../enumerable/EnumerableValuesRule.java | 13 +- .../apache/calcite/adapter/jdbc/JdbcRules.java | 3 +- .../jdbc/JdbcToEnumerableConverterRule.java | 10 +- .../apache/calcite/interpreter/Bindables.java | 139 ++++++++++---- .../NoneToBindableConverterRule.java | 16 +- .../calcite/plan/SubstitutionVisitor.java | 12 +- .../org/apache/calcite/plan/hep/HepPlanner.java | 4 +- .../calcite/plan/volcano/AbstractConverter.java | 10 +- .../calcite/rel/convert/ConverterRule.java | 16 +- .../calcite/rel/convert/TraitMatchingRule.java | 21 ++- .../rel/rules/AggregateFilterTransposeRule.java | 3 +- .../rel/rules/AggregateReduceFunctionsRule.java | 3 +- .../calcite/rel/rules/AggregateRemoveRule.java | 18 +- .../rel/rules/AggregateStarTableRule.java | 17 +- .../calcite/rel/rules/AggregateValuesRule.java | 15 +- .../apache/calcite/rel/rules/CalcMergeRule.java | 15 +- .../calcite/rel/rules/CalcRemoveRule.java | 13 +- .../apache/calcite/rel/rules/CalcSplitRule.java | 7 +- .../calcite/rel/rules/CoerceInputsRule.java | 32 ++-- .../calcite/rel/rules/FilterCalcMergeRule.java | 14 +- .../rel/rules/FilterMultiJoinMergeRule.java | 9 +- .../FilterRemoveIsNotDistinctFromRule.java | 13 +- .../rules/FilterTableFunctionTransposeRule.java | 9 +- .../calcite/rel/rules/FilterTableScanRule.java | 18 +- .../calcite/rel/rules/FilterToCalcRule.java | 14 +- .../rel/rules/JoinAddRedundantSemiJoinRule.java | 10 +- .../calcite/rel/rules/JoinAssociateRule.java | 10 +- .../rel/rules/JoinExtractFilterRule.java | 15 +- .../calcite/rel/rules/JoinToCorrelateRule.java | 4 +- .../calcite/rel/rules/JoinToMultiJoinRule.java | 15 +- .../rel/rules/JoinUnionTransposeRule.java | 17 +- .../rules/MaterializedViewFilterScanRule.java | 2 +- .../rules/MultiJoinProjectTransposeRule.java | 16 +- .../calcite/rel/rules/ProjectCalcMergeRule.java | 14 +- .../rel/rules/ProjectMultiJoinMergeRule.java | 2 +- .../calcite/rel/rules/ProjectRemoveRule.java | 16 +- .../rel/rules/ProjectSortTransposeRule.java | 28 ++- .../calcite/rel/rules/ProjectTableScanRule.java | 11 +- .../calcite/rel/rules/ProjectToCalcRule.java | 14 +- .../calcite/rel/rules/ProjectToWindowRule.java | 165 +++++++++------- .../rel/rules/ProjectWindowTransposeRule.java | 16 +- .../calcite/rel/rules/ReduceDecimalsRule.java | 9 +- .../rel/rules/SemiJoinFilterTransposeRule.java | 8 +- .../rel/rules/SemiJoinJoinTransposeRule.java | 9 +- .../calcite/rel/rules/SemiJoinRemoveRule.java | 8 +- .../rel/rules/SortJoinTransposeRule.java | 14 +- .../rel/rules/SortProjectTransposeRule.java | 28 ++- .../calcite/rel/rules/SortRemoveRule.java | 16 +- .../calcite/rel/rules/SubQueryRemoveRule.java | 9 +- .../apache/calcite/rel/rules/TableScanRule.java | 14 +- .../calcite/rel/rules/UnionEliminatorRule.java | 9 +- .../rel/rules/UnionPullUpConstantsRule.java | 2 +- .../calcite/rel/rules/ValuesReduceRule.java | 14 +- .../apache/calcite/rel/stream/StreamRules.java | 108 ++++++++--- .../org/apache/calcite/test/HepPlannerTest.java | 9 +- .../apache/calcite/test/RelOptRulesTest.java | 4 +- .../calcite/adapter/druid/DruidRules.java | 186 ++++++++++++++----- .../adapter/csv/CsvProjectTableScanRule.java | 12 +- .../mongodb/MongoToEnumerableConverterRule.java | 16 +- .../spark/EnumerableToSparkConverterRule.java | 17 +- .../adapter/spark/JdbcToSparkConverterRule.java | 13 +- .../adapter/splunk/SplunkPushDownRule.java | 43 ++--- 77 files changed, 1136 insertions(+), 406 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java ---------------------------------------------------------------------- diff --git a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java index 6236542..94091b2 100644 --- a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java +++ b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java @@ -29,6 +29,7 @@ import org.apache.calcite.rel.RelCollations; import org.apache.calcite.rel.RelFieldCollation; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.core.Sort; import org.apache.calcite.rel.logical.LogicalFilter; import org.apache.calcite.rel.logical.LogicalProject; @@ -100,7 +101,8 @@ public class CassandraRules { <R extends RelNode> CassandraConverterRule(Class<R> clazz, Predicate<? super R> predicate, String description) { - super(clazz, predicate, Convention.NONE, CassandraRel.CONVENTION, description); + super(clazz, predicate, Convention.NONE, + CassandraRel.CONVENTION, RelFactories.LOGICAL_BUILDER, description); this.out = CassandraRel.CONVENTION; } } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java ---------------------------------------------------------------------- diff --git a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java index dae992d..abcf155 100644 --- a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java +++ b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java @@ -20,6 +20,10 @@ import org.apache.calcite.adapter.enumerable.EnumerableConvention; import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** * Rule to convert a relational expression from @@ -27,11 +31,18 @@ import org.apache.calcite.rel.convert.ConverterRule; */ public class CassandraToEnumerableConverterRule extends ConverterRule { public static final ConverterRule INSTANCE = - new CassandraToEnumerableConverterRule(); + new CassandraToEnumerableConverterRule(RelFactories.LOGICAL_BUILDER); - private CassandraToEnumerableConverterRule() { - super(RelNode.class, CassandraRel.CONVENTION, EnumerableConvention.INSTANCE, - "CassandraToEnumerableConverterRule"); + /** + * Creates a CassandraToEnumerableConverterRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public CassandraToEnumerableConverterRule( + RelBuilderFactory relBuilderFactory) { + super(RelNode.class, Predicates.<RelNode>alwaysTrue(), + CassandraRel.CONVENTION, EnumerableConvention.INSTANCE, + relBuilderFactory, "CassandraToEnumerableConverterRule"); } @Override public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java b/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java index 1047757..9575d4f 100644 --- a/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java @@ -20,17 +20,29 @@ import org.apache.calcite.adapter.enumerable.EnumerableConvention; import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** * Rule to convert a relational expression from * {@link ElasticsearchRel#CONVENTION} to {@link EnumerableConvention}. */ public class ElasticsearchToEnumerableConverterRule extends ConverterRule { - public static final ConverterRule INSTANCE = new ElasticsearchToEnumerableConverterRule(); + public static final ConverterRule INSTANCE = + new ElasticsearchToEnumerableConverterRule(RelFactories.LOGICAL_BUILDER); - private ElasticsearchToEnumerableConverterRule() { - super(RelNode.class, ElasticsearchRel.CONVENTION, EnumerableConvention.INSTANCE, - "ElasticsearchToEnumerableConverterRule"); + /** + * Creates an ElasticsearchToEnumerableConverterRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public ElasticsearchToEnumerableConverterRule( + RelBuilderFactory relBuilderFactory) { + super(RelNode.class, Predicates.<RelNode>alwaysTrue(), + ElasticsearchRel.CONVENTION, EnumerableConvention.INSTANCE, + relBuilderFactory, "ElasticsearchToEnumerableConverterRule"); } @Override public RelNode convert(RelNode relNode) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java index 2ad069e..820be91 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java @@ -30,9 +30,12 @@ import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterImpl; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.runtime.ArrayBindable; import org.apache.calcite.runtime.Bindable; +import org.apache.calcite.tools.RelBuilderFactory; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableMap; import java.util.List; @@ -86,11 +89,18 @@ public class EnumerableBindable extends ConverterImpl implements BindableRel { */ public static class EnumerableToBindableConverterRule extends ConverterRule { public static final EnumerableToBindableConverterRule INSTANCE = - new EnumerableToBindableConverterRule(); + new EnumerableToBindableConverterRule(RelFactories.LOGICAL_BUILDER); - private EnumerableToBindableConverterRule() { - super(EnumerableRel.class, EnumerableConvention.INSTANCE, - BindableConvention.INSTANCE, "EnumerableToBindableConverterRule"); + /** + * Creates an EnumerableToBindableConverterRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableToBindableConverterRule( + RelBuilderFactory relBuilderFactory) { + super(EnumerableRel.class, Predicates.<RelNode>alwaysTrue(), + EnumerableConvention.INSTANCE, BindableConvention.INSTANCE, + relBuilderFactory, "EnumerableToBindableConverterRule"); } @Override public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java index b94ff57..c85985b 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java @@ -20,6 +20,7 @@ import org.apache.calcite.plan.Convention; import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalCalc; /** @@ -31,7 +32,8 @@ class EnumerableCalcRule extends ConverterRule { // The predicate ensures that if there's a multiset, FarragoMultisetSplitter // will work on it first. super(LogicalCalc.class, RelOptUtil.CALC_PREDICATE, Convention.NONE, - EnumerableConvention.INSTANCE, "EnumerableCalcRule"); + EnumerableConvention.INSTANCE, RelFactories.LOGICAL_BUILDER, + "EnumerableCalcRule"); } public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java index eb08a27..9c7bc71 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java @@ -21,14 +21,23 @@ import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; import org.apache.calcite.rel.logical.LogicalCorrelate; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** * Implementation of nested loops over enumerable inputs. */ public class EnumerableCorrelateRule extends ConverterRule { - EnumerableCorrelateRule() { - super(LogicalCorrelate.class, Convention.NONE, - EnumerableConvention.INSTANCE, "EnumerableCorrelateRule"); + /** + * Creates an EnumerableCorrelateRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableCorrelateRule(RelBuilderFactory relBuilderFactory) { + super(LogicalCorrelate.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory, + "EnumerableCorrelateRule"); } public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java index 51fcdd4..65b80f1 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java @@ -20,6 +20,7 @@ import org.apache.calcite.plan.Convention; import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalFilter; /** @@ -29,7 +30,8 @@ import org.apache.calcite.rel.logical.LogicalFilter; class EnumerableFilterRule extends ConverterRule { EnumerableFilterRule() { super(LogicalFilter.class, RelOptUtil.FILTER_PREDICATE, Convention.NONE, - EnumerableConvention.INSTANCE, "EnumerableFilterRule"); + EnumerableConvention.INSTANCE, RelFactories.LOGICAL_BUILDER, + "EnumerableFilterRule"); } public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java index 9a61124..58d885d 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java @@ -23,12 +23,18 @@ import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexProgram; import org.apache.calcite.rex.RexProgramBuilder; +import org.apache.calcite.tools.RelBuilderFactory; /** Variant of {@link org.apache.calcite.rel.rules.FilterToCalcRule} for * {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */ public class EnumerableFilterToCalcRule extends RelOptRule { - EnumerableFilterToCalcRule() { - super(operand(EnumerableFilter.class, any())); + /** + * Creates an EnumerableFilterToCalcRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableFilterToCalcRule(RelBuilderFactory relBuilderFactory) { + super(operand(EnumerableFilter.class, any()), relBuilderFactory, null); } public void onMatch(RelOptRuleCall call) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java index 99996fa..5462004 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java @@ -19,6 +19,10 @@ package org.apache.calcite.adapter.enumerable; import org.apache.calcite.interpreter.BindableConvention; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** * Planner rule that converts {@link org.apache.calcite.interpreter.BindableRel} @@ -27,11 +31,17 @@ import org.apache.calcite.rel.convert.ConverterRule; */ public class EnumerableInterpreterRule extends ConverterRule { public static final EnumerableInterpreterRule INSTANCE = - new EnumerableInterpreterRule(); + new EnumerableInterpreterRule(RelFactories.LOGICAL_BUILDER); - private EnumerableInterpreterRule() { - super(RelNode.class, BindableConvention.INSTANCE, - EnumerableConvention.INSTANCE, "EnumerableInterpreterRule"); + /** + * Creates an EnumerableInterpreterRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableInterpreterRule(RelBuilderFactory relBuilderFactory) { + super(RelNode.class, Predicates.<RelNode>alwaysTrue(), + BindableConvention.INSTANCE, EnumerableConvention.INSTANCE, + relBuilderFactory, "EnumerableInterpreterRule"); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java index 3f998da..9c015a0 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java @@ -20,6 +20,7 @@ import org.apache.calcite.plan.Convention; import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalProject; /** @@ -29,7 +30,8 @@ import org.apache.calcite.rel.logical.LogicalProject; class EnumerableProjectRule extends ConverterRule { EnumerableProjectRule() { super(LogicalProject.class, RelOptUtil.PROJECT_PREDICATE, Convention.NONE, - EnumerableConvention.INSTANCE, "EnumerableProjectRule"); + EnumerableConvention.INSTANCE, RelFactories.LOGICAL_BUILDER, + "EnumerableProjectRule"); } public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java index 2e1a4a8..4d2b9c1 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java @@ -20,12 +20,18 @@ import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rex.RexProgram; +import org.apache.calcite.tools.RelBuilderFactory; /** Variant of {@link org.apache.calcite.rel.rules.ProjectToCalcRule} for * {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */ public class EnumerableProjectToCalcRule extends RelOptRule { - EnumerableProjectToCalcRule() { - super(operand(EnumerableProject.class, any())); + /** + * Creates an EnumerableProjectToCalcRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableProjectToCalcRule(RelBuilderFactory relBuilderFactory) { + super(operand(EnumerableProject.class, any()), relBuilderFactory, null); } public void onMatch(RelOptRuleCall call) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java index 5a4874f..7871638 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java @@ -17,6 +17,7 @@ package org.apache.calcite.adapter.enumerable; import org.apache.calcite.plan.RelOptRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.util.trace.CalciteTrace; import org.slf4j.Logger; @@ -40,7 +41,7 @@ public class EnumerableRules { new EnumerableSemiJoinRule(); public static final RelOptRule ENUMERABLE_CORRELATE_RULE = - new EnumerableCorrelateRule(); + new EnumerableCorrelateRule(RelFactories.LOGICAL_BUILDER); private EnumerableRules() { } @@ -73,10 +74,10 @@ public class EnumerableRules { new EnumerableMinusRule(); public static final EnumerableTableModifyRule ENUMERABLE_TABLE_MODIFICATION_RULE = - new EnumerableTableModifyRule(); + new EnumerableTableModifyRule(RelFactories.LOGICAL_BUILDER); public static final EnumerableValuesRule ENUMERABLE_VALUES_RULE = - new EnumerableValuesRule(); + new EnumerableValuesRule(RelFactories.LOGICAL_BUILDER); public static final EnumerableWindowRule ENUMERABLE_WINDOW_RULE = new EnumerableWindowRule(); @@ -88,16 +89,16 @@ public class EnumerableRules { new EnumerableUncollectRule(); public static final EnumerableFilterToCalcRule ENUMERABLE_FILTER_TO_CALC_RULE = - new EnumerableFilterToCalcRule(); + new EnumerableFilterToCalcRule(RelFactories.LOGICAL_BUILDER); public static final EnumerableProjectToCalcRule ENUMERABLE_PROJECT_TO_CALC_RULE = - new EnumerableProjectToCalcRule(); + new EnumerableProjectToCalcRule(RelFactories.LOGICAL_BUILDER); public static final EnumerableTableScanRule ENUMERABLE_TABLE_SCAN_RULE = - new EnumerableTableScanRule(); + new EnumerableTableScanRule(RelFactories.LOGICAL_BUILDER); public static final EnumerableTableFunctionScanRule ENUMERABLE_TABLE_FUNCTION_SCAN_RULE = - new EnumerableTableFunctionScanRule(); + new EnumerableTableFunctionScanRule(RelFactories.LOGICAL_BUILDER); } // End EnumerableRules.java http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java index 5d06c18..8a21b1e 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java @@ -20,16 +20,31 @@ import org.apache.calcite.plan.Convention; import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalTableFunctionScan; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** Planner rule that converts a * {@link org.apache.calcite.rel.logical.LogicalTableFunctionScan} * relational expression * {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */ public class EnumerableTableFunctionScanRule extends ConverterRule { + @Deprecated // to be removed before 2.0 public EnumerableTableFunctionScanRule() { - super(LogicalTableFunctionScan.class, Convention.NONE, - EnumerableConvention.INSTANCE, "EnumerableTableFunctionScanRule"); + this(RelFactories.LOGICAL_BUILDER); + } + + /** + * Creates an EnumerableTableFunctionScanRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableTableFunctionScanRule(RelBuilderFactory relBuilderFactory) { + super(LogicalTableFunctionScan.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory, + "EnumerableTableFunctionScanRule"); } @Override public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java index 321115f..87eaefe 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java @@ -22,15 +22,24 @@ import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; import org.apache.calcite.rel.logical.LogicalTableModify; import org.apache.calcite.schema.ModifiableTable; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** Planner rule that converts a * {@link org.apache.calcite.rel.logical.LogicalTableModify} * relational expression * {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */ public class EnumerableTableModifyRule extends ConverterRule { - EnumerableTableModifyRule() { - super(LogicalTableModify.class, Convention.NONE, - EnumerableConvention.INSTANCE, "EnumerableTableModificationRule"); + /** + * Creates an EnumerableTableModifyRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableTableModifyRule(RelBuilderFactory relBuilderFactory) { + super(LogicalTableModify.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory, + "EnumerableTableModificationRule"); } @Override public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java index 416c01a..adcfa09 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java @@ -21,17 +21,33 @@ import org.apache.calcite.plan.Convention; import org.apache.calcite.plan.RelOptTable; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalTableScan; import org.apache.calcite.schema.Table; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** Planner rule that converts a * {@link org.apache.calcite.rel.logical.LogicalTableFunctionScan} * relational expression * {@link EnumerableConvention enumerable calling convention}. */ public class EnumerableTableScanRule extends ConverterRule { + + @Deprecated // to be removed before 2.0 public EnumerableTableScanRule() { - super(LogicalTableScan.class, Convention.NONE, - EnumerableConvention.INSTANCE, "EnumerableTableScanRule"); + this(RelFactories.LOGICAL_BUILDER); + } + + /** + * Creates an EnumerableTableScanRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableTableScanRule(RelBuilderFactory relBuilderFactory) { + super(LogicalTableScan.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory, + "EnumerableTableScanRule"); } @Override public RelNode convert(RelNode rel) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java index 6e14bcc..b401598 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java @@ -20,14 +20,23 @@ import org.apache.calcite.plan.Convention; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; import org.apache.calcite.rel.logical.LogicalValues; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** Planner rule that converts a * {@link org.apache.calcite.rel.logical.LogicalValues} * relational expression * {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */ public class EnumerableValuesRule extends ConverterRule { - EnumerableValuesRule() { - super(LogicalValues.class, Convention.NONE, EnumerableConvention.INSTANCE, + /** + * Creates an EnumerableValuesRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public EnumerableValuesRule(RelBuilderFactory relBuilderFactory) { + super(LogicalValues.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory, "EnumerableValuesRule"); } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java index c4e4c82..53f5012 100644 --- a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java +++ b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java @@ -42,6 +42,7 @@ import org.apache.calcite.rel.core.Join; import org.apache.calcite.rel.core.JoinRelType; import org.apache.calcite.rel.core.Minus; import org.apache.calcite.rel.core.Project; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.core.Sort; import org.apache.calcite.rel.core.TableModify; import org.apache.calcite.rel.core.Union; @@ -94,7 +95,7 @@ public class JdbcRules { public static List<RelOptRule> rules(JdbcConvention out) { return ImmutableList.<RelOptRule>of( - new JdbcToEnumerableConverterRule(out), + new JdbcToEnumerableConverterRule(out, RelFactories.LOGICAL_BUILDER), new JdbcJoinRule(out), new JdbcCalcRule(out), new JdbcProjectRule(out), http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java index a212c3b..e5eec50 100644 --- a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java +++ b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java @@ -20,6 +20,9 @@ import org.apache.calcite.adapter.enumerable.EnumerableConvention; import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** * Rule to convert a relational expression from @@ -27,8 +30,11 @@ import org.apache.calcite.rel.convert.ConverterRule; * {@link EnumerableConvention}. */ public class JdbcToEnumerableConverterRule extends ConverterRule { - JdbcToEnumerableConverterRule(JdbcConvention out) { - super(RelNode.class, out, EnumerableConvention.INSTANCE, + /** Creates a JdbcToEnumerableConverterRule. */ + public JdbcToEnumerableConverterRule(JdbcConvention out, + RelBuilderFactory relBuilderFactory) { + super(RelNode.class, Predicates.<RelNode>alwaysTrue(), out, + EnumerableConvention.INSTANCE, relBuilderFactory, "JdbcToEnumerableConverterRule:" + out); } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/interpreter/Bindables.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/interpreter/Bindables.java b/core/src/main/java/org/apache/calcite/interpreter/Bindables.java index b8b0b6f..c5287eb 100644 --- a/core/src/main/java/org/apache/calcite/interpreter/Bindables.java +++ b/core/src/main/java/org/apache/calcite/interpreter/Bindables.java @@ -42,6 +42,7 @@ import org.apache.calcite.rel.core.Filter; import org.apache.calcite.rel.core.Join; import org.apache.calcite.rel.core.JoinRelType; import org.apache.calcite.rel.core.Project; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.core.Sort; import org.apache.calcite.rel.core.TableScan; import org.apache.calcite.rel.core.Union; @@ -66,10 +67,12 @@ import org.apache.calcite.schema.FilterableTable; import org.apache.calcite.schema.ProjectableFilterableTable; import org.apache.calcite.schema.ScannableTable; import org.apache.calcite.schema.Table; +import org.apache.calcite.tools.RelBuilderFactory; import org.apache.calcite.util.ImmutableBitSet; import org.apache.calcite.util.ImmutableIntList; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; @@ -83,31 +86,31 @@ public class Bindables { private Bindables() {} public static final RelOptRule BINDABLE_TABLE_SCAN_RULE = - new BindableTableScanRule(); + new BindableTableScanRule(RelFactories.LOGICAL_BUILDER); public static final RelOptRule BINDABLE_FILTER_RULE = - new BindableFilterRule(); + new BindableFilterRule(RelFactories.LOGICAL_BUILDER); public static final RelOptRule BINDABLE_PROJECT_RULE = - new BindableProjectRule(); + new BindableProjectRule(RelFactories.LOGICAL_BUILDER); public static final RelOptRule BINDABLE_SORT_RULE = - new BindableSortRule(); + new BindableSortRule(RelFactories.LOGICAL_BUILDER); public static final RelOptRule BINDABLE_JOIN_RULE = - new BindableJoinRule(); + new BindableJoinRule(RelFactories.LOGICAL_BUILDER); public static final RelOptRule BINDABLE_UNION_RULE = - new BindableUnionRule(); + new BindableUnionRule(RelFactories.LOGICAL_BUILDER); public static final RelOptRule BINDABLE_VALUES_RULE = - new BindableValuesRule(); + new BindableValuesRule(RelFactories.LOGICAL_BUILDER); public static final RelOptRule BINDABLE_AGGREGATE_RULE = - new BindableAggregateRule(); + new BindableAggregateRule(RelFactories.LOGICAL_BUILDER); public static final RelOptRule BINDABLE_WINDOW_RULE = - new BindableWindowRule(); + new BindableWindowRule(RelFactories.LOGICAL_BUILDER); /** All rules that convert logical relational expression to bindable. */ public static final ImmutableList<RelOptRule> RULES = @@ -136,9 +139,15 @@ public class Bindables { /** Rule that converts a {@link org.apache.calcite.rel.core.TableScan} * to bindable convention. */ - private static class BindableTableScanRule extends RelOptRule { - private BindableTableScanRule() { - super(operand(LogicalTableScan.class, none())); + public static class BindableTableScanRule extends RelOptRule { + + /** + * Creates a BindableTableScanRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableTableScanRule(RelBuilderFactory relBuilderFactory) { + super(operand(LogicalTableScan.class, none()), relBuilderFactory, null); } @Override public void onMatch(RelOptRuleCall call) { @@ -251,10 +260,16 @@ public class Bindables { } /** Rule that converts a {@link Filter} to bindable convention. */ - private static class BindableFilterRule extends ConverterRule { - private BindableFilterRule() { + public static class BindableFilterRule extends ConverterRule { + + /** + * Creates a BindableFilterRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableFilterRule(RelBuilderFactory relBuilderFactory) { super(LogicalFilter.class, RelOptUtil.FILTER_PREDICATE, Convention.NONE, - BindableConvention.INSTANCE, "BindableFilterRule"); + BindableConvention.INSTANCE, relBuilderFactory, "BindableFilterRule"); } public RelNode convert(RelNode rel) { @@ -314,10 +329,17 @@ public class Bindables { * Rule to convert a {@link org.apache.calcite.rel.logical.LogicalProject} * to a {@link BindableProject}. */ - private static class BindableProjectRule extends ConverterRule { - private BindableProjectRule() { + public static class BindableProjectRule extends ConverterRule { + + /** + * Creates a BindableProjectRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableProjectRule(RelBuilderFactory relBuilderFactory) { super(LogicalProject.class, RelOptUtil.PROJECT_PREDICATE, Convention.NONE, - BindableConvention.INSTANCE, "BindableProjectRule"); + BindableConvention.INSTANCE, relBuilderFactory, + "BindableProjectRule"); } public RelNode convert(RelNode rel) { @@ -364,10 +386,16 @@ public class Bindables { * Rule to convert an {@link org.apache.calcite.rel.core.Sort} to a * {@link org.apache.calcite.interpreter.Bindables.BindableSort}. */ - private static class BindableSortRule extends ConverterRule { - private BindableSortRule() { - super(Sort.class, Convention.NONE, BindableConvention.INSTANCE, - "BindableSortRule"); + public static class BindableSortRule extends ConverterRule { + + /** + * Creates a BindableSortRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableSortRule(RelBuilderFactory relBuilderFactory) { + super(Sort.class, Predicates.<RelNode>alwaysTrue(), Convention.NONE, + BindableConvention.INSTANCE, relBuilderFactory, "BindableSortRule"); } public RelNode convert(RelNode rel) { @@ -414,9 +442,16 @@ public class Bindables { * Rule to convert a {@link org.apache.calcite.rel.logical.LogicalJoin} * to a {@link BindableJoin}. */ - private static class BindableJoinRule extends ConverterRule { - private BindableJoinRule() { - super(LogicalJoin.class, Convention.NONE, BindableConvention.INSTANCE, + public static class BindableJoinRule extends ConverterRule { + + /** + * Creates a BindableJoinRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableJoinRule(RelBuilderFactory relBuilderFactory) { + super(LogicalJoin.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory, "BindableJoinRule"); } @@ -477,9 +512,16 @@ public class Bindables { * Rule to convert an {@link org.apache.calcite.rel.logical.LogicalUnion} * to a {@link BindableUnion}. */ - private static class BindableUnionRule extends ConverterRule { - private BindableUnionRule() { - super(LogicalUnion.class, Convention.NONE, BindableConvention.INSTANCE, + public static class BindableUnionRule extends ConverterRule { + + /** + * Creates a BindableUnionRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableUnionRule(RelBuilderFactory relBuilderFactory) { + super(LogicalUnion.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory, "BindableUnionRule"); } @@ -545,9 +587,16 @@ public class Bindables { } /** Rule that converts a {@link Values} to bindable convention. */ - private static class BindableValuesRule extends ConverterRule { - private BindableValuesRule() { - super(LogicalValues.class, Convention.NONE, BindableConvention.INSTANCE, + public static class BindableValuesRule extends ConverterRule { + + /** + * Creates a BindableValuesRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableValuesRule(RelBuilderFactory relBuilderFactory) { + super(LogicalValues.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory, "BindableValuesRule"); } @@ -616,10 +665,17 @@ public class Bindables { } /** Rule that converts an {@link Aggregate} to bindable convention. */ - private static class BindableAggregateRule extends ConverterRule { - private BindableAggregateRule() { - super(LogicalAggregate.class, Convention.NONE, - BindableConvention.INSTANCE, "BindableAggregateRule"); + public static class BindableAggregateRule extends ConverterRule { + + /** + * Creates a BindableAggregateRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableAggregateRule(RelBuilderFactory relBuilderFactory) { + super(LogicalAggregate.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory, + "BindableAggregateRule"); } public RelNode convert(RelNode rel) { @@ -674,9 +730,16 @@ public class Bindables { * Rule to convert a {@link org.apache.calcite.rel.logical.LogicalWindow} * to a {@link BindableWindow}. */ - private static class BindableWindowRule extends ConverterRule { - private BindableWindowRule() { - super(LogicalWindow.class, Convention.NONE, BindableConvention.INSTANCE, + public static class BindableWindowRule extends ConverterRule { + + /** + * Creates a BindableWindowRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public BindableWindowRule(RelBuilderFactory relBuilderFactory) { + super(LogicalWindow.class, Predicates.<RelNode>alwaysTrue(), + Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory, "BindableWindowRule"); } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java b/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java index ab41cac..e352ca1 100644 --- a/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java +++ b/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java @@ -20,6 +20,10 @@ import org.apache.calcite.plan.Convention; import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; +import org.apache.calcite.rel.core.RelFactories; +import org.apache.calcite.tools.RelBuilderFactory; + +import com.google.common.base.Predicates; /** * Rule to convert a relational expression from @@ -28,10 +32,16 @@ import org.apache.calcite.rel.convert.ConverterRule; */ public class NoneToBindableConverterRule extends ConverterRule { public static final ConverterRule INSTANCE = - new NoneToBindableConverterRule(); + new NoneToBindableConverterRule(RelFactories.LOGICAL_BUILDER); - private NoneToBindableConverterRule() { - super(RelNode.class, Convention.NONE, BindableConvention.INSTANCE, + /** + * Creates a NoneToBindableConverterRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public NoneToBindableConverterRule(RelBuilderFactory relBuilderFactory) { + super(RelNode.class, Predicates.<RelNode>alwaysTrue(), Convention.NONE, + BindableConvention.INSTANCE, relBuilderFactory, "NoneToBindableConverterRule"); } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java index 7129ccb..d18527b 100644 --- a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java +++ b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java @@ -1545,12 +1545,18 @@ public class SubstitutionVisitor { }; public static final FilterOnProjectRule INSTANCE = - new FilterOnProjectRule(); + new FilterOnProjectRule(RelFactories.LOGICAL_BUILDER); - private FilterOnProjectRule() { + /** + * Creates a FilterOnProjectRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public FilterOnProjectRule(RelBuilderFactory relBuilderFactory) { super( operand(LogicalFilter.class, null, PREDICATE, - some(operand(LogicalProject.class, any())))); + some(operand(LogicalProject.class, any()))), + relBuilderFactory, null); } public void onMatch(RelOptRuleCall call) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java b/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java index 33e4056..410ef27 100644 --- a/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java +++ b/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java @@ -33,6 +33,7 @@ import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.Converter; import org.apache.calcite.rel.convert.ConverterRule; import org.apache.calcite.rel.convert.TraitMatchingRule; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.metadata.RelMetadataProvider; import org.apache.calcite.rel.metadata.RelMetadataQuery; import org.apache.calcite.util.Pair; @@ -307,7 +308,8 @@ public class HepPlanner extends AbstractRelOptPlanner { instruction.ruleSet.add(converter); if (!instruction.guaranteed) { // Add a TraitMatchingRule to work bottom-up - instruction.ruleSet.add(new TraitMatchingRule(converter)); + instruction.ruleSet.add( + new TraitMatchingRule(converter, RelFactories.LOGICAL_BUILDER)); } } } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java b/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java index 42604c9..5c36ad1 100644 --- a/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java +++ b/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java @@ -27,7 +27,9 @@ import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.RelWriter; import org.apache.calcite.rel.convert.ConverterImpl; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.metadata.RelMetadataQuery; +import org.apache.calcite.tools.RelBuilderFactory; import java.util.List; @@ -100,13 +102,15 @@ public class AbstractConverter extends ConverterImpl { */ public static class ExpandConversionRule extends RelOptRule { public static final ExpandConversionRule INSTANCE = - new ExpandConversionRule(); + new ExpandConversionRule(RelFactories.LOGICAL_BUILDER); /** * Creates an ExpandConversionRule. + * + * @param relBuilderFactory Builder for relational expressions */ - private ExpandConversionRule() { - super(operand(AbstractConverter.class, any())); + public ExpandConversionRule(RelBuilderFactory relBuilderFactory) { + super(operand(AbstractConverter.class, any()), relBuilderFactory, null); } public void onMatch(RelOptRuleCall call) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java b/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java index 7761488..ef8d629 100644 --- a/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java +++ b/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java @@ -22,6 +22,8 @@ import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.plan.RelTrait; import org.apache.calcite.plan.RelTraitDef; import org.apache.calcite.rel.RelNode; +import org.apache.calcite.rel.core.RelFactories; +import org.apache.calcite.tools.RelBuilderFactory; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; @@ -49,7 +51,15 @@ public abstract class ConverterRule extends RelOptRule { */ public ConverterRule(Class<? extends RelNode> clazz, RelTrait in, RelTrait out, String description) { - this(clazz, Predicates.<RelNode>alwaysTrue(), in, out, description); + this(clazz, Predicates.<RelNode>alwaysTrue(), in, out, + RelFactories.LOGICAL_BUILDER, description); + } + + @Deprecated // to be removed before 2.0 + public <R extends RelNode> ConverterRule(Class<R> clazz, + Predicate<? super R> predicate, RelTrait in, RelTrait out, + String description) { + this(clazz, predicate, in, out, RelFactories.LOGICAL_BUILDER, description); } /** @@ -59,12 +69,14 @@ public abstract class ConverterRule extends RelOptRule { * @param predicate Predicate on the relational expression * @param in Trait of relational expression to consider converting * @param out Trait which is converted to + * @param relBuilderFactory Builder for relational expressions * @param description Description of rule */ public <R extends RelNode> ConverterRule(Class<R> clazz, Predicate<? super R> predicate, RelTrait in, RelTrait out, - String description) { + RelBuilderFactory relBuilderFactory, String description) { super(convertOperand(clazz, predicate, in), + relBuilderFactory, description == null ? "ConverterRule<in=" + in + ",out=" + out + ">" : description); http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java b/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java index 63f621c..0fb14c9 100644 --- a/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java +++ b/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java @@ -21,6 +21,8 @@ import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.plan.RelOptRuleOperandChildPolicy; import org.apache.calcite.rel.RelNode; +import org.apache.calcite.rel.core.RelFactories; +import org.apache.calcite.tools.RelBuilderFactory; /** * TraitMatchingRule adapts a converter rule, restricting it to fire only when @@ -35,17 +37,25 @@ public class TraitMatchingRule extends RelOptRule { //~ Constructors ----------------------------------------------------------- + @Deprecated // to be removed before 2.0 + public TraitMatchingRule(ConverterRule converterRule) { + this(converterRule, RelFactories.LOGICAL_BUILDER); + } + /** - * Creates a new TraitMatchingRule. + * Creates a TraitMatchingRule. * - * @param converterRule rule to be restricted; rule must take a single - * operand expecting a single input + * @param converterRule Rule to be restricted; rule must take a single + * operand expecting a single input + * @param relBuilderFactory Builder for relational expressions */ - public TraitMatchingRule(ConverterRule converterRule) { + public TraitMatchingRule(ConverterRule converterRule, + RelBuilderFactory relBuilderFactory) { super( operand( converterRule.getOperand().getMatchedClass(), operand(RelNode.class, any())), + relBuilderFactory, "TraitMatchingRule: " + converterRule); assert converterRule.getOperand().childPolicy == RelOptRuleOperandChildPolicy.ANY; @@ -54,8 +64,7 @@ public class TraitMatchingRule extends RelOptRule { //~ Methods ---------------------------------------------------------------- - // implement RelOptRule - public Convention getOutConvention() { + @Override public Convention getOutConvention() { return converter.getOutConvention(); } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java index abe17bc..68a047d 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java @@ -66,7 +66,8 @@ public class AggregateFilterTransposeRule extends RelOptRule { RelFactories.LOGICAL_BUILDER); } - protected AggregateFilterTransposeRule(RelOptRuleOperand operand, + /** Creates an AggregateFilterTransposeRule. */ + public AggregateFilterTransposeRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory) { super(operand, relBuilderFactory, null); } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java index 746e1f4..957af1e 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java @@ -89,7 +89,8 @@ public class AggregateReduceFunctionsRule extends RelOptRule { //~ Constructors ----------------------------------------------------------- - protected AggregateReduceFunctionsRule(RelOptRuleOperand operand, + /** Creates an AggregateReduceFunctionsRule. */ + public AggregateReduceFunctionsRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory) { super(operand, relBuilderFactory, null); } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java index 46a5826..11a6d1c 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java @@ -20,10 +20,12 @@ import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.Aggregate; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalAggregate; import org.apache.calcite.rel.metadata.RelMetadataQuery; import org.apache.calcite.runtime.SqlFunctions; import org.apache.calcite.tools.RelBuilder; +import org.apache.calcite.tools.RelBuilderFactory; /** * Planner rule that removes @@ -34,14 +36,21 @@ import org.apache.calcite.tools.RelBuilder; */ public class AggregateRemoveRule extends RelOptRule { public static final AggregateRemoveRule INSTANCE = - new AggregateRemoveRule(LogicalAggregate.class); + new AggregateRemoveRule(LogicalAggregate.class, + RelFactories.LOGICAL_BUILDER); //~ Constructors ----------------------------------------------------------- + @Deprecated // to be removed before 2.0 + public AggregateRemoveRule(Class<? extends Aggregate> aggregateClass) { + this(aggregateClass, RelFactories.LOGICAL_BUILDER); + } + /** - * Creates a AggregateRemoveRule. + * Creates an AggregateRemoveRule. */ - public AggregateRemoveRule(Class<? extends Aggregate> aggregateClass) { + public AggregateRemoveRule(Class<? extends Aggregate> aggregateClass, + RelBuilderFactory relBuilderFactory) { // REVIEW jvs 14-Mar-2006: We have to explicitly mention the child here // to make sure the rule re-fires after the child changes (e.g. via // ProjectRemoveRule), since that may change our information @@ -50,7 +59,8 @@ public class AggregateRemoveRule extends RelOptRule { // to the child here. super( operand(aggregateClass, - operand(RelNode.class, any()))); + operand(RelNode.class, any())), + relBuilderFactory, null); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java index 51ae97f..22ee628 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java @@ -33,12 +33,14 @@ import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.Aggregate; import org.apache.calcite.rel.core.AggregateCall; import org.apache.calcite.rel.core.Project; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.metadata.RelMetadataQuery; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.schema.Table; import org.apache.calcite.schema.impl.StarTable; import org.apache.calcite.sql.SqlAggFunction; import org.apache.calcite.tools.RelBuilder; +import org.apache.calcite.tools.RelBuilderFactory; import org.apache.calcite.util.ImmutableBitSet; import org.apache.calcite.util.Pair; import org.apache.calcite.util.mapping.AbstractSourceMapping; @@ -60,6 +62,7 @@ public class AggregateStarTableRule extends RelOptRule { new AggregateStarTableRule( operand(Aggregate.class, null, Aggregate.IS_SIMPLE, some(operand(StarTable.StarTableScan.class, none()))), + RelFactories.LOGICAL_BUILDER, "AggregateStarTableRule"); public static final AggregateStarTableRule INSTANCE2 = @@ -67,6 +70,7 @@ public class AggregateStarTableRule extends RelOptRule { operand(Aggregate.class, null, Aggregate.IS_SIMPLE, operand(Project.class, operand(StarTable.StarTableScan.class, none()))), + RelFactories.LOGICAL_BUILDER, "AggregateStarTableRule:project") { @Override public void onMatch(RelOptRuleCall call) { final Aggregate aggregate = call.rel(0); @@ -89,9 +93,16 @@ public class AggregateStarTableRule extends RelOptRule { } }; - private AggregateStarTableRule(RelOptRuleOperand operand, - String description) { - super(operand, description); + /** + * Creates an AggregateStarTableRule. + * + * @param operand root operand, must not be null + * @param description Description, or null to guess description + * @param relBuilderFactory Builder for relational expressions + */ + public AggregateStarTableRule(RelOptRuleOperand operand, + RelBuilderFactory relBuilderFactory, String description) { + super(operand, relBuilderFactory, description); } @Override public void onMatch(RelOptRuleCall call) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java index 654a86a..db31937 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java @@ -20,10 +20,12 @@ import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.core.Aggregate; import org.apache.calcite.rel.core.AggregateCall; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.core.Values; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexLiteral; import org.apache.calcite.tools.RelBuilder; +import org.apache.calcite.tools.RelBuilderFactory; import org.apache.calcite.util.Util; import com.google.common.base.Predicates; @@ -52,12 +54,19 @@ import java.util.List; * value, and each group will consist of at least one row. */ public class AggregateValuesRule extends RelOptRule { - public static final AggregateValuesRule INSTANCE = new AggregateValuesRule(); + public static final AggregateValuesRule INSTANCE = + new AggregateValuesRule(RelFactories.LOGICAL_BUILDER); - private AggregateValuesRule() { + /** + * Creates an AggregateValuesRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public AggregateValuesRule(RelBuilderFactory relBuilderFactory) { super( operand(Aggregate.class, null, Predicates.not(Aggregate.IS_NOT_GRAND_TOTAL), - operand(Values.class, null, Values.IS_EMPTY, none()))); + operand(Values.class, null, Values.IS_EMPTY, none())), + relBuilderFactory, null); } @Override public void onMatch(RelOptRuleCall call) { http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java index d218553..0173c3f 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java @@ -19,9 +19,11 @@ package org.apache.calcite.rel.rules; import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.core.Calc; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rex.RexOver; import org.apache.calcite.rex.RexProgram; import org.apache.calcite.rex.RexProgramBuilder; +import org.apache.calcite.tools.RelBuilderFactory; /** * Planner rule that merges a @@ -36,15 +38,22 @@ import org.apache.calcite.rex.RexProgramBuilder; public class CalcMergeRule extends RelOptRule { //~ Static fields/initializers --------------------------------------------- - public static final CalcMergeRule INSTANCE = new CalcMergeRule(); + public static final CalcMergeRule INSTANCE = + new CalcMergeRule(RelFactories.LOGICAL_BUILDER); //~ Constructors ----------------------------------------------------------- - private CalcMergeRule() { + /** + * Creates a CalcMergeRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public CalcMergeRule(RelBuilderFactory relBuilderFactory) { super( operand( Calc.class, - operand(Calc.class, any()))); + operand(Calc.class, any())), + relBuilderFactory, null); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java index cbbd011..0a8869c 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java @@ -19,8 +19,10 @@ package org.apache.calcite.rel.rules; import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.RelNode; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalCalc; import org.apache.calcite.rex.RexProgram; +import org.apache.calcite.tools.RelBuilderFactory; /** * Planner rule that removes a trivial @@ -36,12 +38,17 @@ public class CalcRemoveRule extends RelOptRule { //~ Static fields/initializers --------------------------------------------- public static final CalcRemoveRule INSTANCE = - new CalcRemoveRule(); + new CalcRemoveRule(RelFactories.LOGICAL_BUILDER); //~ Constructors ----------------------------------------------------------- - private CalcRemoveRule() { - super(operand(LogicalCalc.class, any())); + /** + * Creates a CalcRemoveRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public CalcRemoveRule(RelBuilderFactory relBuilderFactory) { + super(operand(LogicalCalc.class, any()), relBuilderFactory, null); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java index 359ade9..01b7c91 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java @@ -42,7 +42,12 @@ public class CalcSplitRule extends RelOptRule { public static final CalcSplitRule INSTANCE = new CalcSplitRule(RelFactories.LOGICAL_BUILDER); - private CalcSplitRule(RelBuilderFactory relBuilderFactory) { + /** + * Creates a CalcSplitRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public CalcSplitRule(RelBuilderFactory relBuilderFactory) { super(operand(Calc.class, any()), relBuilderFactory, null); } http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java index 5f489b9..c6e839f 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java @@ -21,13 +21,15 @@ import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.rel.RelNode; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.type.RelDataType; +import org.apache.calcite.tools.RelBuilderFactory; import java.util.ArrayList; import java.util.List; /** - * CoerceInputsRule precasts inputs to a particular type. This can be used to + * CoerceInputsRule pre-casts inputs to a particular type. This can be used to * assist operator implementations which impose requirements on their input * types. */ @@ -40,18 +42,26 @@ public class CoerceInputsRule extends RelOptRule { //~ Constructors ----------------------------------------------------------- - /** - * Constructs the rule. - * - * @param consumerRelClass the RelNode class which will consume the inputs - * @param coerceNames if true, coerce names and types; if false, coerce - * type only - */ + @Deprecated // to be removed before 2.0 public CoerceInputsRule( Class<? extends RelNode> consumerRelClass, boolean coerceNames) { + this(consumerRelClass, coerceNames, RelFactories.LOGICAL_BUILDER); + } + + /** + * Creates a CoerceInputsRule. + * + * @param consumerRelClass Class of RelNode that will consume the inputs + * @param coerceNames If true, coerce names and types; if false, coerce + * type only + * @param relBuilderFactory Builder for relational expressions + */ + public CoerceInputsRule(Class<? extends RelNode> consumerRelClass, + boolean coerceNames, RelBuilderFactory relBuilderFactory) { super( operand(consumerRelClass, any()), + relBuilderFactory, "CoerceInputsRule:" + consumerRelClass.getName()); this.consumerRelClass = consumerRelClass; this.coerceNames = coerceNames; @@ -59,12 +69,10 @@ public class CoerceInputsRule extends RelOptRule { //~ Methods ---------------------------------------------------------------- - // implement RelOptRule - public Convention getOutConvention() { + @Override public Convention getOutConvention() { return Convention.NONE; } - // implement RelOptRule public void onMatch(RelOptRuleCall call) { RelNode consumerRel = call.rel(0); if (consumerRel.getClass() != consumerRelClass) { @@ -72,7 +80,7 @@ public class CoerceInputsRule extends RelOptRule { return; } List<RelNode> inputs = consumerRel.getInputs(); - List<RelNode> newInputs = new ArrayList<RelNode>(inputs); + List<RelNode> newInputs = new ArrayList<>(inputs); boolean coerce = false; for (int i = 0; i < inputs.size(); ++i) { RelDataType expectedType = consumerRel.getExpectedInputRowType(i); http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java index 7f5191b..b422763 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java @@ -19,11 +19,13 @@ package org.apache.calcite.rel.rules; import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.core.Filter; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalCalc; import org.apache.calcite.rel.logical.LogicalFilter; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexProgram; import org.apache.calcite.rex.RexProgramBuilder; +import org.apache.calcite.tools.RelBuilderFactory; /** * Planner rule that merges a @@ -38,15 +40,21 @@ public class FilterCalcMergeRule extends RelOptRule { //~ Static fields/initializers --------------------------------------------- public static final FilterCalcMergeRule INSTANCE = - new FilterCalcMergeRule(); + new FilterCalcMergeRule(RelFactories.LOGICAL_BUILDER); //~ Constructors ----------------------------------------------------------- - private FilterCalcMergeRule() { + /** + * Creates a FilterCalcMergeRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public FilterCalcMergeRule(RelBuilderFactory relBuilderFactory) { super( operand( Filter.class, - operand(LogicalCalc.class, any()))); + operand(LogicalCalc.class, any())), + relBuilderFactory, null); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java index fe446d1..73f24aa 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java @@ -18,7 +18,9 @@ package org.apache.calcite.rel.rules; import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalFilter; +import org.apache.calcite.tools.RelBuilderFactory; /** * Planner rule that merges a @@ -30,17 +32,18 @@ import org.apache.calcite.rel.logical.LogicalFilter; */ public class FilterMultiJoinMergeRule extends RelOptRule { public static final FilterMultiJoinMergeRule INSTANCE = - new FilterMultiJoinMergeRule(); + new FilterMultiJoinMergeRule(RelFactories.LOGICAL_BUILDER); //~ Constructors ----------------------------------------------------------- /** * Creates a FilterMultiJoinMergeRule. */ - private FilterMultiJoinMergeRule() { + public FilterMultiJoinMergeRule(RelBuilderFactory relBuilderFactory) { super( operand(LogicalFilter.class, - operand(MultiJoin.class, any()))); + operand(MultiJoin.class, any())), + relBuilderFactory, null); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java index adfb14d..5739ed9 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java @@ -28,6 +28,7 @@ import org.apache.calcite.rex.RexNode; import org.apache.calcite.rex.RexShuttle; import org.apache.calcite.rex.RexUtil; import org.apache.calcite.sql.fun.SqlStdOperatorTable; +import org.apache.calcite.tools.RelBuilderFactory; /** * Planner rule that replaces {@code IS NOT DISTINCT FROM} @@ -41,12 +42,18 @@ public final class FilterRemoveIsNotDistinctFromRule extends RelOptRule { /** The singleton. */ public static final FilterRemoveIsNotDistinctFromRule INSTANCE = - new FilterRemoveIsNotDistinctFromRule(); + new FilterRemoveIsNotDistinctFromRule(RelFactories.LOGICAL_BUILDER); //~ Constructors ----------------------------------------------------------- - private FilterRemoveIsNotDistinctFromRule() { - super(operand(LogicalFilter.class, any())); + /** + * Creates a FilterRemoveIsNotDistinctFromRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public FilterRemoveIsNotDistinctFromRule( + RelBuilderFactory relBuilderFactory) { + super(operand(LogicalFilter.class, any()), relBuilderFactory, null); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java index 3f517ab..a151487 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java @@ -21,12 +21,14 @@ import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.rel.RelNode; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalFilter; import org.apache.calcite.rel.logical.LogicalTableFunctionScan; import org.apache.calcite.rel.metadata.RelColumnMapping; import org.apache.calcite.rel.type.RelDataTypeField; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexNode; +import org.apache.calcite.tools.RelBuilderFactory; import java.util.ArrayList; import java.util.List; @@ -39,17 +41,18 @@ import java.util.Set; */ public class FilterTableFunctionTransposeRule extends RelOptRule { public static final FilterTableFunctionTransposeRule INSTANCE = - new FilterTableFunctionTransposeRule(); + new FilterTableFunctionTransposeRule(RelFactories.LOGICAL_BUILDER); //~ Constructors ----------------------------------------------------------- /** * Creates a FilterTableFunctionTransposeRule. */ - private FilterTableFunctionTransposeRule() { + public FilterTableFunctionTransposeRule(RelBuilderFactory relBuilderFactory) { super( operand(LogicalFilter.class, - operand(LogicalTableFunctionScan.class, any()))); + operand(LogicalTableFunctionScan.class, any())), + relBuilderFactory, null); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java index d090d79..1a52eec 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java @@ -23,12 +23,14 @@ import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.plan.RelOptRuleOperand; import org.apache.calcite.plan.RelOptTable; import org.apache.calcite.rel.core.Filter; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.core.TableScan; import org.apache.calcite.rex.RexNode; import org.apache.calcite.rex.RexUtil; import org.apache.calcite.runtime.PredicateImpl; import org.apache.calcite.schema.FilterableTable; import org.apache.calcite.schema.ProjectableFilterableTable; +import org.apache.calcite.tools.RelBuilderFactory; import org.apache.calcite.util.ImmutableIntList; import org.apache.calcite.util.mapping.Mapping; import org.apache.calcite.util.mapping.Mappings; @@ -66,7 +68,8 @@ public abstract class FilterTableScanRule extends RelOptRule { new FilterTableScanRule( operand(Filter.class, operand(TableScan.class, null, PREDICATE, none())), - "FilterTableRule") { + RelFactories.LOGICAL_BUILDER, + "FilterTableScanRule") { public void onMatch(RelOptRuleCall call) { final Filter filter = call.rel(0); final TableScan scan = call.rel(1); @@ -80,7 +83,8 @@ public abstract class FilterTableScanRule extends RelOptRule { operand(Filter.class, operand(EnumerableInterpreter.class, operand(TableScan.class, null, PREDICATE, none()))), - "FilterTableRule:interpreter") { + RelFactories.LOGICAL_BUILDER, + "FilterTableScanRule:interpreter") { public void onMatch(RelOptRuleCall call) { final Filter filter = call.rel(0); final TableScan scan = call.rel(2); @@ -90,9 +94,15 @@ public abstract class FilterTableScanRule extends RelOptRule { //~ Constructors ----------------------------------------------------------- - /** Creates a FilterTableRule. */ + @Deprecated // to be removed before 2.0 protected FilterTableScanRule(RelOptRuleOperand operand, String description) { - super(operand, description); + this(operand, RelFactories.LOGICAL_BUILDER, description); + } + + /** Creates a FilterTableScanRule. */ + protected FilterTableScanRule(RelOptRuleOperand operand, + RelBuilderFactory relBuilderFactory, String description) { + super(operand, relBuilderFactory, description); } //~ Methods ---------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java index 2e7feaf..d8d1a49 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java @@ -19,12 +19,14 @@ package org.apache.calcite.rel.rules; import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.RelNode; +import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.logical.LogicalCalc; import org.apache.calcite.rel.logical.LogicalFilter; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexProgram; import org.apache.calcite.rex.RexProgramBuilder; +import org.apache.calcite.tools.RelBuilderFactory; /** * Planner rule that converts a @@ -43,12 +45,18 @@ import org.apache.calcite.rex.RexProgramBuilder; public class FilterToCalcRule extends RelOptRule { //~ Static fields/initializers --------------------------------------------- - public static final FilterToCalcRule INSTANCE = new FilterToCalcRule(); + public static final FilterToCalcRule INSTANCE = + new FilterToCalcRule(RelFactories.LOGICAL_BUILDER); //~ Constructors ----------------------------------------------------------- - private FilterToCalcRule() { - super(operand(LogicalFilter.class, any())); + /** + * Creates a FilterToCalcRule. + * + * @param relBuilderFactory Builder for relational expressions + */ + public FilterToCalcRule(RelBuilderFactory relBuilderFactory) { + super(operand(LogicalFilter.class, any()), relBuilderFactory, null); } //~ Methods ----------------------------------------------------------------
