HIVE-14957: HiveSortLimitPullUpConstantsRule misses branches when parent 
operator is Union (Pengcheng Xiong, reviewed by Jesus Camacho Rodriguez)


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

Branch: refs/heads/hive-14535
Commit: e0e10a9324cfccc8bef7bccb33d9f1509832eba1
Parents: e9c217f
Author: Pengcheng Xiong <pxi...@apache.org>
Authored: Mon Oct 17 11:12:16 2016 -0700
Committer: Pengcheng Xiong <pxi...@apache.org>
Committed: Mon Oct 17 11:12:16 2016 -0700

----------------------------------------------------------------------
 .../calcite/rules/HiveSortLimitPullUpConstantsRule.java  | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/e0e10a93/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveSortLimitPullUpConstantsRule.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveSortLimitPullUpConstantsRule.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveSortLimitPullUpConstantsRule.java
index cc318db..3ec9dac 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveSortLimitPullUpConstantsRule.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveSortLimitPullUpConstantsRule.java
@@ -26,6 +26,7 @@ import org.apache.calcite.plan.RelOptPredicateList;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
 import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.plan.hep.HepRelVertex;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.RelNode;
@@ -158,7 +159,15 @@ public class HiveSortLimitPullUpConstantsRule extends 
RelOptRule {
     relBuilder.project(topChildExprs, topChildExprsFields);
     relBuilder.convert(sort.getRowType(), false);
 
-    call.transformTo(parent.copy(parent.getTraitSet(), 
ImmutableList.of(relBuilder.build())));
+    List<RelNode> inputs = new ArrayList<>();
+    for (RelNode child : parent.getInputs()) {
+      if (!((HepRelVertex) child).getCurrentRel().equals(sort)) {
+        inputs.add(child);
+      } else {
+        inputs.add(relBuilder.build());
+      }
+    }
+    call.transformTo(parent.copy(parent.getTraitSet(), inputs));
   }
 
 }

Reply via email to