This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit b3b848f862d857d5fa439ff808c59aabd56e9cf7 Author: jakevin <jakevin...@gmail.com> AuthorDate: Mon May 13 10:17:29 2024 +0800 [feature](Nereids): eliminate useless project (#34611) --- .../nereids/processor/post/ColumnPruningPostProcessor.java | 11 +++++++++-- .../org/apache/doris/nereids/trees/plans/algebra/Project.java | 10 ++++++++++ .../doris/nereids/trees/plans/logical/LogicalProject.java | 10 ---------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/ColumnPruningPostProcessor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/ColumnPruningPostProcessor.java index ff362b7bc9e..e8c3cf4a6ac 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/ColumnPruningPostProcessor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/ColumnPruningPostProcessor.java @@ -40,9 +40,16 @@ import java.util.stream.Collectors; }) public class ColumnPruningPostProcessor extends PlanPostProcessor { @Override - public PhysicalProject visitPhysicalProject(PhysicalProject<? extends Plan> project, CascadesContext ctx) { + public Plan visitPhysicalProject(PhysicalProject<? extends Plan> project, CascadesContext ctx) { Plan child = project.child(); Plan newChild = child.accept(this, ctx); + if (project.isAllSlots()) { + Set<Slot> projects = project.getProjects().stream().map(Slot.class::cast).collect(Collectors.toSet()); + Set<Slot> outputSet = newChild.getOutputSet(); + if (outputSet.equals(projects)) { + return ((AbstractPhysicalPlan) newChild).copyStatsAndGroupIdFrom(project); + } + } if (newChild instanceof AbstractPhysicalJoin) { AbstractPhysicalJoin<? extends Plan, ? extends Plan> join = (AbstractPhysicalJoin) newChild; Plan left = join.left(); @@ -91,7 +98,7 @@ public class ColumnPruningPostProcessor extends PlanPostProcessor { } if (newLeft != left || newRight != right) { - return (PhysicalProject) project.withChildren(join.withChildren(newLeft, newRight)); + return project.withChildren(join.withChildren(newLeft, newRight)); } else { return project; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/algebra/Project.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/algebra/Project.java index 7fa62f7628f..15b095bee3b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/algebra/Project.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/algebra/Project.java @@ -117,4 +117,14 @@ public interface Project { return expr; }); } + + /** isAllSlots */ + default boolean isAllSlots() { + for (NamedExpression project : getProjects()) { + if (!project.isSlot()) { + return false; + } + } + return true; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java index de23bc6f5b0..24d938636aa 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java @@ -114,16 +114,6 @@ public class LogicalProject<CHILD_TYPE extends Plan> extends LogicalUnary<CHILD_ return excepts; } - /** isAllSlots */ - public boolean isAllSlots() { - for (NamedExpression project : projects) { - if (!project.isSlot()) { - return false; - } - } - return true; - } - @Override public List<Slot> computeOutput() { Builder<Slot> slots = ImmutableList.builderWithExpectedSize(projects.size()); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org