From 55d7c5e147ab86c6a23a636d84d64252e1d7bc17 Mon Sep 17 00:00:00 2001 From: starocean999 <40539150+starocean999@users.noreply.github.com> Date: Wed, 26 Apr 2023 21:10:29 +0800 Subject: [PATCH] [fix](nereids) column prune should use slots from children (#19112) the slots' nullable property may different between parent and children. So column prune should always use slots of children --- .../doris/nereids/rules/rewrite/logical/ColumnPruning.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/ColumnPruning.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/ColumnPruning.java index bca8e43e2c..4be1dc216f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/ColumnPruning.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/ColumnPruning.java @@ -250,7 +250,8 @@ public class ColumnPruning extends DefaultPlanRewriter implements boolean hasNewChildren = false; for (Plan child : plan.children()) { Set childOutputSet = child.getOutputSet(); - Set childRequiredSlots = Sets.intersection(childrenRequiredSlots, childOutputSet); + Set childRequiredSlots = childOutputSet.stream() + .filter(childrenRequiredSlots::contains).collect(Collectors.toSet()); Plan prunedChild = doPruneChild(plan, child, childRequiredSlots); if (prunedChild != child) { hasNewChildren = true;