From 612347f650e0d637f7e3f2441fd578bd9853cf2e Mon Sep 17 00:00:00 2001 From: starocean999 <40539150+starocean999@users.noreply.github.com> Date: Mon, 27 Nov 2023 15:37:11 +0800 Subject: [PATCH] [fix](planner)sort node should materialized required slots for itself (#27605) this is a follow up pr for #27526 . The old pr didn't fix the problem correctly, this pr do. --- .../main/java/org/apache/doris/planner/JoinNodeBase.java | 3 --- .../src/main/java/org/apache/doris/planner/SortNode.java | 7 +++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/JoinNodeBase.java b/fe/fe-core/src/main/java/org/apache/doris/planner/JoinNodeBase.java index 2a0a272e48..b635cfda59 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/JoinNodeBase.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/JoinNodeBase.java @@ -275,9 +275,6 @@ public abstract class JoinNodeBase extends PlanNode { SlotId firstMaterializedSlotId = null; for (TupleDescriptor tupleDescriptor : outputTupleDescList) { for (SlotDescriptor slotDescriptor : tupleDescriptor.getSlots()) { - if ((requiredSlotIdSet != null && requiredSlotIdSet.contains(slotDescriptor.getId()))) { - slotDescriptor.setIsMaterialized(true); - } if (slotDescriptor.isMaterialized()) { if ((requiredSlotIdSet == null || requiredSlotIdSet.contains(slotDescriptor.getId()))) { outputSlotIds.add(slotDescriptor.getId()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SortNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SortNode.java index 70b76fa07b..375e37edd8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SortNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SortNode.java @@ -269,6 +269,13 @@ public class SortNode extends PlanNode { Expr.getIds(info.getOrderingExprs(), null, ids); } + @Override + public void initOutputSlotIds(Set requiredSlotIdSet, Analyzer analyzer) { + // need call materializeRequiredSlots again to make sure required slots is materialized by children + // requiredSlotIdSet parameter means nothing for sort node, just call materializeRequiredSlots is enough + info.materializeRequiredSlots(analyzer, outputSmap); + } + private void removeUnusedExprs() { if (!isUnusedExprRemoved) { if (resolvedTupleExprs != null) {