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.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 void onMatch(RelOptRuleCall call) { relBuilder.project(topChildExprs, topChildExprsFields); relBuilder.convert(sort.getRowType(), false); - call.transformTo(parent.copy(parent.getTraitSet(), ImmutableList.of(relBuilder.build()))); + List 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)); } }