[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.
This commit is contained in:
starocean999
2023-11-27 15:37:11 +08:00
committed by GitHub
parent dc1a31715b
commit 612347f650
2 changed files with 7 additions and 3 deletions

View File

@ -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());

View File

@ -269,6 +269,13 @@ public class SortNode extends PlanNode {
Expr.getIds(info.getOrderingExprs(), null, ids);
}
@Override
public void initOutputSlotIds(Set<SlotId> 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) {