Repository: drill
Updated Branches:
  refs/heads/master 62f146908 -> 931b43ec5


DRILL-6323: Lateral Join - Refactor Join PopConfigs


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/8051c24b
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/8051c24b
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/8051c24b

Branch: refs/heads/master
Commit: 8051c24bf3048e1bfd4793508a2200b1662897e3
Parents: 62f1469
Author: Sorabh Hamirwasia <shamirwa...@maprtech.com>
Authored: Mon Mar 5 21:09:16 2018 -0800
Committer: Parth Chandra <par...@apache.org>
Committed: Tue Apr 17 18:15:34 2018 -0700

----------------------------------------------------------------------
 .../exec/physical/base/AbstractJoinPop.java     | 78 ++++++++++++++++++++
 .../physical/base/AbstractPhysicalVisitor.java  | 15 ----
 .../exec/physical/base/PhysicalVisitor.java     |  3 -
 .../drill/exec/physical/config/HashJoinPOP.java | 78 +++++---------------
 .../exec/physical/config/MergeJoinPOP.java      | 61 +++------------
 .../exec/physical/config/NestedLoopJoinPOP.java | 56 +++-----------
 6 files changed, 116 insertions(+), 175 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/8051c24b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractJoinPop.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractJoinPop.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractJoinPop.java
new file mode 100644
index 0000000..ebbb938
--- /dev/null
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractJoinPop.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.drill.exec.physical.base;
+
+import com.google.common.collect.Iterators;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.drill.common.expression.LogicalExpression;
+import org.apache.drill.common.logical.data.JoinCondition;
+
+import java.util.Iterator;
+import java.util.List;
+
+public abstract class AbstractJoinPop extends AbstractBase {
+
+  protected final PhysicalOperator left;
+
+  protected final PhysicalOperator right;
+
+  protected final JoinRelType joinType;
+
+  protected final LogicalExpression condition;
+
+  protected final List<JoinCondition> conditions;
+
+  public AbstractJoinPop(PhysicalOperator leftOp, PhysicalOperator rightOp,
+                         JoinRelType joinType, LogicalExpression joinCondition,
+                         List<JoinCondition> joinConditions) {
+    left = leftOp;
+    right = rightOp;
+    this.joinType = joinType;
+    condition = joinCondition;
+    conditions = joinConditions;
+  }
+
+  @Override
+  public <T, X, E extends Throwable> T accept(PhysicalVisitor<T, X, E> 
physicalVisitor, X value) throws E {
+    return physicalVisitor.visitOp(this, value);
+  }
+
+  @Override
+  public Iterator<PhysicalOperator> iterator() {
+    return Iterators.forArray(left, right);
+  }
+
+  public PhysicalOperator getLeft() {
+    return left;
+  }
+
+  public PhysicalOperator getRight() {
+    return right;
+  }
+
+  public JoinRelType getJoinType() {
+    return joinType;
+  }
+
+  public LogicalExpression getCondition() { return condition; }
+
+  public List<JoinCondition> getConditions() {
+    return conditions;
+  }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/8051c24b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractPhysicalVisitor.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractPhysicalVisitor.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractPhysicalVisitor.java
index 4e5f262..3a5d22e 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractPhysicalVisitor.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/AbstractPhysicalVisitor.java
@@ -138,21 +138,6 @@ public abstract class AbstractPhysicalVisitor<T, X, E 
extends Throwable> impleme
   }
 
   @Override
-  public T visitMergeJoin(MergeJoinPOP join, X value) throws E {
-    return visitOp(join, value);
-  }
-
-  @Override
-  public T visitHashJoin(HashJoinPOP join, X value) throws E {
-    return visitOp(join, value);
-  }
-
-  @Override
-  public T visitNestedLoopJoin(NestedLoopJoinPOP join, X value) throws E {
-    return visitOp(join, value);
-  }
-
-  @Override
   public T visitHashPartitionSender(HashPartitionSender op, X value) throws E {
     return visitSender(op, value);
   }

http://git-wip-us.apache.org/repos/asf/drill/blob/8051c24b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/PhysicalVisitor.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/PhysicalVisitor.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/PhysicalVisitor.java
index ff9876e..db9c873 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/PhysicalVisitor.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/base/PhysicalVisitor.java
@@ -62,9 +62,6 @@ public interface PhysicalVisitor<RETURN, EXTRA, EXCEP extends 
Throwable> {
   public RETURN visitSort(Sort sort, EXTRA value) throws EXCEP;
   public RETURN visitLimit(Limit limit, EXTRA value) throws EXCEP;
   public RETURN visitFlatten(FlattenPOP flatten, EXTRA value) throws EXCEP;
-  public RETURN visitMergeJoin(MergeJoinPOP join, EXTRA value) throws EXCEP;
-  public RETURN visitHashJoin(HashJoinPOP join, EXTRA value) throws EXCEP;
-  public RETURN visitNestedLoopJoin(NestedLoopJoinPOP join, EXTRA value) 
throws EXCEP;
   public RETURN visitSender(Sender sender, EXTRA value) throws EXCEP;
   public RETURN visitReceiver(Receiver receiver, EXTRA value) throws EXCEP;
   public RETURN visitStreamingAggregate(StreamingAggregate agg, EXTRA value) 
throws EXCEP;

http://git-wip-us.apache.org/repos/asf/drill/blob/8051c24b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/HashJoinPOP.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/HashJoinPOP.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/HashJoinPOP.java
index 07e59d0..67ef7f5 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/HashJoinPOP.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/HashJoinPOP.java
@@ -17,50 +17,29 @@
  */
 package org.apache.drill.exec.physical.config;
 
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.drill.common.logical.data.JoinCondition;
-import org.apache.drill.exec.physical.base.AbstractBase;
-import org.apache.drill.exec.physical.base.PhysicalOperator;
-import org.apache.drill.exec.physical.base.PhysicalVisitor;
-import org.apache.drill.exec.proto.UserBitShared.CoreOperatorType;
-import org.apache.calcite.rel.core.JoinRelType;
-
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.drill.common.logical.data.JoinCondition;
+import org.apache.drill.exec.physical.base.AbstractJoinPop;
+import org.apache.drill.exec.physical.base.PhysicalOperator;
+import org.apache.drill.exec.proto.UserBitShared.CoreOperatorType;
+
+import java.util.List;
 
 @JsonTypeName("hash-join")
-public class HashJoinPOP extends AbstractBase {
+public class HashJoinPOP extends AbstractJoinPop {
     static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(HashJoinPOP.class);
 
-
-    private final PhysicalOperator left;
-    private final PhysicalOperator right;
-    private final List<JoinCondition> conditions;
-    private final JoinRelType joinType;
-
     @JsonCreator
-    public HashJoinPOP(
-            @JsonProperty("left") PhysicalOperator left,
-            @JsonProperty("right") PhysicalOperator right,
-            @JsonProperty("conditions") List<JoinCondition> conditions,
-            @JsonProperty("joinType") JoinRelType joinType
-    ) {
-        this.left = left;
-        this.right = right;
-        this.conditions = conditions;
-        Preconditions.checkArgument(joinType != null, "Join type is missing!");
-        this.joinType = joinType;
-    }
-
-    @Override
-    public <T, X, E extends Throwable> T accept(PhysicalVisitor<T, X, E> 
physicalVisitor, X value) throws E {
-        return physicalVisitor.visitHashJoin(this, value);
+    public HashJoinPOP(@JsonProperty("left") PhysicalOperator left, 
@JsonProperty("right") PhysicalOperator right,
+                       @JsonProperty("conditions") List<JoinCondition> 
conditions,
+                       @JsonProperty("joinType") JoinRelType joinType) {
+        super(left, right, joinType, null, conditions);
+        Preconditions.checkArgument(joinType != null, "Join type is missing 
for HashJoin Pop");
     }
 
     @Override
@@ -69,41 +48,20 @@ public class HashJoinPOP extends AbstractBase {
         return new HashJoinPOP(children.get(0), children.get(1), conditions, 
joinType);
     }
 
-    @Override
-    public Iterator<PhysicalOperator> iterator() {
-        return Iterators.forArray(left, right);
-    }
-
-    public PhysicalOperator getLeft() {
-        return left;
-    }
-
-    public PhysicalOperator getRight() {
-        return right;
-    }
-
-    public JoinRelType getJoinType() {
-        return joinType;
-    }
-
-    public List<JoinCondition> getConditions() {
-        return conditions;
-    }
-
-    public HashJoinPOP flipIfRight(){
-        if(joinType == JoinRelType.RIGHT){
+    public HashJoinPOP flipIfRight() {
+        if (joinType == JoinRelType.RIGHT) {
             List<JoinCondition> flippedConditions = Lists.newArrayList();
-            for(JoinCondition c : conditions){
+            for (JoinCondition c : conditions) {
                 flippedConditions.add(c.flip());
             }
             return new HashJoinPOP(right, left, flippedConditions, 
JoinRelType.LEFT);
-        }else{
+        } else {
             return this;
         }
     }
 
     @Override
     public int getOperatorType() {
-      return CoreOperatorType.HASH_JOIN_VALUE;
+        return CoreOperatorType.HASH_JOIN_VALUE;
     }
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/8051c24b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/MergeJoinPOP.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/MergeJoinPOP.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/MergeJoinPOP.java
index b8e4f33..dbbc961 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/MergeJoinPOP.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/MergeJoinPOP.java
@@ -17,33 +17,23 @@
  */
 package org.apache.drill.exec.physical.config;
 
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.drill.common.logical.data.JoinCondition;
-import org.apache.drill.exec.physical.base.AbstractBase;
-import org.apache.drill.exec.physical.base.PhysicalOperator;
-import org.apache.drill.exec.physical.base.PhysicalVisitor;
-import org.apache.drill.exec.proto.UserBitShared.CoreOperatorType;
-import org.apache.calcite.rel.core.JoinRelType;
-
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.drill.common.logical.data.JoinCondition;
+import org.apache.drill.exec.physical.base.AbstractJoinPop;
+import org.apache.drill.exec.physical.base.PhysicalOperator;
+import org.apache.drill.exec.proto.UserBitShared.CoreOperatorType;
+
+import java.util.List;
 
 @JsonTypeName("merge-join")
-public class MergeJoinPOP extends AbstractBase{
+public class MergeJoinPOP extends AbstractJoinPop{
   static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(MergeJoinPOP.class);
 
-
-  private final PhysicalOperator left;
-  private final PhysicalOperator right;
-  private final List<JoinCondition> conditions;
-  private final JoinRelType joinType;
-
   @JsonCreator
   public MergeJoinPOP(
       @JsonProperty("left") PhysicalOperator left,
@@ -51,17 +41,10 @@ public class MergeJoinPOP extends AbstractBase{
       @JsonProperty("conditions") List<JoinCondition> conditions,
       @JsonProperty("joinType") JoinRelType joinType
   ) {
-    this.left = left;
-    this.right = right;
-    this.conditions = conditions;
+    super(left, right, joinType, null, conditions);
     Preconditions.checkArgument(joinType != null, "Join type is missing!");
-    this.joinType = joinType;
-    Preconditions.checkArgument(joinType != JoinRelType.FULL, "Full outer join 
not currently supported");
-  }
-
-  @Override
-  public <T, X, E extends Throwable> T accept(PhysicalVisitor<T, X, E> 
physicalVisitor, X value) throws E {
-    return physicalVisitor.visitMergeJoin(this, value);
+    Preconditions.checkArgument(joinType != JoinRelType.FULL,
+      "Full outer join not currently supported with Merge Join");
   }
 
   @Override
@@ -70,27 +53,6 @@ public class MergeJoinPOP extends AbstractBase{
     return new MergeJoinPOP(children.get(0), children.get(1), conditions, 
joinType);
   }
 
-  @Override
-  public Iterator<PhysicalOperator> iterator() {
-    return Iterators.forArray(left, right);
-  }
-
-  public PhysicalOperator getLeft() {
-    return left;
-  }
-
-  public PhysicalOperator getRight() {
-    return right;
-  }
-
-  public JoinRelType getJoinType() {
-    return joinType;
-  }
-
-  public List<JoinCondition> getConditions() {
-    return conditions;
-  }
-
   public MergeJoinPOP flipIfRight(){
     if(joinType == JoinRelType.RIGHT){
       List<JoinCondition> flippedConditions = Lists.newArrayList();
@@ -101,7 +63,6 @@ public class MergeJoinPOP extends AbstractBase{
     }else{
       return this;
     }
-
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/drill/blob/8051c24b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/NestedLoopJoinPOP.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/NestedLoopJoinPOP.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/NestedLoopJoinPOP.java
index fa44be2..6ca669d 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/NestedLoopJoinPOP.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/config/NestedLoopJoinPOP.java
@@ -17,32 +17,22 @@
  */
 package org.apache.drill.exec.physical.config;
 
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.drill.common.expression.LogicalExpression;
-import org.apache.drill.exec.physical.base.AbstractBase;
-import org.apache.drill.exec.physical.base.PhysicalOperator;
-import org.apache.drill.exec.physical.base.PhysicalVisitor;
-import org.apache.drill.exec.proto.UserBitShared.CoreOperatorType;
-import org.apache.calcite.rel.core.JoinRelType;
-
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Iterators;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.drill.common.expression.LogicalExpression;
+import org.apache.drill.exec.physical.base.AbstractJoinPop;
+import org.apache.drill.exec.physical.base.PhysicalOperator;
+import org.apache.drill.exec.proto.UserBitShared.CoreOperatorType;
+
+import java.util.List;
 
 @JsonTypeName("nested-loop-join")
-public class NestedLoopJoinPOP extends AbstractBase {
+public class NestedLoopJoinPOP extends AbstractJoinPop {
   static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(NestedLoopJoinPOP.class);
 
-
-  private final PhysicalOperator left;
-  private final PhysicalOperator right;
-  private final JoinRelType joinType;
-  private final LogicalExpression condition;
-
   @JsonCreator
   public NestedLoopJoinPOP(
       @JsonProperty("left") PhysicalOperator left,
@@ -50,15 +40,7 @@ public class NestedLoopJoinPOP extends AbstractBase {
       @JsonProperty("joinType") JoinRelType joinType,
       @JsonProperty("condition") LogicalExpression condition
   ) {
-    this.left = left;
-    this.right = right;
-    this.joinType = joinType;
-    this.condition = condition;
-  }
-
-  @Override
-  public <T, X, E extends Throwable> T accept(PhysicalVisitor<T, X, E> 
physicalVisitor, X value) throws E {
-    return physicalVisitor.visitNestedLoopJoin(this, value);
+    super(left, right, joinType, condition, null);
   }
 
   @Override
@@ -68,27 +50,7 @@ public class NestedLoopJoinPOP extends AbstractBase {
   }
 
   @Override
-  public Iterator<PhysicalOperator> iterator() {
-    return Iterators.forArray(left, right);
-  }
-
-  public PhysicalOperator getLeft() {
-    return left;
-  }
-
-  public PhysicalOperator getRight() {
-    return right;
-  }
-
-  public JoinRelType getJoinType() {
-    return joinType;
-  }
-
-  public LogicalExpression getCondition() { return condition; }
-
-  @Override
   public int getOperatorType() {
     return CoreOperatorType.NESTED_LOOP_JOIN_VALUE;
   }
 }
-

Reply via email to