Repository: calcite Updated Branches: refs/heads/master 8eb7d0ff2 -> 9c6dc773e
[CALCITE-2092] Allow passing custom RelBuilder into SqlToRelConverter Close apache/calcite#583 Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/9c6dc773 Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/9c6dc773 Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/9c6dc773 Branch: refs/heads/master Commit: 9c6dc773e31a8b555350a75a6e9d9199b8244219 Parents: 8eb7d0f Author: Volodymyr Vysotskyi <[email protected]> Authored: Sat Dec 16 12:26:59 2017 +0200 Committer: Julian Hyde <[email protected]> Committed: Wed Dec 20 16:55:38 2017 -0800 ---------------------------------------------------------------------- .../org/apache/calcite/plan/RelOptUtil.java | 7 +---- .../calcite/prepare/CalcitePrepareImpl.java | 6 ++-- .../calcite/sql2rel/SqlToRelConverter.java | 30 ++++++++++++++++---- 3 files changed, 28 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/9c6dc773/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java b/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java index e7e3b7a..52407f8 100644 --- a/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java +++ b/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java @@ -3293,12 +3293,7 @@ public abstract class RelOptUtil { return relBuilder.build(); } - /** - * Pushes down expressions in "equal" join condition, using the default - * builder. - * - * @see #pushDownJoinConditions(Join, RelBuilder) - */ + @Deprecated // to be removed before 2.0 public static RelNode pushDownJoinConditions(Join originalJoin) { return pushDownJoinConditions(originalJoin, RelFactories.LOGICAL_BUILDER); } http://git-wip-us.apache.org/repos/asf/calcite/blob/9c6dc773/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java index a7de759..8f2bdff 100644 --- a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java +++ b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java @@ -1162,10 +1162,8 @@ public class CalcitePrepareImpl implements CalcitePrepare { CatalogReader catalogReader, SqlToRelConverter.Config config) { final RelOptCluster cluster = prepare.createCluster(planner, rexBuilder); - SqlToRelConverter sqlToRelConverter = - new SqlToRelConverter(this, validator, catalogReader, cluster, - convertletTable, config); - return sqlToRelConverter; + return new SqlToRelConverter(this, validator, catalogReader, cluster, + convertletTable, config); } @Override public RelNode flattenTypes( http://git-wip-us.apache.org/repos/asf/calcite/blob/9c6dc773/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java index 8326b02..80f9145 100644 --- a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java +++ b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java @@ -160,6 +160,7 @@ import org.apache.calcite.sql.validate.SqlValidatorScope; import org.apache.calcite.sql.validate.SqlValidatorTable; import org.apache.calcite.sql.validate.SqlValidatorUtil; import org.apache.calcite.tools.RelBuilder; +import org.apache.calcite.tools.RelBuilderFactory; import org.apache.calcite.util.ImmutableBitSet; import org.apache.calcite.util.ImmutableIntList; import org.apache.calcite.util.Litmus; @@ -320,7 +321,7 @@ public class SqlToRelConverter { this.exprConverter = new SqlNodeToRexConverterImpl(convertletTable); this.explainParamCount = 0; this.config = new ConfigBuilder().withConfig(config).build(); - this.relBuilder = RelFactories.LOGICAL_BUILDER.create(cluster, null); + this.relBuilder = config.getRelBuilderFactory().create(cluster, null); } //~ Methods ---------------------------------------------------------------- @@ -2410,7 +2411,7 @@ public class SqlToRelConverter { (Join) RelFactories.DEFAULT_JOIN_FACTORY.createJoin(leftRel, rightRel, joinCond, ImmutableSet.<CorrelationId>of(), joinType, false); - return RelOptUtil.pushDownJoinConditions(originalJoin); + return RelOptUtil.pushDownJoinConditions(originalJoin, relBuilder); } private CorrelationUse getCorrelationUse(Blackboard bb, final RelNode r0) { @@ -5447,6 +5448,10 @@ public class SqlToRelConverter { * cases; a threshold of {@link Integer#MAX_VALUE} forces usage of OR in all * cases. */ int getInSubQueryThreshold(); + + /** Returns the factory to create {@link RelBuilder}, never null. Default is + * {@link RelFactories#LOGICAL_BUILDER}. */ + RelBuilderFactory getRelBuilderFactory(); } /** Builder for a {@link Config}. */ @@ -5458,6 +5463,7 @@ public class SqlToRelConverter { private boolean explain; private boolean expand = true; private int inSubQueryThreshold = DEFAULT_IN_SUB_QUERY_THRESHOLD; + private RelBuilderFactory relBuilderFactory = RelFactories.LOGICAL_BUILDER; private ConfigBuilder() {} @@ -5470,6 +5476,7 @@ public class SqlToRelConverter { this.explain = config.isExplain(); this.expand = config.isExpand(); this.inSubQueryThreshold = config.getInSubQueryThreshold(); + this.relBuilderFactory = config.getRelBuilderFactory(); return this; } @@ -5513,11 +5520,17 @@ public class SqlToRelConverter { return this; } + public ConfigBuilder withRelBuilderFactory( + RelBuilderFactory relBuilderFactory) { + this.relBuilderFactory = relBuilderFactory; + return this; + } + /** Builds a {@link Config}. */ public Config build() { return new ConfigImpl(convertTableAccess, decorrelationEnabled, trimUnusedFields, createValuesRel, explain, expand, - inSubQueryThreshold); + inSubQueryThreshold, relBuilderFactory); } } @@ -5529,12 +5542,14 @@ public class SqlToRelConverter { private final boolean trimUnusedFields; private final boolean createValuesRel; private final boolean explain; - private final int inSubQueryThreshold; private final boolean expand; + private final int inSubQueryThreshold; + private final RelBuilderFactory relBuilderFactory; private ConfigImpl(boolean convertTableAccess, boolean decorrelationEnabled, boolean trimUnusedFields, boolean createValuesRel, boolean explain, - boolean expand, int inSubQueryThreshold) { + boolean expand, int inSubQueryThreshold, + RelBuilderFactory relBuilderFactory) { this.convertTableAccess = convertTableAccess; this.decorrelationEnabled = decorrelationEnabled; this.trimUnusedFields = trimUnusedFields; @@ -5542,6 +5557,7 @@ public class SqlToRelConverter { this.explain = explain; this.expand = expand; this.inSubQueryThreshold = inSubQueryThreshold; + this.relBuilderFactory = relBuilderFactory; } public boolean isConvertTableAccess() { @@ -5571,6 +5587,10 @@ public class SqlToRelConverter { public int getInSubQueryThreshold() { return inSubQueryThreshold; } + + public RelBuilderFactory getRelBuilderFactory() { + return relBuilderFactory; + } } }
