You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by vl...@apache.org on 2018/11/06 11:01:13 UTC
calcite git commit: [CALCITE-2605] Support left outer join via
EnumerableCorrelate (Ruben Quesada Lopez)
Repository: calcite
Updated Branches:
refs/heads/master fce3966b2 -> 133012f4e
[CALCITE-2605] Support left outer 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/133012f4
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/133012f4
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/133012f4
Branch: refs/heads/master
Commit: 133012f4e92fee49a54b3e2f39c9e759db6be966
Parents: fce3966
Author: Vladimir Sitnikov <si...@gmail.com>
Authored: Tue Nov 6 14:01:08 2018 +0300
Committer: Vladimir Sitnikov <si...@gmail.com>
Committed: Tue Nov 6 14:01:08 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/133012f4/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/133012f4/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,