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

englefly pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new ce89a9f07c5 [fix](Nereids) top-n with top project should hit top-n opt 
(#29971)
ce89a9f07c5 is described below

commit ce89a9f07c561317fefe8023047269ea3b264038
Author: morrySnow <101034200+morrys...@users.noreply.github.com>
AuthorDate: Mon Jan 15 14:48:25 2024 +0800

    [fix](Nereids) top-n with top project should hit top-n opt (#29971)
    
    in PR #29312, we limit top-n opt only enable in simplest cases.
    in this PR, we let go of some restrictions.
---
 .../java/org/apache/doris/nereids/processor/post/TopNScanOpt.java | 8 ++++++++
 1 file changed, 8 insertions(+)

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 bc0586f40c4..89d396611c5 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
@@ -52,6 +52,14 @@ public class TopNScanOpt extends PlanPostProcessor {
     public Plan visitPhysicalSink(PhysicalSink<? extends Plan> physicalSink, 
CascadesContext context) {
         if (physicalSink.child() instanceof TopN) {
             return super.visit(physicalSink, context);
+        } else if (physicalSink.child() instanceof Project && 
physicalSink.child().child(0) instanceof TopN) {
+            PhysicalTopN<?> oldTopN = (PhysicalTopN<?>) 
physicalSink.child().child(0);
+            PhysicalTopN<?> newTopN = (PhysicalTopN<?>) oldTopN.accept(this, 
context);
+            if (newTopN == oldTopN) {
+                return physicalSink;
+            } else {
+                return 
physicalSink.withChildren(physicalSink.child().withChildren(newTopN));
+            }
         }
         return physicalSink;
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to