diff --git pom.xml pom.xml index 2e4ca36..3ec81cc 100644 --- pom.xml +++ pom.xml @@ -100,7 +100,7 @@ 3.4 1.7.5 0.8.0.RELEASE - 1.2.0-incubating + 1.3.0-incubating-SNAPSHOT 3.2.6 3.2.10 3.2.9 diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveProject.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveProject.java index cf0c462..356bb27 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveProject.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveProject.java @@ -68,6 +68,7 @@ public HiveProject(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, List exps, RelDataType rowType, int flags) { super(cluster, traitSet, child, exps, rowType, flags); + assert traitSet.containsIfApplicable(HiveRelNode.CONVENTION); virtualCols = ImmutableList.copyOf(HiveCalciteUtil.getVirtualCols(exps)); } diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index 6e6923c..23fcd72 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -36,6 +36,7 @@ import org.antlr.runtime.tree.TreeVisitor; import org.antlr.runtime.tree.TreeVisitorAction; +import org.apache.calcite.plan.Convention; import org.apache.calcite.plan.RelOptCluster; import org.apache.calcite.plan.RelOptPlanner; import org.apache.calcite.plan.RelOptQuery; @@ -57,6 +58,7 @@ import org.apache.calcite.rel.core.AggregateCall; import org.apache.calcite.rel.core.Filter; import org.apache.calcite.rel.core.Join; +import org.apache.calcite.rel.core.JoinInfo; import org.apache.calcite.rel.core.JoinRelType; import org.apache.calcite.rel.core.Project; import org.apache.calcite.rel.core.RelFactories; @@ -942,7 +944,7 @@ private RelNode applyPreJoinOrderingTransforms(RelNode basePlan, RelMetadataProv // 5. Projection Pruning RelFieldTrimmer fieldTrimmer = new RelFieldTrimmer(null, HiveProject.DEFAULT_PROJECT_FACTORY, HiveFilter.DEFAULT_FILTER_FACTORY, HiveJoin.HIVE_JOIN_FACTORY, - RelFactories.DEFAULT_SEMI_JOIN_FACTORY, HiveSort.HIVE_SORT_REL_FACTORY, + HiveSemiJoinFactory.INSTANCE, HiveSort.HIVE_SORT_REL_FACTORY, HiveAggregate.HIVE_AGGR_REL_FACTORY, HiveUnion.UNION_REL_FACTORY); basePlan = fieldTrimmer.trim(basePlan); @@ -2958,4 +2960,19 @@ private QBParseInfo getQBParseInfo(QB qb) throws CalciteSemanticException { } } + private static class HiveSemiJoinFactory + implements RelFactories.SemiJoinFactory { + public static final HiveSemiJoinFactory INSTANCE = + new HiveSemiJoinFactory(); + + public RelNode createSemiJoin(RelNode left, RelNode right, + RexNode condition) { + final JoinInfo joinInfo = JoinInfo.of(left, right, condition); + final RelOptCluster cluster = left.getCluster(); + // TODO: Create HiveSemiJoin, and call HiveSemiJoin.create here. + return new SemiJoin(cluster, left.getTraitSet(), left, right, condition, + joinInfo.leftKeys, joinInfo.rightKeys); + } + } + }