This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 7503842a348 [fix](nereids)pick part of "[opt](nereids) enable runtime 
filter prune by default #24717" (#25642)
7503842a348 is described below

commit 7503842a348c3c84e7bcd51440bc8881d2ef360e
Author: minghong <[email protected]>
AuthorDate: Mon Oct 23 23:11:01 2023 +0800

    [fix](nereids)pick part of "[opt](nereids) enable runtime filter prune by 
default #24717" (#25642)
---
 .../nereids/processor/post/MergeProjectPostProcessor.java    |  8 ++++++--
 .../doris/nereids/processor/post/PlanPostProcessors.java     |  2 +-
 .../nereids/processor/post/PushdownFilterThroughProject.java | 12 ++++++++++--
 .../processor/post/RecomputeLogicalPropertiesProcessor.java  | 11 ++++-------
 .../org/apache/doris/nereids/processor/post/TopNScanOpt.java |  6 +++---
 .../nereids/trees/plans/physical/AbstractPhysicalPlan.java   |  8 ++++++++
 .../java/org/apache/doris/nereids/util/MutableState.java     |  1 +
 7 files changed, 33 insertions(+), 15 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/MergeProjectPostProcessor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/MergeProjectPostProcessor.java
index 4a5ad492435..1c465cb790d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/MergeProjectPostProcessor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/MergeProjectPostProcessor.java
@@ -37,8 +37,12 @@ public class MergeProjectPostProcessor extends 
PlanPostProcessor {
         Plan newChild = child.accept(this, ctx);
         if (newChild instanceof PhysicalProject) {
             List<NamedExpression> projections = 
project.mergeProjections((PhysicalProject) newChild);
-            return project.withProjectionsAndChild(projections, 
newChild.child(0));
+            return (PhysicalProject) project
+                    .withProjectionsAndChild(projections, newChild.child(0))
+                    .copyStatsAndGroupIdFrom(project);
         }
-        return child != newChild ? 
project.withChildren(Lists.newArrayList(newChild)) : project;
+        return child != newChild
+                ? (PhysicalProject) 
project.withChildren(Lists.newArrayList(newChild)).copyStatsAndGroupIdFrom(project)
+                : project;
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java
index 787be605db1..9ae4c55608b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java
@@ -61,6 +61,7 @@ public class PlanPostProcessors {
         builder.add(new PushdownFilterThroughProject());
         builder.add(new MergeProjectPostProcessor());
         builder.add(new RecomputeLogicalPropertiesProcessor());
+        builder.add(new TopNScanOpt());
         // after generate rf, DO NOT replace PLAN NODE
         builder.add(new FragmentProcessor());
         if 
(!cascadesContext.getConnectContext().getSessionVariable().getRuntimeFilterMode()
@@ -71,7 +72,6 @@ public class PlanPostProcessors {
             }
         }
         builder.add(new Validator());
-        builder.add(new TopNScanOpt());
         return builder.build();
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PushdownFilterThroughProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PushdownFilterThroughProject.java
index 3eba798acbf..31ea757a036 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PushdownFilterThroughProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PushdownFilterThroughProject.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.processor.post;
 
 import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.physical.AbstractPhysicalPlan;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalFilter;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalProject;
 import org.apache.doris.nereids.util.ExpressionUtils;
@@ -31,7 +32,13 @@ public class PushdownFilterThroughProject extends 
PlanPostProcessor {
     public Plan visitPhysicalFilter(PhysicalFilter<? extends Plan> filter, 
CascadesContext context) {
         Plan child = filter.child();
         if (!(child instanceof PhysicalProject)) {
-            return filter.withChildren(child.accept(this, context));
+            Plan newChild = child.accept(this, context);
+            if (newChild == child) {
+                return filter;
+            } else {
+                return ((AbstractPhysicalPlan) 
filter.withChildren(child.accept(this, context)))
+                        .copyStatsAndGroupIdFrom(filter);
+            }
         }
 
         PhysicalProject<? extends Plan> project = (PhysicalProject<? extends 
Plan>) child;
@@ -39,6 +46,7 @@ public class PushdownFilterThroughProject extends 
PlanPostProcessor {
                 ExpressionUtils.replace(filter.getConjuncts(), 
project.getAliasToProducer()),
                 project.child());
 
-        return project.withChildren(newFilter.accept(this, context));
+        return ((PhysicalProject) project.withChildren(newFilter.accept(this, 
context)))
+                .copyStatsAndGroupIdFrom(project);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RecomputeLogicalPropertiesProcessor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RecomputeLogicalPropertiesProcessor.java
index 37a858c1a3d..97786684de0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RecomputeLogicalPropertiesProcessor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RecomputeLogicalPropertiesProcessor.java
@@ -18,9 +18,8 @@
 package org.apache.doris.nereids.processor.post;
 
 import org.apache.doris.nereids.CascadesContext;
-import org.apache.doris.nereids.trees.plans.AbstractPlan;
 import org.apache.doris.nereids.trees.plans.Plan;
-import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
+import org.apache.doris.nereids.trees.plans.physical.AbstractPhysicalPlan;
 
 /**
  * merge consecutive projects
@@ -28,10 +27,8 @@ import 
org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
 public class RecomputeLogicalPropertiesProcessor extends PlanPostProcessor {
     @Override
     public Plan visit(Plan plan, CascadesContext ctx) {
-        PhysicalPlan physicalPlan = (PhysicalPlan) visitChildren(this, plan, 
ctx);
-        physicalPlan = physicalPlan.resetLogicalProperties();
-        physicalPlan = 
physicalPlan.withPhysicalPropertiesAndStats(physicalPlan.getPhysicalProperties(),
-                ((AbstractPlan) plan).getStats());
-        return physicalPlan;
+        AbstractPhysicalPlan newPlan = (AbstractPhysicalPlan) 
visitChildren(this, plan, ctx);
+        return ((AbstractPhysicalPlan) newPlan.resetLogicalProperties())
+                .copyStatsAndGroupIdFrom((AbstractPhysicalPlan) plan);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
index b221570edf1..1a0dddfe5c2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
@@ -44,7 +44,7 @@ public class TopNScanOpt extends PlanPostProcessor {
         Plan child = topN.child().accept(this, ctx);
         topN = rewriteTopN(topN);
         if (child != topN.child()) {
-            topN.withChildren(child);
+            topN = ((PhysicalTopN) 
topN.withChildren(child)).copyStatsAndGroupIdFrom(topN);
         }
         return topN;
     }
@@ -54,11 +54,11 @@ public class TopNScanOpt extends PlanPostProcessor {
             CascadesContext context) {
         Plan child = topN.child().accept(this, context);
         if (child != topN.child()) {
-            topN = topN.withChildren(ImmutableList.of(child));
+            topN = 
topN.withChildren(ImmutableList.of(child)).copyStatsAndGroupIdFrom(topN);
         }
         PhysicalTopN<? extends Plan> rewrittenTopN = 
rewriteTopN(topN.getPhysicalTopN());
         if (topN.getPhysicalTopN() != rewrittenTopN) {
-            topN = topN.withPhysicalTopN(rewrittenTopN);
+            topN = 
topN.withPhysicalTopN(rewrittenTopN).copyStatsAndGroupIdFrom(topN);
         }
         return topN;
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java
index 53593eed64c..6a0ccd09341 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.plans.AbstractPlan;
 import org.apache.doris.nereids.trees.plans.Explainable;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.PlanType;
+import org.apache.doris.nereids.util.MutableState;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.statistics.Statistics;
 
@@ -64,4 +65,11 @@ public abstract class AbstractPhysicalPlan extends 
AbstractPlan implements Physi
     public Plan getExplainPlan(ConnectContext ctx) {
         return this;
     }
+
+    public <T extends AbstractPhysicalPlan> T copyStatsAndGroupIdFrom(T from) {
+        T newPlan = (T) withPhysicalPropertiesAndStats(
+                from.getPhysicalProperties(), from.getStats());
+        newPlan.setMutableState(MutableState.KEY_GROUP, 
from.getGroupIdAsString());
+        return newPlan;
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/MutableState.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/MutableState.java
index 95ba886e3f6..278a6ce894e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/MutableState.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/MutableState.java
@@ -23,6 +23,7 @@ import java.util.Optional;
 
 /** MutableState */
 public interface MutableState {
+    String KEY_GROUP = "group";
     <T> Optional<T> get(String key);
 
     MutableState set(String key, Object value);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to