In Logical rule, use child's trait when convert child to logical. Propagate traits from child to parent, for Project/Filter etc.
Clean up in TestJdbcDistQuery test case. Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/c7fa50fd Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/c7fa50fd Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/c7fa50fd Branch: refs/heads/master Commit: c7fa50fd3db2f93559d893cefdaa415511c18b44 Parents: cf2b888 Author: Jinfeng Ni <[email protected]> Authored: Sat May 10 16:39:58 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Sun May 11 15:44:26 2014 -0700 ---------------------------------------------------------------------- .../planner/logical/DrillAggregateRule.java | 4 +-- .../exec/planner/logical/DrillFilterRule.java | 6 ++--- .../exec/planner/logical/DrillJoinRule.java | 28 ++++++++++---------- .../exec/planner/logical/DrillLimitRule.java | 2 +- .../exec/planner/logical/DrillProjectRule.java | 4 +-- .../exec/planner/logical/DrillUnionRule.java | 2 +- .../drill/jdbc/test/TestJdbcDistQuery.java | 6 ----- 7 files changed, 23 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c7fa50fd/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java index 5d65e7a..c966a84 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java @@ -46,9 +46,9 @@ public class DrillAggregateRule extends RelOptRule { // currently, don't use this rule if any of the aggregates contains DISTINCT return; } - + final RelTraitSet traits = aggregate.getTraitSet().plus(DrillRel.DRILL_LOGICAL); - final RelNode convertedInput = convert(input, traits); + final RelNode convertedInput = convert(input, input.getTraitSet().plus(DrillRel.DRILL_LOGICAL)); try { call.transformTo(new DrillAggregateRel(aggregate.getCluster(), traits, convertedInput, aggregate.getGroupSet(), aggregate.getAggCallList())); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c7fa50fd/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillFilterRule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillFilterRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillFilterRule.java index 64559a2..8f18838 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillFilterRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillFilterRule.java @@ -38,8 +38,8 @@ public class DrillFilterRule extends RelOptRule { public void onMatch(RelOptRuleCall call) { final FilterRel filter = (FilterRel) call.rel(0); final RelNode input = filter.getChild(); - final RelTraitSet traits = filter.getTraitSet().plus(DrillRel.DRILL_LOGICAL); - final RelNode convertedInput = convert(input, traits); - call.transformTo(new DrillFilterRel(filter.getCluster(), traits, convertedInput, filter.getCondition())); + //final RelTraitSet traits = filter.getTraitSet().plus(DrillRel.DRILL_LOGICAL); + final RelNode convertedInput = convert(input, input.getTraitSet().plus(DrillRel.DRILL_LOGICAL)); + call.transformTo(new DrillFilterRel(filter.getCluster(), convertedInput.getTraitSet(), convertedInput, filter.getCondition())); } } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c7fa50fd/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java index c23bb29..96854a7 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java @@ -54,8 +54,8 @@ public class DrillJoinRule extends RelOptRule { final RelNode right = join.getRight(); final RelTraitSet traits = join.getTraitSet().plus(DrillRel.DRILL_LOGICAL); - final RelNode convertedLeft = convert(left, traits); - final RelNode convertedRight = convert(right, traits); + final RelNode convertedLeft = convert(left, left.getTraitSet().plus(DrillRel.DRILL_LOGICAL)); + final RelNode convertedRight = convert(right, right.getTraitSet().plus(DrillRel.DRILL_LOGICAL)); List<Integer> leftKeys = Lists.newArrayList(); List<Integer> rightKeys = Lists.newArrayList(); @@ -64,11 +64,11 @@ public class DrillJoinRule extends RelOptRule { boolean addFilter = false; RexNode origJoinCondition = join.getCondition(); RexNode newJoinCondition = origJoinCondition; - + RexNode remaining = RelOptUtil.splitJoinCondition(convertedLeft, convertedRight, origJoinCondition, leftKeys, rightKeys); boolean hasEquijoins = (leftKeys.size() == rightKeys.size() && leftKeys.size() > 0) ? true : false; - // If the join involves equijoins and non-equijoins, then we can process the non-equijoins through + // If the join involves equijoins and non-equijoins, then we can process the non-equijoins through // a filter right after the join if (! remaining.isAlwaysTrue()) { if (hasEquijoins) { @@ -77,38 +77,38 @@ public class DrillJoinRule extends RelOptRule { List<RelDataTypeField> leftTypes = convertedLeft.getRowType().getFieldList(); List<RelDataTypeField> rightTypes = convertedRight.getRowType().getFieldList(); RexBuilder builder = join.getCluster().getRexBuilder(); - + for (int i=0; i < leftKeys.size(); i++) { int leftKeyOrdinal = leftKeys.get(i).intValue(); int rightKeyOrdinal = rightKeys.get(i).intValue(); - - equijoinList.add(builder.makeCall( + + equijoinList.add(builder.makeCall( SqlStdOperatorTable.EQUALS, - builder.makeInputRef(leftTypes.get(leftKeyOrdinal).getType(), leftKeyOrdinal), + builder.makeInputRef(leftTypes.get(leftKeyOrdinal).getType(), leftKeyOrdinal), builder.makeInputRef(rightTypes.get(rightKeyOrdinal).getType(), rightKeyOrdinal + numLeftFields) - ) ); + ) ); } - newJoinCondition = RexUtil.composeConjunction(builder, equijoinList, false); + newJoinCondition = RexUtil.composeConjunction(builder, equijoinList, false); } else { tracer.warning("Non-equijoins are only supported in the presence of an equijoin."); return; } } //else { - // + // // return; // } try { if (!addFilter) { - RelNode joinRel = new DrillJoinRel(join.getCluster(), traits, convertedLeft, convertedRight, origJoinCondition, + RelNode joinRel = new DrillJoinRel(join.getCluster(), traits, convertedLeft, convertedRight, origJoinCondition, join.getJoinType(), leftKeys, rightKeys, false); call.transformTo(joinRel); } else { - RelNode joinRel = new DrillJoinRel(join.getCluster(), traits, convertedLeft, convertedRight, newJoinCondition, + RelNode joinRel = new DrillJoinRel(join.getCluster(), traits, convertedLeft, convertedRight, newJoinCondition, join.getJoinType(), leftKeys, rightKeys, false); call.transformTo(new DrillFilterRel(join.getCluster(), traits, joinRel, remaining)); - } + } } catch (InvalidRelException e) { tracer.warning(e.toString()); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c7fa50fd/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillLimitRule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillLimitRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillLimitRule.java index a11dc30..c3b0d00 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillLimitRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillLimitRule.java @@ -53,7 +53,7 @@ public class DrillLimitRule extends RelOptRule { } RelNode convertedInput = convert(input, input.getTraitSet().plus(DrillRel.DRILL_LOGICAL)); - call.transformTo(new DrillLimitRel(incomingSort.getCluster(), incomingTraits.plus(DrillRel.DRILL_LOGICAL), convertedInput, incomingSort.offset, incomingSort.fetch)); + call.transformTo(new DrillLimitRel(incomingSort.getCluster(), convertedInput.getTraitSet().plus(DrillRel.DRILL_LOGICAL), convertedInput, incomingSort.offset, incomingSort.fetch)); } } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c7fa50fd/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectRule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectRule.java index 7cef038..109588c 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectRule.java @@ -38,9 +38,9 @@ public class DrillProjectRule extends RelOptRule { public void onMatch(RelOptRuleCall call) { final ProjectRel project = (ProjectRel) call.rel(0); final RelNode input = project.getChild(); - final RelTraitSet traits = project.getTraitSet().plus(DrillRel.DRILL_LOGICAL); + //final RelTraitSet traits = project.getTraitSet().plus(DrillRel.DRILL_LOGICAL); final RelNode convertedInput = convert(input, input.getTraitSet().plus(DrillRel.DRILL_LOGICAL)); - call.transformTo(new DrillProjectRel(project.getCluster(), traits, convertedInput, project.getProjects(), project + call.transformTo(new DrillProjectRel(project.getCluster(), convertedInput.getTraitSet(), convertedInput, project.getProjects(), project .getRowType())); } } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c7fa50fd/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java index 25515c0..b607605 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java @@ -41,7 +41,7 @@ public class DrillUnionRule extends RelOptRule { final RelTraitSet traits = union.getTraitSet().plus(DrillRel.DRILL_LOGICAL); final List<RelNode> convertedInputs = new ArrayList<>(); for (RelNode input : union.getInputs()) { - final RelNode convertedInput = convert(input, traits); + final RelNode convertedInput = convert(input, input.getTraitSet().plus(DrillRel.DRILL_LOGICAL)); convertedInputs.add(convertedInput); } call.transformTo(new DrillUnionRel(union.getCluster(), traits, convertedInputs, union.all)); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/c7fa50fd/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcDistQuery.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcDistQuery.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcDistQuery.java index 2e279e7..30a7144 100644 --- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcDistQuery.java +++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcDistQuery.java @@ -50,12 +50,6 @@ public class TestJdbcDistQuery extends JdbcTest{ } - @BeforeClass - public static void generateHive() throws Exception{ - new HiveTestDataGenerator().generateTestData(); - } - - @Test public void testSimpleQuerySingleFile() throws Exception{ testQuery(String.format("select R_REGIONKEY, R_NAME "
