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

Reply via email to