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
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new 6c2107788c5 [fix](nereids) support one phase DeferMaterializeTopN
#45693-branch-2.1 (#45845)
6c2107788c5 is described below
commit 6c2107788c501cc13687f086038f6c211ba94917
Author: minghong <[email protected]>
AuthorDate: Wed Dec 25 12:00:58 2024 +0800
[fix](nereids) support one phase DeferMaterializeTopN #45693-branch-2.1
(#45845)
---
...erializeTopNToPhysicalDeferMaterializeTopN.java | 9 +++-
.../defer_materialize_topn/one_phase.out | 7 +++
.../cte/test_cte_name_reuse.groovy | 2 +-
.../defer_materialize_topn/one_phase.groovy | 50 ++++++++++++++++++++++
4 files changed, 65 insertions(+), 3 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalDeferMaterializeTopNToPhysicalDeferMaterializeTopN.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalDeferMaterializeTopNToPhysicalDeferMaterializeTopN.java
index 9ad6b73d1c8..2799ca30147 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalDeferMaterializeTopNToPhysicalDeferMaterializeTopN.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalDeferMaterializeTopNToPhysicalDeferMaterializeTopN.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.rules.implementation;
import org.apache.doris.nereids.rules.Rule;
import org.apache.doris.nereids.rules.RuleType;
import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.SortPhase;
import
org.apache.doris.nereids.trees.plans.logical.LogicalDeferMaterializeTopN;
import
org.apache.doris.nereids.trees.plans.physical.PhysicalDeferMaterializeTopN;
import org.apache.doris.nereids.trees.plans.physical.PhysicalTopN;
@@ -38,8 +39,12 @@ public class
LogicalDeferMaterializeTopNToPhysicalDeferMaterializeTopN extends O
.build()
.transform(topN.getLogicalTopN(), ctx.cascadesContext)
.get(0);
- return wrap(physicalTopN, topN, wrap((PhysicalTopN<? extends
Plan>) physicalTopN.child(), topN,
- ((PhysicalTopN<?>) physicalTopN.child()).child()));
+ if (physicalTopN.getSortPhase() == SortPhase.MERGE_SORT) {
+ return wrap(physicalTopN, topN, wrap((PhysicalTopN<? extends
Plan>) physicalTopN.child(), topN,
+ ((PhysicalTopN<?>) physicalTopN.child()).child()));
+ } else {
+ return wrap(physicalTopN, topN, physicalTopN.child());
+ }
}).toRule(RuleType.LOGICAL_DEFER_MATERIALIZE_TOP_N_TO_PHYSICAL_DEFER_MATERIALIZE_TOP_N_RULE);
}
diff --git
a/regression-test/data/nereids_rules_p0/defer_materialize_topn/one_phase.out
b/regression-test/data/nereids_rules_p0/defer_materialize_topn/one_phase.out
new file mode 100644
index 00000000000..cb3f8c9b7cc
--- /dev/null
+++ b/regression-test/data/nereids_rules_p0/defer_materialize_topn/one_phase.out
@@ -0,0 +1,7 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !1 --
+11113
+
+-- !2 --
+11113
+
diff --git
a/regression-test/suites/nereids_rules_p0/cte/test_cte_name_reuse.groovy
b/regression-test/suites/nereids_rules_p0/cte/test_cte_name_reuse.groovy
index 5d472716f00..0f943db5b31 100644
--- a/regression-test/suites/nereids_rules_p0/cte/test_cte_name_reuse.groovy
+++ b/regression-test/suites/nereids_rules_p0/cte/test_cte_name_reuse.groovy
@@ -14,7 +14,7 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-suite("test_cte_name_reuse)") {
+suite("test_cte_name_reuse") {
sql "SET enable_nereids_planner=true"
sql "SET enable_pipeline_engine=true"
sql "SET enable_fallback_to_original_planner=false"
diff --git
a/regression-test/suites/nereids_rules_p0/defer_materialize_topn/one_phase.groovy
b/regression-test/suites/nereids_rules_p0/defer_materialize_topn/one_phase.groovy
new file mode 100644
index 00000000000..c7b106eff2a
--- /dev/null
+++
b/regression-test/suites/nereids_rules_p0/defer_materialize_topn/one_phase.groovy
@@ -0,0 +1,50 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+suite("one_phase") {
+ sql """
+ drop table if exists users;
+
+ CREATE TABLE `users` (
+ `UserID` bigint NULL
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`UserID`)
+ DISTRIBUTED BY HASH(`UserID`) BUCKETS 48
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1",
+ "min_load_replica_num" = "-1",
+ "is_being_synced" = "false",
+ "storage_medium" = "hdd",
+ "storage_format" = "V2",
+ "inverted_index_storage_format" = "V2",
+ "light_schema_change" = "true",
+ "disable_auto_compaction" = "false",
+ "enable_single_replica_compaction" = "false",
+ "group_commit_interval_ms" = "10000",
+ "group_commit_data_bytes" = "134217728"
+ );
+
+ insert into users values (11111),(11112),(11113);
+
+ """
+
+ sql "set sort_phase_num=1;"
+ qt_1 "select userid from users order by userid limit 2, 109000000;"
+
+ sql "set sort_phase_num=2;"
+ qt_2 "select userid from users order by userid limit 2, 109000000;"
+
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]