aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAman Sinha <asinha@maprtech.com>2015-01-12 10:58:50 -0800
committerAman Sinha <asinha@maprtech.com>2015-01-12 14:44:30 -0800
commit5b012bf288738c2c76ef75692e4db467a5844574 (patch)
treeaa944c45379dc54aa3917fb433767b2b9f1cf9c9
parent487d98e58380b888fb11f168459e65a0def9d77f (diff)
DRILL-1500: Partial fix: Don't overwrite top level ProjectPrel that allows duplicates (this was happening during flatten planning phase).
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/ProjectAllowDupPrel.java6
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java2
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java2
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java13
4 files changed, 16 insertions, 7 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/ProjectAllowDupPrel.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/ProjectAllowDupPrel.java
index 57dfdb489..26bb9f60d 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/ProjectAllowDupPrel.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/ProjectAllowDupPrel.java
@@ -28,6 +28,7 @@ import org.apache.drill.exec.physical.base.PhysicalOperator;
import org.apache.drill.exec.physical.config.Project;
import org.apache.drill.exec.planner.logical.DrillOptiq;
import org.apache.drill.exec.planner.logical.DrillParseContext;
+import org.eigenbase.rel.ProjectRelBase;
import org.eigenbase.rel.RelNode;
import org.eigenbase.relopt.RelOptCluster;
import org.eigenbase.relopt.RelTraitSet;
@@ -45,6 +46,11 @@ public class ProjectAllowDupPrel extends ProjectPrel {
}
@Override
+ public ProjectAllowDupPrel copy(RelTraitSet traitSet, RelNode input, List<RexNode> exps, RelDataType rowType) {
+ return new ProjectAllowDupPrel(getCluster(), traitSet, input, exps, rowType);
+ }
+
+ @Override
public PhysicalOperator getPhysicalOperator(PhysicalPlanCreator creator) throws IOException {
Prel child = (Prel) this.getChild();
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java
index 10554112e..bedc7bc94 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java
@@ -108,7 +108,7 @@ public class RewriteProjectToFlatten extends BasePrelVisitor<Prel, Object, RelCo
}
Prel child = ((Prel)project.getChild()).accept(this, null);
- return new ProjectPrel(node.getCluster(), project.getTraitSet(), child, exprList, new RelRecordType(relDataTypes));
+ return (Prel) project.copy(project.getTraitSet(), child, exprList, new RelRecordType(relDataTypes));
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java
index 3e685a3aa..11b6c4339 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java
@@ -136,6 +136,6 @@ public class SplitUpComplexExpressions extends BasePrelVisitor<Prel, Object, Rel
allExprs.add(builder.makeInputRef( new RelDataTypeDrillImpl(new RelDataTypeHolder(), factory), index));
relDataTypes.add(new RelDataTypeFieldImpl("EXPR$" + index, allExprs.size(), factory.createSqlType(SqlTypeName.ANY) ));
}
- return new ProjectPrel(project.getCluster(), project.getTraitSet(), originalInput, exprList, new RelRecordType(origRelDataTypes));
+ return (Prel) project.copy(project.getTraitSet(), originalInput, exprList, new RelRecordType(origRelDataTypes));
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
index bacee0842..83d2d0bf6 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
@@ -196,13 +196,16 @@ public class DefaultSqlHandler extends AbstractSqlHandler {
*/
phyRelNode = JoinPrelRenameVisitor.insertRenameProject(phyRelNode);
- // TODO - re-enable once execution issues are resolved. This rule allows for several flatten operations to appear
- // within a single query, it also breaks up all expressions with complex outputs into their own project operations.
- // It currently appears to be producing good plans, but for the flatten case it is revealing execution errors in the
- // project operator.
+ /*
+ * 1.1) Break up all expressions with complex outputs into their own project operations
+ */
phyRelNode = ((Prel) phyRelNode).accept(new SplitUpComplexExpressions(planner.getTypeFactory(), context.getDrillOperatorTable(), context.getPlannerSettings().functionImplementationRegistry), null);
+
+ /*
+ * 1.2) Projections that contain reference to flatten are rewritten as Flatten operators followed by Project
+ */
phyRelNode = ((Prel) phyRelNode).accept(new RewriteProjectToFlatten(planner.getTypeFactory(), context.getDrillOperatorTable()), null);
- // Definitely before this one
+
/*
* 2.)
* Since our operators work via names rather than indices, we have to make to reorder any