Repository: calcite Updated Branches: refs/heads/master 133012f4e -> 06197d3bb (forced update)
[CALCITE-2605] Support semi-join via EnumerableCorrelate (Ruben Quesada Lopez) Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/06197d3b Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/06197d3b Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/06197d3b Branch: refs/heads/master Commit: 06197d3bbe54d00fc695e7c50280653c1758e056 Parents: fce3966 Author: Vladimir Sitnikov <[email protected]> Authored: Tue Nov 6 14:01:08 2018 +0300 Committer: Vladimir Sitnikov <[email protected]> Committed: Tue Nov 6 14:01:36 2018 +0300 ---------------------------------------------------------------------- .../apache/calcite/adapter/enumerable/EnumUtils.java | 14 ++++++++++++++ .../adapter/enumerable/EnumerableCorrelate.java | 15 ++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/06197d3b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumUtils.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumUtils.java index 889c8c5..c97b2b2 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumUtils.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumUtils.java @@ -30,6 +30,7 @@ import org.apache.calcite.rel.core.JoinRelType; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rel.type.RelDataTypeField; import org.apache.calcite.rex.RexNode; +import org.apache.calcite.sql.SemiJoinType; import org.apache.calcite.util.BuiltInMethod; import org.apache.calcite.util.Util; @@ -119,6 +120,19 @@ public class EnumUtils { }; } + static Expression joinSelector(SemiJoinType semiJoinType, PhysType physType, + List<PhysType> inputPhysTypes) { + JoinRelType joinRelType; + if (semiJoinType.returnsJustFirstInput()) { + // Actual join type does not matter much, joinSelector would skip selection + // of the columns that are not required (see if (expressions.size() == outputFieldCount) {) + joinRelType = JoinRelType.INNER; + } else { + joinRelType = semiJoinType.toJoinType(); + } + return joinSelector(joinRelType, physType, inputPhysTypes); + } + static Expression joinSelector(JoinRelType joinType, PhysType physType, List<PhysType> inputPhysTypes) { // A parameter for each input. http://git-wip-us.apache.org/repos/asf/calcite/blob/06197d3b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelate.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelate.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelate.java index f8205c3..bdb583c 100644 --- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelate.java +++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelate.java @@ -26,7 +26,6 @@ import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.Correlate; import org.apache.calcite.rel.core.CorrelationId; -import org.apache.calcite.rel.core.JoinRelType; import org.apache.calcite.sql.SemiJoinType; import org.apache.calcite.util.BuiltInMethod; import org.apache.calcite.util.ImmutableBitSet; @@ -98,16 +97,10 @@ public class EnumerableCorrelate extends Correlate getRowType(), pref.prefer(JavaRowFormat.CUSTOM)); - Expression selector; - if (joinType.returnsJustFirstInput()) { - // SEMI, ANTI - selector = EnumUtils.joinSelector(JoinRelType.INNER, physType, - ImmutableList.of(leftResult.physType)); - } else { - // INNER, LEFT - selector = EnumUtils.joinSelector(joinType.toJoinType(), physType, - ImmutableList.of(leftResult.physType, rightResult.physType)); - } + Expression selector = + EnumUtils.joinSelector( + joinType, physType, + ImmutableList.of(leftResult.physType, rightResult.physType)); builder.append( Expressions.call(leftExpression, BuiltInMethod.CORRELATE_JOIN.method,
