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 ffbb10200fe [test](mtmv)Verifying master-slave consistency after 
schema change (#51106)
ffbb10200fe is described below

commit ffbb10200fec21c5764a4183e346a4889b275823
Author: zfr95 <zhangfur...@selectdb.com>
AuthorDate: Thu May 22 14:29:12 2025 +0800

    [test](mtmv)Verifying master-slave consistency after schema change (#51106)
---
 .../mtmv_p0/test_base_replace_on_commit_mtmv.out   | Bin 342 -> 349 bytes
 .../org/apache/doris/regression/suite/Suite.groovy |  35 +++++++++
 .../test_base_add_col_multi_level_mtmv.groovy      |  30 +++++---
 ..._base_alter_col_comment_multi_level_mtmv.groovy |  24 ++++--
 ...est_base_alter_col_type_multi_level_mtmv.groovy |  23 ++++--
 .../test_base_comment_multi_level_mtmv.groovy      |  23 ++++--
 .../test_base_drop_col_multi_level_mtmv.groovy     |  25 +++---
 .../mtmv_p0/test_base_drop_multi_level_mtmv.groovy |  30 ++++++--
 .../test_base_recreate_on_commit_mtmv.groovy       |  30 +++++++-
 .../test_base_rename_col_multi_level_mtmv.groovy   |  24 ++++--
 .../test_base_rename_multi_level_mtmv.groovy       |  24 ++++--
 .../test_base_rename_mv_multi_level_mtmv.groovy    |  36 ++++++---
 .../mtmv_p0/test_base_rename_on_commit_mtmv.groovy |  55 +++++++++++---
 .../test_base_rename_p_mv_multi_level_mtmv.groovy  |  26 ++++---
 .../test_base_replace_multi_level_mtmv.groovy      |  63 +++++++++++-----
 .../test_base_replace_mv_multi_level_mtmv.groovy   |  84 +++++++++++++++------
 .../test_base_replace_on_commit_mtmv.groovy        |  45 +++++++++--
 .../suites/mtmv_p0/test_column_type_mtmv.groovy    |  30 +++++++-
 .../suites/mtmv_p0/test_recreate_table_mtmv.groovy |  37 ++++++++-
 19 files changed, 488 insertions(+), 156 deletions(-)

diff --git a/regression-test/data/mtmv_p0/test_base_replace_on_commit_mtmv.out 
b/regression-test/data/mtmv_p0/test_base_replace_on_commit_mtmv.out
index e5bb84bf378..cccc66dff4e 100644
Binary files 
a/regression-test/data/mtmv_p0/test_base_replace_on_commit_mtmv.out and 
b/regression-test/data/mtmv_p0/test_base_replace_on_commit_mtmv.out differ
diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
index fa6e9de148c..cce8d4e524c 100644
--- 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
@@ -1414,6 +1414,41 @@ class Suite implements GroovyInterceptable {
         return debugPoint
     }
 
+    // get follower ip
+    def get_follower_ip = {
+        def result = sql """show frontends;"""
+        if (result.size() == 1) {
+            return null
+        }
+        for (int i = 0; i < result.size(); i++) {
+            if (result[i][7] == "FOLLOWER" && result[i][8] == "false" && 
result[i][11] == "true") {
+                return result[i][1]
+            }
+        }
+        return null
+    }
+
+    // get master ip
+    def get_master_ip = {
+        def result = sql """show frontends;"""
+        for (int i = 0; i < result.size(); i++) {
+            if (result[i][7] == "FOLLOWER" && result[i][8] == "true" && 
result[i][11] == "true") {
+                return result[i][1]
+            }
+        }
+        return null
+    }
+
+    def run_on_follower_and_master = { test_fn ->
+        for (def ip in [get_follower_ip(), get_master_ip()]) {
+            if (ip != null) {
+                def jdbc_url = 
context.config.jdbcUrl.replaceAll(/\/\/[0-9.]+:/, "//${ip}:")
+                logger.info("jdbc_url: " + jdbc_url)
+                test_fn(jdbc_url)
+            }
+        }
+    }
+
     def waitingMTMVTaskFinishedByMvName = { mvName, dbName = context.dbName ->
         Thread.sleep(2000);
         String showTasks = "select 
TaskId,JobId,JobName,MvId,Status,MvName,MvDatabaseName,ErrorMsg from 
tasks('type'='mv') where MvDatabaseName = '${dbName}' and MvName = '${mvName}' 
order by CreateTime ASC"
diff --git 
a/regression-test/suites/mtmv_p0/test_base_add_col_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_add_col_multi_level_mtmv.groovy
index 1d079661968..21fdca199cd 100644
--- a/regression-test/suites/mtmv_p0/test_base_add_col_multi_level_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_add_col_multi_level_mtmv.groovy
@@ -127,14 +127,26 @@ suite("test_base_add_col_multi_level_mtmv","mtmv") {
     sql """
         alter table ${tableName1} add COLUMN new_col INT AFTER k2;
         """
-    assertEquals("FINISHED", getAlterColumnFinalState("${tableName1}"))
-    order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName1)
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_rewrite_success_without_check_chosen(querySql, mvName3)
-    mv_rewrite_success_without_check_chosen(querySql, mvName4)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+
+            assertEquals("FINISHED", getAlterColumnFinalState("${tableName1}"))
+
+            order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+
+            mv_rewrite_success_without_check_chosen(querySql, mvName1)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_rewrite_success_without_check_chosen(querySql, mvName3)
+            mv_rewrite_success_without_check_chosen(querySql, mvName4)
+        }
+    })
+
+
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_alter_col_comment_multi_level_mtmv.groovy
 
b/regression-test/suites/mtmv_p0/test_base_alter_col_comment_multi_level_mtmv.groovy
index 6bb2eba17ad..690bd1a317a 100644
--- 
a/regression-test/suites/mtmv_p0/test_base_alter_col_comment_multi_level_mtmv.groovy
+++ 
b/regression-test/suites/mtmv_p0/test_base_alter_col_comment_multi_level_mtmv.groovy
@@ -128,13 +128,21 @@ 
suite("test_base_alter_col_comment_multi_level_mtmv","mtmv") {
     sql """
         alter table ${tableName1} modify COLUMN k3 COMMENT 'new comment';
         """
-    order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName1)
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_rewrite_success_without_check_chosen(querySql, mvName3)
-    mv_rewrite_success_without_check_chosen(querySql, mvName4)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+
+            mv_rewrite_success_without_check_chosen(querySql, mvName1)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_rewrite_success_without_check_chosen(querySql, mvName3)
+            mv_rewrite_success_without_check_chosen(querySql, mvName4)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_alter_col_type_multi_level_mtmv.groovy
 
b/regression-test/suites/mtmv_p0/test_base_alter_col_type_multi_level_mtmv.groovy
index 83abd73dde5..0bd4d645edd 100644
--- 
a/regression-test/suites/mtmv_p0/test_base_alter_col_type_multi_level_mtmv.groovy
+++ 
b/regression-test/suites/mtmv_p0/test_base_alter_col_type_multi_level_mtmv.groovy
@@ -128,13 +128,20 @@ suite("test_base_alter_col_type_multi_level_mtmv","mtmv") 
{
     sql """
         alter table ${tableName1} modify COLUMN k3 VARCHAR(100);
         """
-    order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_not_part_in(querySql, mvName1)
-    mv_not_part_in(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_not_part_in(querySql, mvName1)
+            mv_not_part_in(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_comment_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_comment_multi_level_mtmv.groovy
index 5636c7dbcb4..462f23c445f 100644
--- a/regression-test/suites/mtmv_p0/test_base_comment_multi_level_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_comment_multi_level_mtmv.groovy
@@ -127,13 +127,20 @@ suite("test_base_comment_multi_level_mtmv","mtmv") {
     sql """
         alter table ${tableName1} MODIFY COMMENT "new table comment";
         """
-    order_qt_comment_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_comment_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_comment_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_comment_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_comment_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_comment_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_comment_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_comment_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName1)
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_rewrite_success_without_check_chosen(querySql, mvName3)
-    mv_rewrite_success_without_check_chosen(querySql, mvName4)
+            mv_rewrite_success_without_check_chosen(querySql, mvName1)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_rewrite_success_without_check_chosen(querySql, mvName3)
+            mv_rewrite_success_without_check_chosen(querySql, mvName4)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_drop_col_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_drop_col_multi_level_mtmv.groovy
index 3f0b77e6073..8e65da0bbe9 100644
--- a/regression-test/suites/mtmv_p0/test_base_drop_col_multi_level_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_drop_col_multi_level_mtmv.groovy
@@ -128,14 +128,21 @@ suite("test_base_drop_col_multi_level_mtmv","mtmv") {
     sql """
         alter table ${tableName1} drop COLUMN k3;
         """
-    assertEquals("FINISHED", getAlterColumnFinalState("${tableName1}"))
-    order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            assertEquals("FINISHED", getAlterColumnFinalState("${tableName1}"))
+            order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_not_part_in(querySql, mvName1)
-    mv_not_part_in(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_not_part_in(querySql, mvName1)
+            mv_not_part_in(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_drop_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_drop_multi_level_mtmv.groovy
index e81f1799ec5..d6a983ff061 100644
--- a/regression-test/suites/mtmv_p0/test_base_drop_multi_level_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_drop_multi_level_mtmv.groovy
@@ -125,10 +125,17 @@ suite("test_base_drop_multi_level_mtmv","mtmv") {
 
     // drop t1
     sql """drop table if exists `${tableName1}`"""
-    order_qt_drop_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_drop_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_drop_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_drop_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_drop_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_drop_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_drop_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_drop_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+        }
+    })
 
     sql """
         CREATE TABLE ${tableName1}
@@ -145,8 +152,15 @@ suite("test_base_drop_multi_level_mtmv","mtmv") {
             INSERT INTO ${tableName1} VALUES(1,"a");
         """
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_not_part_in(querySql, mvName1)
-    mv_not_part_in(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_not_part_in(querySql, mvName1)
+            mv_not_part_in(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_recreate_on_commit_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_recreate_on_commit_mtmv.groovy
index c2011952a52..adb707fc982 100644
--- a/regression-test/suites/mtmv_p0/test_base_recreate_on_commit_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_recreate_on_commit_mtmv.groovy
@@ -58,11 +58,25 @@ suite("test_base_recreate_on_commit_mtmv","mtmv") {
             REFRESH MATERIALIZED VIEW ${mvName} auto
         """
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_select_init "select * from ${mvName}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_select_init "select * from ${mvName}"
+        }
+    })
 
     // drop and recreate
     sql """drop table if exists `${tableName1}`"""
-    order_qt_drop "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_drop "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+        }
+    })
 
     sql """
         CREATE TABLE ${tableName1}
@@ -81,6 +95,14 @@ suite("test_base_recreate_on_commit_mtmv","mtmv") {
         """
 
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_recreate "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
-    order_qt_select_recreate "select * from ${mvName}"
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_recreate "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+            order_qt_select_recreate "select * from ${mvName}"
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_rename_col_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_rename_col_multi_level_mtmv.groovy
index 2e803efa5d2..9a2c104490f 100644
--- 
a/regression-test/suites/mtmv_p0/test_base_rename_col_multi_level_mtmv.groovy
+++ 
b/regression-test/suites/mtmv_p0/test_base_rename_col_multi_level_mtmv.groovy
@@ -128,13 +128,21 @@ suite("test_base_rename_col_multi_level_mtmv","mtmv") {
     sql """
         alter table ${tableName1} rename COLUMN k3 k4;
         """
-    order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_not_part_in(querySql, mvName1)
-    mv_not_part_in(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_add_col_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_add_col_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_add_col_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_add_col_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_not_part_in(querySql, mvName1)
+            mv_not_part_in(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_rename_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_rename_multi_level_mtmv.groovy
index 0f967ec096a..876e14dccb6 100644
--- a/regression-test/suites/mtmv_p0/test_base_rename_multi_level_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_rename_multi_level_mtmv.groovy
@@ -129,13 +129,21 @@ suite("test_base_rename_multi_level_mtmv","mtmv") {
     sql """
         ALTER TABLE ${tableName1} rename ${tableName1Rename};
         """
-    order_qt_drop_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_drop_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_drop_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_drop_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_not_part_in(querySql, mvName1)
-    mv_not_part_in(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_drop_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_drop_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_drop_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_drop_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_not_part_in(querySql, mvName1)
+            mv_not_part_in(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_rename_mv_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_rename_mv_multi_level_mtmv.groovy
index db95b0e412c..e4640f05290 100644
--- a/regression-test/suites/mtmv_p0/test_base_rename_mv_multi_level_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_rename_mv_multi_level_mtmv.groovy
@@ -129,20 +129,36 @@ suite("test_base_rename_mv_multi_level_mtmv","mtmv") {
     sql """
         ALTER MATERIALIZED VIEW ${mvName1} rename ${mvName1Rename};
         """
-    order_qt_rename_mv_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1Rename}'"
-    order_qt_rename_mv_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_rename_mv_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_rename_mv_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
-    // rename table will rename default partition name, so will change to async
-    mv_not_part_in(querySql, mvName1Rename)
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_rewrite_success_without_check_chosen(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_rename_mv_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1Rename}'"
+            order_qt_rename_mv_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_rename_mv_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_rename_mv_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+            // rename table will rename default partition name, so will change 
to async
+            mv_not_part_in(querySql, mvName1Rename)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_rewrite_success_without_check_chosen(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 
     // after refresh,should can rewrite
     sql """
             REFRESH MATERIALIZED VIEW ${mvName1Rename} auto
         """
     waitingMTMVTaskFinishedByMvName(mvName1Rename)
-    mv_rewrite_success_without_check_chosen(querySql, mvName1Rename)
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            mv_rewrite_success_without_check_chosen(querySql, mvName1Rename)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_rename_on_commit_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_rename_on_commit_mtmv.groovy
index 02aca18c0f3..4b72ebf92a7 100644
--- a/regression-test/suites/mtmv_p0/test_base_rename_on_commit_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_rename_on_commit_mtmv.groovy
@@ -58,13 +58,27 @@ suite("test_base_rename_on_commit_mtmv","mtmv") {
             REFRESH MATERIALIZED VIEW ${mvName} auto
         """
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_select_init "select * from ${mvName}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_select_init "select * from ${mvName}"
+        }
+    })
 
     // rename and recreate
     sql """
         ALTER TABLE ${tableName1} rename ${tableName2};
         """
-    order_qt_rename "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_rename "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+        }
+    })
 
     sql """
             INSERT INTO ${tableName2} VALUES(2,2);
@@ -72,8 +86,15 @@ suite("test_base_rename_on_commit_mtmv","mtmv") {
 
     // after rename, should not refresh auto
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_rename "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
-    order_qt_select_rename "select * from ${mvName}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_rename "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+            order_qt_select_rename "select * from ${mvName}"
+        }
+    })
 
     // create t1
     sql """
@@ -92,14 +113,30 @@ suite("test_base_rename_on_commit_mtmv","mtmv") {
          """
 
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_recreate_auto "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
-    order_qt_select_recreate_auto "select * from ${mvName}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_recreate_auto "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+            order_qt_select_recreate_auto "select * from ${mvName}"
+
+            // t2 should not trigger refresh
+            order_qt_before_trigger "select count(*)  from tasks('type'='mv') 
where MvName='${mvName}'"
+        }
+    })
 
-    // t2 should not trigger refresh
-    order_qt_before_trigger "select count(*)  from tasks('type'='mv') where 
MvName='${mvName}'"
     sql """
              INSERT INTO ${tableName2} VALUES(4,4);
          """
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_after_trigger "select count(*)  from tasks('type'='mv') where 
MvName='${mvName}'"
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_after_trigger "select count(*)  from tasks('type'='mv') 
where MvName='${mvName}'"
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_rename_p_mv_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_rename_p_mv_multi_level_mtmv.groovy
index e7ba67650f9..f3a66e5704a 100644
--- 
a/regression-test/suites/mtmv_p0/test_base_rename_p_mv_multi_level_mtmv.groovy
+++ 
b/regression-test/suites/mtmv_p0/test_base_rename_p_mv_multi_level_mtmv.groovy
@@ -142,13 +142,21 @@ suite("test_base_rename_p_mv_multi_level_mtmv","mtmv") {
     sql """
         ALTER MATERIALIZED VIEW ${mvName1} rename ${mvName1Rename};
         """
-    order_qt_rename_mv_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1Rename}'"
-    order_qt_rename_mv_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_rename_mv_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_rename_mv_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
-    mv_rewrite_success_without_check_chosen(querySql, mvName1Rename)
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_rewrite_success_without_check_chosen(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
-    mv_not_part_in(querySql, mvName1)
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_rename_mv_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1Rename}'"
+            order_qt_rename_mv_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_rename_mv_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_rename_mv_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+            mv_rewrite_success_without_check_chosen(querySql, mvName1Rename)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_rewrite_success_without_check_chosen(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+            mv_not_part_in(querySql, mvName1)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_replace_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_replace_multi_level_mtmv.groovy
index d572a818a9b..a3d791e5337 100644
--- a/regression-test/suites/mtmv_p0/test_base_replace_multi_level_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_replace_multi_level_mtmv.groovy
@@ -127,15 +127,23 @@ suite("test_base_replace_multi_level_mtmv","mtmv") {
     sql """
         ALTER TABLE ${tableName1} REPLACE WITH TABLE ${tableName2} 
PROPERTIES('swap' = 'true');
         """
-    order_qt_replace_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_replace_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_replace_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_replace_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
-    mv_not_part_in(querySql, mvName2)
-    mv_not_part_in(querySql, mvName1)
-    mv_not_part_in(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_replace_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_replace_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_replace_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_replace_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+
+            mv_not_part_in(querySql, mvName2)
+            mv_not_part_in(querySql, mvName1)
+            mv_not_part_in(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 
     sql """
             REFRESH MATERIALIZED VIEW ${mvName1} auto
@@ -157,24 +165,39 @@ suite("test_base_replace_multi_level_mtmv","mtmv") {
         """
     waitingMTMVTaskFinishedByMvName(mvName4)
 
-    order_qt_refresh_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_refresh_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_refresh_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_refresh_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_refresh_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_refresh_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_refresh_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_refresh_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
 
 
-    mv_rewrite_success_without_check_chosen(querySql, mvName1)
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_rewrite_success_without_check_chosen(querySql, mvName3)
-    mv_rewrite_success_without_check_chosen(querySql, mvName4)
+            mv_rewrite_success_without_check_chosen(querySql, mvName1)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_rewrite_success_without_check_chosen(querySql, mvName3)
+            mv_rewrite_success_without_check_chosen(querySql, mvName4)
+        }
+    })
 
     // replace t1 swap false
     sql """
         ALTER TABLE ${tableName1} REPLACE WITH TABLE ${tableName2} 
PROPERTIES('swap' = 'false');
         """
-    order_qt_replace_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_replace_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_replace_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_replace_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_replace_t1_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_replace_t1_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_replace_t1_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_replace_t1_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+        }
+    })
 
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_replace_mv_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_replace_mv_multi_level_mtmv.groovy
index 410f28afd02..4602673975c 100644
--- 
a/regression-test/suites/mtmv_p0/test_base_replace_mv_multi_level_mtmv.groovy
+++ 
b/regression-test/suites/mtmv_p0/test_base_replace_mv_multi_level_mtmv.groovy
@@ -144,51 +144,87 @@ suite("test_base_replace_mv_multi_level_mtmv","mtmv") {
     sql """
         ALTER MATERIALIZED VIEW ${mvName1} REPLACE WITH MATERIALIZED VIEW 
${mvName11} PROPERTIES('swap' = 'true');;
         """
-    order_qt_replace_true_mv_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_replace_true_mv_mv11 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName11}'"
-    order_qt_replace_true_mv_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_replace_true_mv_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_replace_true_mv_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
-    // replace table will rename default partition name, so will change to 
async
-    mv_not_part_in(querySql, mvName1)
-    mv_not_part_in(querySql, mvName11)
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_rewrite_success_without_check_chosen(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_replace_true_mv_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_replace_true_mv_mv11 "select Name,State,RefreshState  
from mv_infos('database'='${dbName}') where Name='${mvName11}'"
+            order_qt_replace_true_mv_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_replace_true_mv_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_replace_true_mv_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
+            // replace table will rename default partition name, so will 
change to async
+            mv_not_part_in(querySql, mvName1)
+            mv_not_part_in(querySql, mvName11)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_rewrite_success_without_check_chosen(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 
     // after refresh,should can rewrite
     sql """
             REFRESH MATERIALIZED VIEW ${mvName1} auto
         """
     waitingMTMVTaskFinishedByMvName(mvName1)
-    mv_rewrite_success_without_check_chosen(querySql, mvName1)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            mv_rewrite_success_without_check_chosen(querySql, mvName1)
+        }
+    })
 
     // after refresh,should can rewrite
     sql """
             REFRESH MATERIALIZED VIEW ${mvName11} auto
         """
     waitingMTMVTaskFinishedByMvName(mvName11)
-    mv_rewrite_success_without_check_chosen(querySql, mvName11)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            mv_rewrite_success_without_check_chosen(querySql, mvName11)
+        }
+    })
 
     // replace mv1
     sql """
         ALTER MATERIALIZED VIEW ${mvName1} REPLACE WITH MATERIALIZED VIEW 
${mvName11} PROPERTIES('swap' = 'false');;
         """
-    order_qt_replace_false_mv_mv1 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName1}'"
-    order_qt_replace_false_mv_mv11 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName11}'"
-    order_qt_replace_false_mv_mv2 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName2}'"
-    order_qt_replace_false_mv_mv3 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName3}'"
-    order_qt_replace_false_mv_mv4 "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName4}'"
-    // replace table will rename default partition name, so will change to 
async
-    mv_not_part_in(querySql, mvName1)
-    mv_rewrite_success_without_check_chosen(querySql, mvName2)
-    mv_rewrite_success_without_check_chosen(querySql, mvName3)
-    mv_not_part_in(querySql, mvName4)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_replace_false_mv_mv1 "select Name,State,RefreshState  
from mv_infos('database'='${dbName}') where Name='${mvName1}'"
+            order_qt_replace_false_mv_mv11 "select Name,State,RefreshState  
from mv_infos('database'='${dbName}') where Name='${mvName11}'"
+            order_qt_replace_false_mv_mv2 "select Name,State,RefreshState  
from mv_infos('database'='${dbName}') where Name='${mvName2}'"
+            order_qt_replace_false_mv_mv3 "select Name,State,RefreshState  
from mv_infos('database'='${dbName}') where Name='${mvName3}'"
+            order_qt_replace_false_mv_mv4 "select Name,State,RefreshState  
from mv_infos('database'='${dbName}') where Name='${mvName4}'"
+            // replace table will rename default partition name, so will 
change to async
+            mv_not_part_in(querySql, mvName1)
+            mv_rewrite_success_without_check_chosen(querySql, mvName2)
+            mv_rewrite_success_without_check_chosen(querySql, mvName3)
+            mv_not_part_in(querySql, mvName4)
+        }
+    })
 
     // after refresh,should can rewrite
     sql """
             REFRESH MATERIALIZED VIEW ${mvName1} auto
         """
     waitingMTMVTaskFinishedByMvName(mvName1)
-    mv_rewrite_success_without_check_chosen(querySql, mvName1)
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            mv_rewrite_success_without_check_chosen(querySql, mvName1)
+        }
+    })
 }
diff --git 
a/regression-test/suites/mtmv_p0/test_base_replace_on_commit_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_base_replace_on_commit_mtmv.groovy
index 8e8c3f599b2..5d8a4f3eb3d 100644
--- a/regression-test/suites/mtmv_p0/test_base_replace_on_commit_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_base_replace_on_commit_mtmv.groovy
@@ -74,27 +74,58 @@ suite("test_base_replace_on_commit_mtmv","mtmv") {
             REFRESH MATERIALIZED VIEW ${mvName} auto
         """
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_select_init "select * from ${mvName}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_select_init "select * from ${mvName}"
+        }
+    })
 
     // replace
     sql """
         ALTER TABLE ${tableName1} REPLACE WITH TABLE ${tableName2} 
PROPERTIES('swap' = 'true');
         """
-    order_qt_replace "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_replace "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+        }
+    })
 
     sql """
             INSERT INTO ${tableName1} VALUES(2,2);
         """
 
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_replace "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
-    order_qt_select_replace "select * from ${mvName}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_replace_normal "select Name,State,RefreshState  from 
mv_infos('database'='${dbName}') where Name='${mvName}'"
+            order_qt_select_replace "select * from ${mvName}"
 
-    // t2 should not trigger refresh
-    order_qt_before_trigger "select count(*)  from tasks('type'='mv') where 
MvName='${mvName}'"
+
+            // t2 should not trigger refresh
+            order_qt_before_trigger "select count(*)  from tasks('type'='mv') 
where MvName='${mvName}'"
+
+        }
+    })
     sql """
              INSERT INTO ${tableName2} VALUES(20,20);
          """
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_after_trigger "select count(*)  from tasks('type'='mv') where 
MvName='${mvName}'"
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_after_trigger "select count(*)  from tasks('type'='mv') 
where MvName='${mvName}'"
+        }
+    })
 }
diff --git a/regression-test/suites/mtmv_p0/test_column_type_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_column_type_mtmv.groovy
index fdf03ad19da..867623f0acb 100644
--- a/regression-test/suites/mtmv_p0/test_column_type_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_column_type_mtmv.groovy
@@ -18,6 +18,7 @@
 import org.junit.Assert;
 
 suite("test_column_type_mtmv","mtmv") {
+    String dbName = context.config.getDbNameByFile(context.file)
     String suiteName = "test_column_type_mtmv"
     String tableName = "${suiteName}_table"
     String mvName = "${suiteName}_mv"
@@ -47,15 +48,38 @@ suite("test_column_type_mtmv","mtmv") {
         """
 
     waitingMTMVTaskFinishedByMvName(mvName)
-    order_qt_normal "select Name,State,RefreshState  from 
mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'"
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_normal "select Name,State,RefreshState  from 
mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'"
+        }
+    })
     sql """alter table ${tableName} modify column class_id bigint;"""
     assertEquals("FINISHED", getAlterColumnFinalState("${tableName}"))
-    order_qt_after_schema_change "select Name,State,RefreshState  from 
mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'"
+
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_after_schema_change "select Name,State,RefreshState  from 
mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'"
+        }
+    })
     sql """
          REFRESH MATERIALIZED VIEW ${mvName} auto;
      """
     def jobName = getJobName("regression_test_mtmv_p0", mvName);
     waitingMTMVTaskFinishedNotNeedSuccess(jobName)
     // can not be rewrite
-    order_qt_after_refresh "select Name,State,RefreshState  from 
mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_after_refresh "select Name,State,RefreshState  from 
mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'"
+        }
+    })
 }
diff --git a/regression-test/suites/mtmv_p0/test_recreate_table_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_recreate_table_mtmv.groovy
index ffae7398e3a..7ff44e27850 100644
--- a/regression-test/suites/mtmv_p0/test_recreate_table_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_recreate_table_mtmv.groovy
@@ -18,6 +18,7 @@
 import org.junit.Assert;
 
 suite("test_recreate_table_mtmv","mtmv") {
+    String dbName = context.config.getDbNameByFile(context.file)
     String suiteName = "test_recreate_table_mtmv"
     String tableName1 = "${suiteName}_table1"
     String tableName2 = "${suiteName}_table2"
@@ -63,7 +64,14 @@ suite("test_recreate_table_mtmv","mtmv") {
         ) AS (SELECT * FROM ${tableName1} );
     """
     waitingMTMVTaskFinishedByMvName(mvName1);
-    order_qt_mv1 "SELECT * FROM ${mvName1}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_mv1 "SELECT * FROM ${mvName1}"
+        }
+    })
     sql """
         CREATE MATERIALIZED VIEW IF NOT EXISTS ${mvName2} BUILD IMMEDIATE 
REFRESH AUTO ON COMMIT DISTRIBUTED BY RANDOM BUCKETS 2
         PROPERTIES (
@@ -71,7 +79,14 @@ suite("test_recreate_table_mtmv","mtmv") {
         ) AS (SELECT first_name,count(last_name) FROM ${mvName1} GROUP BY 
first_name);
         """
     waitingMTMVTaskFinishedByMvName(mvName2);
-    order_qt_mv2 "SELECT * FROM ${mvName2}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_mv2 "SELECT * FROM ${mvName2}"
+        }
+    })
     sql """drop materialized view if exists ${mvName1};"""
     sql """
             CREATE MATERIALIZED VIEW IF NOT EXISTS ${mvName1} BUILD IMMEDIATE 
REFRESH AUTO ON COMMIT DISTRIBUTED BY RANDOM BUCKETS 2
@@ -80,12 +95,26 @@ suite("test_recreate_table_mtmv","mtmv") {
             ) AS (SELECT * FROM ${tableName2} );
         """
     waitingMTMVTaskFinishedByMvName(mvName1);
-    order_qt_mv1_recreate "SELECT * FROM ${mvName1}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_mv1_recreate "SELECT * FROM ${mvName1}"
+        }
+    })
      sql """
             REFRESH MATERIALIZED VIEW ${mvName2} auto
         """
     waitingMTMVTaskFinishedByMvName(mvName2);
-    order_qt_mv2_recreate "SELECT * FROM ${mvName2}"
+    run_on_follower_and_master({ jdbc_url ->
+        connect(context.config.jdbcUser, context.config.jdbcPassword, 
jdbc_url) {
+            sql "sync"
+            sql """set enable_materialized_view_nest_rewrite = true;"""
+            sql "use ${dbName}"
+            order_qt_mv2_recreate "SELECT * FROM ${mvName2}"
+        }
+    })
 
     sql """drop table if exists `${tableName1}`"""
     sql """drop table if exists `${tableName2}`"""


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

Reply via email to