diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveProject.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveProject.java index cfdc3eb9a7..75ee86de1b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveProject.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveProject.java @@ -28,11 +28,11 @@ import org.apache.calcite.rel.RelShuttle; import org.apache.calcite.rel.core.Project; import org.apache.calcite.rel.type.RelDataType; -import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.rel.type.RelDataTypeField; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexNode; import org.apache.calcite.rex.RexUtil; +import org.apache.calcite.rex.RexOver; import org.apache.calcite.sql.validate.SqlValidatorUtil; import org.apache.calcite.util.Util; import org.apache.calcite.util.mapping.Mapping; @@ -82,7 +82,7 @@ public HiveProject(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, * aliases of the expressions */ public static HiveProject create(RelNode child, List exps, - List fieldNames) throws CalciteSemanticException{ + List fieldNames) throws CalciteSemanticException{ RelOptCluster cluster = child.getCluster(); // 1 Ensure columnNames are unique - CALCITE-411 @@ -201,4 +201,8 @@ public boolean isSynthetic() { return shuttle.visit(this); } + public boolean containsOver() { + return RexOver.containsOver(this.getChildExps(), null); + } + } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveJoinProjectTransposeRule.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveJoinProjectTransposeRule.java index b163052c3b..f0b2469918 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveJoinProjectTransposeRule.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveJoinProjectTransposeRule.java @@ -17,6 +17,7 @@ */ package org.apache.hadoop.hive.ql.optimizer.calcite.rules; +import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.plan.RelOptRuleOperand; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.rules.JoinProjectTransposeRule; @@ -98,4 +99,21 @@ private HiveJoinProjectTransposeRule( super(operand, description, includeOuter, relBuilderFactory); } + public void onMatch(RelOptRuleCall call) { + HiveProject proj; + if (hasLeftChild(call)) { + proj = call.rel(1); + if(proj.containsOver()) { + return; + } + } + if (hasRightChild(call)) { + proj = (HiveProject) getRightChild(call); + if (proj.containsOver()) { + return; + } + } + super.onMatch(call); + } + }