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

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


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 871f1ff16d6 branch-4.0: [fix](mtmv) Fix materialized view regression 
test err #58018 (#58402)
871f1ff16d6 is described below

commit 871f1ff16d684c7766e871143381d34a2b7e6bdd
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Nov 27 09:00:30 2025 +0800

    branch-4.0: [fix](mtmv) Fix materialized view regression test err #58018 
(#58402)
    
    Cherry-picked from #58018
    
    Co-authored-by: seawinde <[email protected]>
---
 fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java   | 3 +--
 .../main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java | 3 +++
 .../nereids/rules/exploration/mv/PreMaterializedViewRewriter.java  | 1 -
 .../mv_p0/query_in_different_db/query_in_different_db.groovy       | 5 +++--
 .../suites/nereids_rules_p0/mv/limit/limit_rewrite.groovy          | 6 +++---
 .../nereids_rules_p0/mv/nested/nested_materialized_view.groovy     | 4 ++--
 .../nereids_rules_p0/mv/pre_rewrite/limit/query_with_limit.groovy  | 5 ++++-
 .../suites/nereids_rules_p0/mv/topN/topN_rewrite.groovy            | 6 +++---
 .../suites/nereids_rules_p0/mv/tpch/mv_tpch_test.groovy            | 7 ++++---
 9 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
index 94cbdbf6e78..7723c11d849 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
@@ -111,8 +111,7 @@ public class MTMVPlanUtil {
             RuleType.ELIMINATE_JOIN_BY_UK,
             RuleType.ELIMINATE_GROUP_BY_KEY_BY_UNIFORM,
             RuleType.ELIMINATE_GROUP_BY,
-            RuleType.SALT_JOIN,
-            RuleType.AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION
+            RuleType.SALT_JOIN
     );
     // The rules should be disabled when run MTMV task
     public static final List<RuleType> DISABLE_RULES_WHEN_RUN_MTMV_TASK = 
DISABLE_RULES_WHEN_GENERATE_MTMV_CACHE;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java
index a9e28a2af0c..093818efb90 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java
@@ -227,6 +227,8 @@ public class Rewriter extends AbstractBatchJobExecutor {
                                             // so there may be two filters we 
need to merge them
                                             new MergeFilters()
                                     ),
+                                    
custom(RuleType.AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION,
+                                            
AggScalarSubQueryToWindowFunction::new),
                                     bottomUp(
                                             new 
EliminateUselessPlanUnderApply(),
                                             // 
CorrelateApplyToUnCorrelateApply and ApplyToJoin
@@ -454,6 +456,7 @@ public class Rewriter extends AbstractBatchJobExecutor {
                                 // so there may be two filters we need to 
merge them
                                 new MergeFilters()
                         ),
+                        // query rewrite support window, so add this rule here
                         
custom(RuleType.AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION, 
AggScalarSubQueryToWindowFunction::new),
                         bottomUp(
                                 new EliminateUselessPlanUnderApply(),
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PreMaterializedViewRewriter.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PreMaterializedViewRewriter.java
index b367d7c064c..5eb4f82f0e3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PreMaterializedViewRewriter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PreMaterializedViewRewriter.java
@@ -69,7 +69,6 @@ public class PreMaterializedViewRewriter {
         
NEED_PRE_REWRITE_RULE_TYPES.set(RuleType.PROCESS_SCALAR_AGG_MUST_USE_MULTI_DISTINCT.ordinal());
         
NEED_PRE_REWRITE_RULE_TYPES.set(RuleType.ELIMINATE_GROUP_BY_KEY_BY_UNIFORM.ordinal());
         NEED_PRE_REWRITE_RULE_TYPES.set(RuleType.SALT_JOIN.ordinal());
-        
NEED_PRE_REWRITE_RULE_TYPES.set(RuleType.AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION.ordinal());
     }
 
     /**
diff --git 
a/regression-test/suites/mv_p0/query_in_different_db/query_in_different_db.groovy
 
b/regression-test/suites/mv_p0/query_in_different_db/query_in_different_db.groovy
index 3f7580e7ccb..d9b4eaa9a58 100644
--- 
a/regression-test/suites/mv_p0/query_in_different_db/query_in_different_db.groovy
+++ 
b/regression-test/suites/mv_p0/query_in_different_db/query_in_different_db.groovy
@@ -48,12 +48,13 @@ suite ("query_in_different_db") {
     sql "insert into d_table select -4,-4,-4,'d';"
     sql "insert into d_table select -4,-4,-4,'d';"
 
+    sql "analyze table d_table with sync;"
+    sql """alter table d_table modify column k1 set stats 
('row_count'='12');"""
+
     create_sync_mv(db, "d_table", "mv_in_${db}", """
     select abs(k1)+k2+1,sum(abs(k2+2)+k3+3) from d_table group by abs(k1)+k2+1
     """)
 
-    sql "analyze table d_table with sync;"
-    sql """alter table d_table modify column k1 set stats 
('row_count'='12');"""
     // use another db, mv rewrite should be correct
     sql """drop database IF EXISTS test_query_in_different_db"""
 
diff --git 
a/regression-test/suites/nereids_rules_p0/mv/limit/limit_rewrite.groovy 
b/regression-test/suites/nereids_rules_p0/mv/limit/limit_rewrite.groovy
index 3af7a56cd95..5971de63017 100644
--- a/regression-test/suites/nereids_rules_p0/mv/limit/limit_rewrite.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/limit/limit_rewrite.groovy
@@ -580,7 +580,7 @@ suite("limit_rewrite") {
             where o_orderdate > '2023-12-08'
             limit 2 offset 5;
             """
-    async_mv_rewrite_fail(db, mv5_1, query5_1, "mv5_1")
+    async_mv_rewrite_success(db, mv5_1, query5_1, "mv5_1")
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_1"""
 
 
@@ -606,7 +606,7 @@ suite("limit_rewrite") {
             where o_orderdate > '2023-12-09'
             limit 4 offset 2;
             """
-    async_mv_rewrite_fail(db, mv5_2, query5_2, "mv5_2")
+    async_mv_rewrite_success(db, mv5_2, query5_2, "mv5_2")
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_2"""
 
 
@@ -657,7 +657,7 @@ suite("limit_rewrite") {
             orders
             limit 2 offset 5;
             """
-    async_mv_rewrite_fail(db, mv6_1, query6_1, "mv6_1")
+    async_mv_rewrite_success(db, mv6_1, query6_1, "mv6_1")
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_1"""
 
 }
diff --git 
a/regression-test/suites/nereids_rules_p0/mv/nested/nested_materialized_view.groovy
 
b/regression-test/suites/nereids_rules_p0/mv/nested/nested_materialized_view.groovy
index ab710268454..d0f8d94150b 100644
--- 
a/regression-test/suites/nereids_rules_p0/mv/nested/nested_materialized_view.groovy
+++ 
b/regression-test/suites/nereids_rules_p0/mv/nested/nested_materialized_view.groovy
@@ -902,8 +902,8 @@ select * from (
     sql "SET enable_materialized_view_nest_rewrite = true"
     // DP Hyper can not use pre materialized view rewrite
     sql """SET enable_dphyp_optimizer = false"""
-    mv_rewrite_all_success(query2_0, ["mv_all_6_a", "mv_all_6_b", 
"mv_all_6_c", "mv_all_6_d"],
-            true, [TRY_IN_RBO, FORCE_IN_RBO])
+    mv_rewrite_all_success_without_check_chosen(query2_0, ["mv_all_6_a", 
"mv_all_6_b", "mv_all_6_c", "mv_all_6_d"],
+            [TRY_IN_RBO, FORCE_IN_RBO])
     mv_rewrite_all_fail(query2_0, ["mv_all_6_a", "mv_all_6_b", "mv_all_6_c", 
"mv_all_6_d"],
             [NOT_IN_RBO])
     // Compare result when before and after mv rewrite
diff --git 
a/regression-test/suites/nereids_rules_p0/mv/pre_rewrite/limit/query_with_limit.groovy
 
b/regression-test/suites/nereids_rules_p0/mv/pre_rewrite/limit/query_with_limit.groovy
index 35056eb08f3..5e29a5ef2af 100644
--- 
a/regression-test/suites/nereids_rules_p0/mv/pre_rewrite/limit/query_with_limit.groovy
+++ 
b/regression-test/suites/nereids_rules_p0/mv/pre_rewrite/limit/query_with_limit.groovy
@@ -326,8 +326,11 @@ suite("query_with_limit") {
             o_orderkey,
             l_partkey,
             l_suppkey
+            order by l_orderkey
             limit 2 offset 3;
             """
+    // because query explain memo is too big without order by, so add order by
+    // if query explain memo is too big fixed, then remove order by l_orderkey
     async_mv_rewrite_success(db, mv1_5, query1_5, "mv1_5", [TRY_IN_RBO, 
FORCE_IN_RBO])
     async_mv_rewrite_fail(db, mv1_5, query1_5, "mv1_5", [NOT_IN_RBO])
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_5"""
@@ -958,7 +961,7 @@ suite("query_with_limit") {
                   orders on l_orderkey = o_orderkey
                 limit 2 offset 1;
             """
-    async_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1")
+    async_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1", [TRY_IN_RBO, 
FORCE_IN_RBO])
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1"""
 
 
diff --git 
a/regression-test/suites/nereids_rules_p0/mv/topN/topN_rewrite.groovy 
b/regression-test/suites/nereids_rules_p0/mv/topN/topN_rewrite.groovy
index 5212a7112e7..54dcab2dcd0 100644
--- a/regression-test/suites/nereids_rules_p0/mv/topN/topN_rewrite.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/topN/topN_rewrite.groovy
@@ -593,7 +593,7 @@ suite("topN_rewrite") {
             limit 2 offset 5;
             """
     order_qt_query5_1_before "${query5_1}"
-    async_mv_rewrite_fail(db, mv5_1, query5_1, "mv5_1")
+    async_mv_rewrite_success(db, mv5_1, query5_1, "mv5_1")
     order_qt_query5_1_after "${query5_1}"
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_1"""
 
@@ -624,7 +624,7 @@ suite("topN_rewrite") {
             limit 4 offset 2;
             """
     order_qt_query5_2_before "${query5_2}"
-    async_mv_rewrite_fail(db, mv5_2, query5_2, "mv5_2")
+    async_mv_rewrite_success(db, mv5_2, query5_2, "mv5_2")
     order_qt_query5_2_after "${query5_2}"
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_2"""
 
@@ -683,7 +683,7 @@ suite("topN_rewrite") {
             limit 2 offset 5;
             """
     order_qt_query6_1_before "${query6_1}"
-    async_mv_rewrite_fail(db, mv6_1, query6_1, "mv6_1")
+    async_mv_rewrite_success(db, mv6_1, query6_1, "mv6_1")
     order_qt_query6_1_after "${query6_1}"
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_1"""
 
diff --git 
a/regression-test/suites/nereids_rules_p0/mv/tpch/mv_tpch_test.groovy 
b/regression-test/suites/nereids_rules_p0/mv/tpch/mv_tpch_test.groovy
index 40a3960a790..335ecb7e644 100644
--- a/regression-test/suites/nereids_rules_p0/mv/tpch/mv_tpch_test.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/tpch/mv_tpch_test.groovy
@@ -1231,12 +1231,13 @@ suite("mv_tpch_test") {
                   l_partkey = p_partkey
               )
     """
-    // contains subquery, doesn't support now
-    async_mv_rewrite_success(db, mv17, query17, "mv17")
+    // agg under join should rewrite successfully,
+    // but because AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION rule
+    // would rewrite to agg-window-join, so now doesn't support
+    async_mv_rewrite_fail(db, mv17, query17, "mv17")
     order_qt_query17_after "${query17}"
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv17"""
 
-
     def mv18 = """
             SELECT
               c_name,


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

Reply via email to