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,