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 a12d20fffae branch-4.0: [test](nereids)fix sql cache of mtmv test case 
#57177 (#60733)
a12d20fffae is described below

commit a12d20fffae27a7bb9bdf9062a8ed7490a13ba01
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Sat Feb 14 10:57:56 2026 +0800

    branch-4.0: [test](nereids)fix sql cache of mtmv test case #57177 (#60733)
    
    Cherry-picked from #57177
    
    Co-authored-by: zfr95 <[email protected]>
---
 .../nereids_p0/cache/mtmv_with_sql_cache.groovy    | 1178 ++++++++++++++------
 1 file changed, 853 insertions(+), 325 deletions(-)

diff --git a/regression-test/suites/nereids_p0/cache/mtmv_with_sql_cache.groovy 
b/regression-test/suites/nereids_p0/cache/mtmv_with_sql_cache.groovy
index bd31e46373e..d10b015a553 100644
--- a/regression-test/suites/nereids_p0/cache/mtmv_with_sql_cache.groovy
+++ b/regression-test/suites/nereids_p0/cache/mtmv_with_sql_cache.groovy
@@ -16,9 +16,7 @@
 // under the License.
 
 import com.google.common.util.concurrent.Uninterruptibles
-
 import java.util.concurrent.TimeUnit
-import java.util.stream.Collectors
 
 /*
 When to use a direct query and when to use a query rewrite?
@@ -49,7 +47,6 @@ class CanRetryException extends IllegalStateException {
     }
 }
 
-
 suite("mtmv_with_sql_cache") {
     withGlobalLock("cache_last_version_interval_second") {
 
@@ -95,11 +92,11 @@ suite("mtmv_with_sql_cache") {
 
             sql """DROP MATERIALIZED VIEW IF EXISTS ${db}.${mv_name}"""
             sql"""
-                CREATE MATERIALIZED VIEW ${db}.${mv_name} 
-                BUILD IMMEDIATE REFRESH auto ON MANUAL 
-                PARTITION BY ${partition_col} 
-                DISTRIBUTED BY RANDOM BUCKETS 2 
-                PROPERTIES ('replication_num' = '1')  
+                CREATE MATERIALIZED VIEW ${db}.${mv_name}
+                BUILD IMMEDIATE REFRESH auto ON MANUAL
+                PARTITION BY ${partition_col}
+                DISTRIBUTED BY RANDOM BUCKETS 2
+                PROPERTIES ('replication_num' = '1')
                 AS ${mv_sql}
                 """
             def job_name = getJobName(db, mv_name);
@@ -130,327 +127,858 @@ suite("mtmv_with_sql_cache") {
         }
 
         String dbName = context.config.getDbNameByFile(context.file)
-        def prefix_str = "mtmv_with_sql_cache_"
-        def tb_name1 = prefix_str + "table1"
-        def tb_name2 = prefix_str + "table2"
-
-        def mv_name1 = prefix_str + "mtmv1"
-        def mv_name2 = prefix_str + "mtmv2"
-        def mv_name3 = prefix_str + "mtmv3"
-        def mv_name4 = prefix_str + "mtmv4"
-        def nested_mv_name1 = prefix_str + "nested_mtmv1"
-        def mtmv_sql1 = """
-                select t1.id as id, t2.value as value
-                from ${tb_name1} as t1
-                left join ${tb_name2} as t2
-                on t1.id = t2.id
-            """
-        def mtmv_sql2 = """
-                select t2.id as id, t2.value as value
-                from ${tb_name1} as t1
-                right join ${tb_name2} as t2
-                on t1.id = t2.id
-            """
-        def mtmv_sql3 = """
-                select t2.id as id, t1.value as value1 
-                from ${tb_name1} as t1
-                right join ${tb_name2} as t2
-                on t1.id = t2.id
-            """
-        def mtmv_sql4 = """
-                select t1.id as id, t1.value as value1 
-                from ${tb_name1} as t1
-                left join ${tb_name2} as t2
-                on t1.id = t2.id
-            """
-        def nested_mtmv_sql1 = """
-                select t1.id as id, t2.value as value
-                from ${mv_name1} as t1
-                left join ${mv_name2} as t2
-                on t1.id = t2.id
-            """
-        def nested_mtmv_sql3 = """
-                select t1.id as id, t2.value as value
-                from ${mv_name3} as t1
-                left join ${mv_name2} as t2
-                on t1.id = t2.id
-            """
 
         for (def __ in 0..3) {
-            retryTestSqlCache(3, 1000) {
-                createTestTable tb_name1
-                createTestTable tb_name2
-
-                sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name1};"""
-                sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name2};"""
-                sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name3};"""
-                sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name4};"""
-                sql """DROP MATERIALIZED VIEW IF EXISTS ${nested_mv_name1};"""
-                cur_create_async_partition_mv(dbName, mv_name1, mtmv_sql1, 
"(id)")
-                cur_create_async_partition_mv(dbName, mv_name2, mtmv_sql2, 
"(id)")
-                cur_create_async_partition_mv(dbName, mv_name4, mtmv_sql4, 
"(id)")
-                cur_create_async_partition_mv(dbName, nested_mv_name1, 
nested_mtmv_sql1, "(id)")
-
-                sleep(10000)
-                sql "set enable_nereids_planner=true"
-                sql "set enable_fallback_to_original_planner=false"
-                sql "set enable_sql_cache=true"
-
-                // Direct Query
-                assertNoCache "select * from ${mv_name1}"
-                assertNoCache "select * from ${mv_name2}"
-                assertNoCache "select * from ${mv_name4}"
-                assertNoCache "select * from ${nested_mv_name1}"
-                // mtmv rewrite
-                assertNoCache mtmv_sql1
-                assertNoCache mtmv_sql2
-                assertNoCache mtmv_sql4
-                assertNoCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache "select * from ${mv_name1}"
-                retryUntilHasSqlCache "select * from ${mv_name2}"
-                retryUntilHasSqlCache "select * from ${mv_name4}"
-                retryUntilHasSqlCache "select * from ${nested_mv_name1}"
-                retryUntilHasSqlCache mtmv_sql1
-                retryUntilHasSqlCache mtmv_sql2
-                retryUntilHasSqlCache mtmv_sql4
-                retryUntilHasSqlCache nested_mtmv_sql1
-
-                assertHasCache "select * from ${mv_name1}"
-                assertHasCache "select * from ${mv_name2}"
-                assertHasCache "select * from ${mv_name4}"
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache mtmv_sql1
-                assertHasCache mtmv_sql2
-                assertHasCache mtmv_sql4
-                assertHasCache nested_mtmv_sql1
-
-                // rename mtmv
-                sql """ALTER MATERIALIZED VIEW ${mv_name1} rename 
${mv_name3};"""
-                assertNoCache "select * from ${mv_name3}"
-                assertNoCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertNoCache nested_mtmv_sql3
-
-                sql """ALTER MATERIALIZED VIEW ${mv_name3} rename 
${mv_name1};"""
-                assertHasCache "select * from ${mv_name1}"  // Since this SQL 
query hasn't been executed before, so it's still valid now.
-                assertNoCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}" // nested 
mtmv don't change
-                assertHasCache nested_mtmv_sql1 // Since this SQL query hasn't 
been executed before, so it's still valid now.
-
-                retryUntilHasSqlCache mtmv_sql1
-                assertHasCache mtmv_sql1
-
-                // replace mtmv
-                sql """ALTER MATERIALIZED VIEW ${mv_name1} REPLACE WITH 
MATERIALIZED VIEW ${mv_name2};"""
-                assertNoCache "select * from ${mv_name1}"
-                assertNoCache "select * from ${mv_name2}"
-                assertNoCache mtmv_sql1
-                assertNoCache mtmv_sql2// -->   "select * from mv1/mv2" --> 
version change  --> nocache
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertNoCache nested_mtmv_sql1
-
-                sql """ALTER MATERIALIZED VIEW ${mv_name2} REPLACE WITH 
MATERIALIZED VIEW ${mv_name1};"""
-                assertNoCache "select * from ${mv_name1}"
-                assertNoCache "select * from ${mv_name2}"
-                assertNoCache mtmv_sql1
-                assertNoCache mtmv_sql2 // -->   "select * from mv1/mv2" --> 
version change  --> nocache
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertNoCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache "select * from ${mv_name1}"
-                retryUntilHasSqlCache "select * from ${mv_name2}"
-                retryUntilHasSqlCache mtmv_sql1
-                retryUntilHasSqlCache mtmv_sql2
-                retryUntilHasSqlCache "select * from ${nested_mv_name1}"
-                retryUntilHasSqlCache nested_mtmv_sql1
-
-                assertHasCache "select * from ${mv_name1}"
-                assertHasCache "select * from ${mv_name2}"
-                assertHasCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                // pause/resume mtmv don't affect the SQL cache's operation.
-                sql """PAUSE MATERIALIZED VIEW JOB ON ${mv_name1};"""
-                assertHasCache "select * from ${mv_name1}"
-                assertHasCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                sql """PAUSE MATERIALIZED VIEW JOB ON ${mv_name4};"""
-                assertHasCache "select * from ${mv_name4}"
-                assertHasCache mtmv_sql4
-
-                sql """RESUME MATERIALIZED VIEW JOB ON ${mv_name1};"""
-                assertHasCache "select * from ${mv_name1}"
-                assertHasCache mtmv_sql1
-
-                sql """RESUME MATERIALIZED VIEW JOB ON ${mv_name4};"""
-                assertHasCache "select * from ${mv_name4}"
-                assertHasCache mtmv_sql4
-
-                // To refresh the materialized view to ensure its initial 
performance is normal.
-                sql "REFRESH MATERIALIZED VIEW ${mv_name1} AUTO;"
-                waitingMTMVTaskFinishedByMvName(mv_name1)
-
-                sleep(10000)
-                assertHasCache "select * from ${mv_name1}"
-                assertHasCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                // refresh mtmv complete
-                sql "REFRESH MATERIALIZED VIEW ${mv_name1} complete;"
-                sleep(10000)
-                assertNoCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertNoCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache mtmv_sql1
-                retryUntilHasSqlCache "select * from ${mv_name1}"
-                retryUntilHasSqlCache nested_mtmv_sql1
-
-                assertHasCache mtmv_sql1
-                assertHasCache "select * from ${mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                // base table insert overwrite
-                sql "INSERT OVERWRITE table ${tb_name1} PARTITION(p5) VALUES 
(5, 6);"
-                sleep(10000)
-                assertHasCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache mtmv_sql1
-                assertHasCache mtmv_sql1
-
-                sql "REFRESH MATERIALIZED VIEW ${mv_name1} AUTO;"
-                waitingMTMVTaskFinishedByMvName(mv_name1)
-                sleep(10000)
-                assertNoCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertNoCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache "select * from ${mv_name1}"
-                retryUntilHasSqlCache nested_mtmv_sql1
-
-                assertHasCache "select * from ${mv_name1}"
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-
-                // add partition
-                sql "alter table ${tb_name1} add partition p6 
values[('6'),('7'))"
-                assertHasCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql1
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache mtmv_sql1
-                assertHasCache mtmv_sql1
-
-                // base table insert data
-                sql "insert into ${tb_name1} values(6, 1)"
-                sleep(10000)
-                assertHasCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql1  // mtmv no work -> directly base 
table -> no cache
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1  // nested mtmv no work -> 
mtmv cache work -> has cache
-
-                retryUntilHasSqlCache mtmv_sql1
-
-                // recreate mtmv to add column
-                cur_create_async_partition_mv(dbName, mv_name1, mtmv_sql3, 
"(id)")
-                sleep(10000)
-                assertNoCache "select * from ${mv_name1}"
-                assertHasCache "select * from ${mv_name2}"
-                assertNoCache mtmv_sql1
-                assertNoCache mtmv_sql4  // base table change, not hit 
mtmv1/mtmv4
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertNoCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache "select * from ${mv_name1}"
-                assertHasCache "select * from ${mv_name1}"
-
-                sql "REFRESH MATERIALIZED VIEW ${mv_name2} AUTO;"
-                waitingMTMVTaskFinishedByMvName(mv_name2)
-                sleep(10000)
-                assertNoCache "select * from ${mv_name2}"
-                retryUntilHasSqlCache "select * from ${mv_name2}"
-                assertHasCache "select * from ${mv_name2}"
-
-                retryUntilHasSqlCache mtmv_sql1
-                assertHasCache mtmv_sql1
-
-                retryUntilHasSqlCache mtmv_sql4
-                retryUntilHasSqlCache nested_mtmv_sql1
-                assertHasCache mtmv_sql4
-                assertHasCache nested_mtmv_sql1
-
-                // insert overwrite
-                sql "INSERT OVERWRITE table ${tb_name1} PARTITION(p4) VALUES 
(4, 6);"
-                sleep(10000)
-                assertHasCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql4
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache mtmv_sql4
-                assertHasCache mtmv_sql4
-
-                sql "REFRESH MATERIALIZED VIEW ${mv_name1} AUTO;"
-                waitingMTMVTaskFinishedByMvName(mv_name1)
-                sleep(10000)
-                assertNoCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql3 // base table change -> mtmv no work 
-> directly base table -> no cache
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertNoCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache "select * from ${mv_name1}"
-                retryUntilHasSqlCache nested_mtmv_sql1
-
-                sql "REFRESH MATERIALIZED VIEW ${mv_name4} AUTO;"
-                waitingMTMVTaskFinishedByMvName(mv_name4)
-                sleep(10000)
-                assertNoCache mtmv_sql4
-
-                assertHasCache "select * from ${mv_name1}"
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                // add partition
-                sql "alter table ${tb_name1} add partition p7 
values[('7'),('8'))"
-                assertHasCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql4
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                retryUntilHasSqlCache mtmv_sql4
-                assertHasCache mtmv_sql4
-
-                // insert data
-                sql "insert into ${tb_name1} values(7, 1)"
-                sleep(10000)
-                assertHasCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql3
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertHasCache nested_mtmv_sql1
-
-                sql "REFRESH MATERIALIZED VIEW ${mv_name1} AUTO;"
-                waitingMTMVTaskFinishedByMvName(mv_name1)
-                sleep(10000)
-                assertNoCache "select * from ${mv_name1}"
-                assertNoCache mtmv_sql3
-                assertHasCache "select * from ${nested_mv_name1}"
-                assertNoCache nested_mtmv_sql1
-            }
+            combineFutures(
+                    extraThread("testRenameMtmv", {
+                        retryTestSqlCache(3, 1000) {
+                            def prefix_str = "test_rename_mtmv_"
+                            def tb_name1 = prefix_str + "table1"
+                            def tb_name2 = prefix_str + "table2"
+
+                            def mv_name1 = prefix_str + "mtmv1"
+                            def mv_name2 = prefix_str + "mtmv2"
+                            def mv_name3 = prefix_str + "mtmv3"
+                            def mv_name4 = prefix_str + "mtmv4"
+                            def nested_mv_name1 = prefix_str + "nested_mtmv1"
+                            def mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql2 = """
+                                    select t2.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql4 = """
+                                    select t1.id as id, t1.value as value1
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name1} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql3 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name3} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+
+                            createTestTable tb_name1
+                            createTestTable tb_name2
+
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name1};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name2};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name3};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name4};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${nested_mv_name1};"""
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql1, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name2, 
mtmv_sql2, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name4, 
mtmv_sql4, "(id)")
+                            cur_create_async_partition_mv(dbName, 
nested_mv_name1, nested_mtmv_sql1, "(id)")
+
+                            sleep(10000)
+                            sql "set enable_nereids_planner=true"
+                            sql "set enable_fallback_to_original_planner=false"
+                            sql "set enable_sql_cache=true"
+
+                            // Direct Query
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache "select * from ${mv_name4}"
+                            assertNoCache "select * from ${nested_mv_name1}"
+                            // mtmv rewrite
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2
+                            assertNoCache mtmv_sql4
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache "select * from ${mv_name4}"
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache mtmv_sql4
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache mtmv_sql2
+                            assertHasCache mtmv_sql4
+                            assertHasCache nested_mtmv_sql1
+
+                            // rename mtmv
+                            sql """ALTER MATERIALIZED VIEW ${mv_name1} rename 
${mv_name3};"""
+                            assertNoCache "select * from ${mv_name3}"
+                            assertNoCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertNoCache nested_mtmv_sql3
+
+                            sql """ALTER MATERIALIZED VIEW ${mv_name3} rename 
${mv_name1};"""
+                            assertHasCache "select * from ${mv_name1}"  // 
Since this SQL query hasn't been executed before, so it's still valid now.
+                            assertNoCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}" 
// nested mtmv don't change
+                            assertHasCache nested_mtmv_sql1 // Since this SQL 
query hasn't been executed before, so it's still valid now.
+
+                            retryUntilHasSqlCache mtmv_sql1
+                            assertHasCache mtmv_sql1
+                        }
+                    }),
+
+                    extraThread("testReplaceMtmv", {
+                        retryTestSqlCache(3, 1000) {
+                            def prefix_str = "test_replace_mtmv_"
+                            def tb_name1 = prefix_str + "table1"
+                            def tb_name2 = prefix_str + "table2"
+
+                            def mv_name1 = prefix_str + "mtmv1"
+                            def mv_name2 = prefix_str + "mtmv2"
+                            def mv_name3 = prefix_str + "mtmv3"
+                            def mv_name4 = prefix_str + "mtmv4"
+                            def nested_mv_name1 = prefix_str + "nested_mtmv1"
+                            def mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql2 = """
+                                    select t2.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql4 = """
+                                    select t1.id as id, t1.value as value1 
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name1} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+
+                            createTestTable tb_name1
+                            createTestTable tb_name2
+
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name1};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name2};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name3};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name4};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${nested_mv_name1};"""
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql1, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name2, 
mtmv_sql2, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name4, 
mtmv_sql4, "(id)")
+                            cur_create_async_partition_mv(dbName, 
nested_mv_name1, nested_mtmv_sql1, "(id)")
+
+                            sleep(10000)
+                            sql "set enable_nereids_planner=true"
+                            sql "set enable_fallback_to_original_planner=false"
+                            sql "set enable_sql_cache=true"
+
+                            // Direct Query
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache "select * from ${mv_name4}"
+                            assertNoCache "select * from ${nested_mv_name1}"
+                            // mtmv rewrite
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2
+                            assertNoCache mtmv_sql4
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache "select * from ${mv_name4}"
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache mtmv_sql4
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache mtmv_sql2
+                            assertHasCache mtmv_sql4
+                            assertHasCache nested_mtmv_sql1
+
+                            // replace mtmv
+                            sql """ALTER MATERIALIZED VIEW ${mv_name1} REPLACE 
WITH MATERIALIZED VIEW ${mv_name2};"""
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2// -->   "select * from 
mv1/mv2" --> version change  --> nocache
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertNoCache nested_mtmv_sql1
+
+                            sql """ALTER MATERIALIZED VIEW ${mv_name2} REPLACE 
WITH MATERIALIZED VIEW ${mv_name1};"""
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2 // -->   "select * from 
mv1/mv2" --> version change  --> nocache
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache nested_mtmv_sql1
+                        }
+                    }),
+
+                    extraThread("testPauseResumeMtmv", {
+                        retryTestSqlCache(3, 1000) {
+                            def prefix_str = "test_pause_resume_mtmv_"
+                            def tb_name1 = prefix_str + "table1"
+                            def tb_name2 = prefix_str + "table2"
+
+                            def mv_name1 = prefix_str + "mtmv1"
+                            def mv_name2 = prefix_str + "mtmv2"
+                            def mv_name3 = prefix_str + "mtmv3"
+                            def mv_name4 = prefix_str + "mtmv4"
+                            def nested_mv_name1 = prefix_str + "nested_mtmv1"
+                            def mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql2 = """
+                                    select t2.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql4 = """
+                                    select t1.id as id, t1.value as value1 
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name1} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+
+                            createTestTable tb_name1
+                            createTestTable tb_name2
+
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name1};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name2};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name3};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name4};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${nested_mv_name1};"""
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql1, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name2, 
mtmv_sql2, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name4, 
mtmv_sql4, "(id)")
+                            cur_create_async_partition_mv(dbName, 
nested_mv_name1, nested_mtmv_sql1, "(id)")
+
+                            sleep(10000)
+                            sql "set enable_nereids_planner=true"
+                            sql "set enable_fallback_to_original_planner=false"
+                            sql "set enable_sql_cache=true"
+
+                            // Direct Query
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache "select * from ${mv_name4}"
+                            assertNoCache "select * from ${nested_mv_name1}"
+                            // mtmv rewrite
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2
+                            assertNoCache mtmv_sql4
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache "select * from ${mv_name4}"
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache mtmv_sql4
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache mtmv_sql2
+                            assertHasCache mtmv_sql4
+                            assertHasCache nested_mtmv_sql1
+
+                            // pause/resume mtmv don't affect the SQL cache's 
operation.
+                            sql """PAUSE MATERIALIZED VIEW JOB ON 
${mv_name1};"""
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache nested_mtmv_sql1
+
+                            sql """PAUSE MATERIALIZED VIEW JOB ON 
${mv_name4};"""
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache mtmv_sql4
+
+                            sql """RESUME MATERIALIZED VIEW JOB ON 
${mv_name1};"""
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache mtmv_sql1
+
+                            sql """RESUME MATERIALIZED VIEW JOB ON 
${mv_name4};"""
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache mtmv_sql4
+                        }
+                    }),
+                    extraThread("testRefreshAutoMtmv", {
+                        retryTestSqlCache(3, 1000) {
+                            def prefix_str = "test_refresh_auto_mtmv_"
+                            def tb_name1 = prefix_str + "table1"
+                            def tb_name2 = prefix_str + "table2"
+
+                            def mv_name1 = prefix_str + "mtmv1"
+                            def mv_name2 = prefix_str + "mtmv2"
+                            def mv_name3 = prefix_str + "mtmv3"
+                            def mv_name4 = prefix_str + "mtmv4"
+                            def nested_mv_name1 = prefix_str + "nested_mtmv1"
+                            def mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql2 = """
+                                    select t2.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql4 = """
+                                    select t1.id as id, t1.value as value1 
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name1} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+
+                            createTestTable tb_name1
+                            createTestTable tb_name2
+
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name1};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name2};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name3};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name4};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${nested_mv_name1};"""
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql1, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name2, 
mtmv_sql2, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name4, 
mtmv_sql4, "(id)")
+                            cur_create_async_partition_mv(dbName, 
nested_mv_name1, nested_mtmv_sql1, "(id)")
+
+                            sleep(10000)
+                            sql "set enable_nereids_planner=true"
+                            sql "set enable_fallback_to_original_planner=false"
+                            sql "set enable_sql_cache=true"
+
+                            // Direct Query
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache "select * from ${mv_name4}"
+                            assertNoCache "select * from ${nested_mv_name1}"
+                            // mtmv rewrite
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2
+                            assertNoCache mtmv_sql4
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache "select * from ${mv_name4}"
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache mtmv_sql4
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache mtmv_sql2
+                            assertHasCache mtmv_sql4
+                            assertHasCache nested_mtmv_sql1
+
+                            // To refresh the materialized view to ensure its 
initial performance is normal.
+                            sql "REFRESH MATERIALIZED VIEW ${mv_name1} AUTO;"
+                            waitingMTMVTaskFinishedByMvName(mv_name1)
+
+                            sleep(10000)
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache nested_mtmv_sql1
+                        }
+                    }),
+
+                    extraThread("testRefreshCompleteMtmv", {
+                        retryTestSqlCache(3, 1000) {
+                            def prefix_str = "test_refresh_complete_mtmv_"
+                            def tb_name1 = prefix_str + "table1"
+                            def tb_name2 = prefix_str + "table2"
+
+                            def mv_name1 = prefix_str + "mtmv1"
+                            def mv_name2 = prefix_str + "mtmv2"
+                            def mv_name3 = prefix_str + "mtmv3"
+                            def mv_name4 = prefix_str + "mtmv4"
+                            def nested_mv_name1 = prefix_str + "nested_mtmv1"
+                            def mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql2 = """
+                                    select t2.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql4 = """
+                                    select t1.id as id, t1.value as value1 
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name1} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+
+                            createTestTable tb_name1
+                            createTestTable tb_name2
+
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name1};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name2};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name3};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name4};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${nested_mv_name1};"""
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql1, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name2, 
mtmv_sql2, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name4, 
mtmv_sql4, "(id)")
+                            cur_create_async_partition_mv(dbName, 
nested_mv_name1, nested_mtmv_sql1, "(id)")
+
+                            sleep(10000)
+                            sql "set enable_nereids_planner=true"
+                            sql "set enable_fallback_to_original_planner=false"
+                            sql "set enable_sql_cache=true"
+
+                            // Direct Query
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache "select * from ${mv_name4}"
+                            assertNoCache "select * from ${nested_mv_name1}"
+                            // mtmv rewrite
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2
+                            assertNoCache mtmv_sql4
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache "select * from ${mv_name4}"
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache mtmv_sql4
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache mtmv_sql2
+                            assertHasCache mtmv_sql4
+                            assertHasCache nested_mtmv_sql1
+
+                            // refresh mtmv complete
+                            sql "REFRESH MATERIALIZED VIEW ${mv_name1} 
complete;"
+                            sleep(10000)
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache mtmv_sql1
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache nested_mtmv_sql1
+                        }
+                    }),
+                    extraThread("testInsertOverwriteMtmv", {
+                        retryTestSqlCache(3, 1000) {
+                            def prefix_str = "test_insert_overwrite_mtmv_"
+                            def tb_name1 = prefix_str + "table1"
+                            def tb_name2 = prefix_str + "table2"
+
+                            def mv_name1 = prefix_str + "mtmv1"
+                            def mv_name2 = prefix_str + "mtmv2"
+                            def mv_name3 = prefix_str + "mtmv3"
+                            def mv_name4 = prefix_str + "mtmv4"
+                            def nested_mv_name1 = prefix_str + "nested_mtmv1"
+                            def mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql2 = """
+                                    select t2.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql4 = """
+                                    select t1.id as id, t1.value as value1 
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name1} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+
+                            createTestTable tb_name1
+                            createTestTable tb_name2
+
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name1};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name2};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name3};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name4};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${nested_mv_name1};"""
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql1, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name2, 
mtmv_sql2, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name4, 
mtmv_sql4, "(id)")
+                            cur_create_async_partition_mv(dbName, 
nested_mv_name1, nested_mtmv_sql1, "(id)")
+
+                            sleep(10000)
+                            sql "set enable_nereids_planner=true"
+                            sql "set enable_fallback_to_original_planner=false"
+                            sql "set enable_sql_cache=true"
+
+                            // Direct Query
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache "select * from ${mv_name4}"
+                            assertNoCache "select * from ${nested_mv_name1}"
+                            // mtmv rewrite
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2
+                            assertNoCache mtmv_sql4
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache "select * from ${mv_name4}"
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache mtmv_sql4
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache mtmv_sql2
+                            assertHasCache mtmv_sql4
+                            assertHasCache nested_mtmv_sql1
+
+                            // base table insert overwrite
+                            sql "INSERT OVERWRITE table ${tb_name1} 
PARTITION(p5) VALUES (5, 6);"
+                            sleep(10000)
+                            assertHasCache "select * from ${mv_name1}"
+                            assertNoCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache mtmv_sql1
+                            assertHasCache mtmv_sql1
+
+                            sql "REFRESH MATERIALIZED VIEW ${mv_name1} AUTO;"
+                            waitingMTMVTaskFinishedByMvName(mv_name1)
+                            sleep(30 * 1000)
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache nested_mtmv_sql1
+                        }
+                    }),
+                    extraThread("testInsertIntoMtmv", {
+                        retryTestSqlCache(3, 1000) {
+                            def prefix_str = "test_insert_into_mtmv_"
+                            def tb_name1 = prefix_str + "table1"
+                            def tb_name2 = prefix_str + "table2"
+
+                            def mv_name1 = prefix_str + "mtmv1"
+                            def mv_name2 = prefix_str + "mtmv2"
+                            def mv_name3 = prefix_str + "mtmv3"
+                            def mv_name4 = prefix_str + "mtmv4"
+                            def nested_mv_name1 = prefix_str + "nested_mtmv1"
+                            def mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql2 = """
+                                    select t2.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql4 = """
+                                    select t1.id as id, t1.value as value1 
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name1} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+
+                            createTestTable tb_name1
+                            createTestTable tb_name2
+
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name1};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name2};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name3};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name4};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${nested_mv_name1};"""
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql1, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name2, 
mtmv_sql2, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name4, 
mtmv_sql4, "(id)")
+                            cur_create_async_partition_mv(dbName, 
nested_mv_name1, nested_mtmv_sql1, "(id)")
+
+                            sleep(10000)
+                            sql "set enable_nereids_planner=true"
+                            sql "set enable_fallback_to_original_planner=false"
+                            sql "set enable_sql_cache=true"
+
+                            // Direct Query
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache "select * from ${mv_name4}"
+                            assertNoCache "select * from ${nested_mv_name1}"
+                            // mtmv rewrite
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2
+                            assertNoCache mtmv_sql4
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache "select * from ${mv_name4}"
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache mtmv_sql4
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache mtmv_sql2
+                            assertHasCache mtmv_sql4
+                            assertHasCache nested_mtmv_sql1
+
+                            // add partition
+                            sql "alter table ${tb_name1} add partition p6 
values[('6'),('7'))"
+                            assertHasCache "select * from ${mv_name1}"
+                            assertNoCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache mtmv_sql1
+                            assertHasCache mtmv_sql1
+
+                            // base table insert data
+                            sql "insert into ${tb_name1} values(6, 1)"
+                            sleep(10000)
+                            assertHasCache "select * from ${mv_name1}"
+                            assertNoCache mtmv_sql1  // mtmv no work -> 
directly base table -> no cache
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache nested_mtmv_sql1  // nested mtmv no 
work -> mtmv cache work -> has cache
+
+                            retryUntilHasSqlCache mtmv_sql1
+                        }
+                    }),
+                    extraThread("testAddColumnMtmv", {
+                        retryTestSqlCache(3, 1000) {
+                            def prefix_str = "test_add_column_mtmv_"
+                            def tb_name1 = prefix_str + "table1"
+                            def tb_name2 = prefix_str + "table2"
+
+                            def mv_name1 = prefix_str + "mtmv1"
+                            def mv_name2 = prefix_str + "mtmv2"
+                            def mv_name3 = prefix_str + "mtmv3"
+                            def mv_name4 = prefix_str + "mtmv4"
+                            def nested_mv_name1 = prefix_str + "nested_mtmv1"
+                            def mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql2 = """
+                                    select t2.id as id, t2.value as value
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql3 = """
+                                    select t2.id as id, t1.value as value1 
+                                    from ${tb_name1} as t1
+                                    right join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def mtmv_sql4 = """
+                                    select t1.id as id, t1.value as value1 
+                                    from ${tb_name1} as t1
+                                    left join ${tb_name2} as t2
+                                    on t1.id = t2.id
+                                """
+                            def nested_mtmv_sql1 = """
+                                    select t1.id as id, t2.value as value
+                                    from ${mv_name1} as t1
+                                    left join ${mv_name2} as t2
+                                    on t1.id = t2.id
+                                """
+
+                            createTestTable tb_name1
+                            createTestTable tb_name2
+
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name1};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name2};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name3};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${mv_name4};"""
+                            sql """DROP MATERIALIZED VIEW IF EXISTS 
${nested_mv_name1};"""
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql1, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name2, 
mtmv_sql2, "(id)")
+                            cur_create_async_partition_mv(dbName, mv_name4, 
mtmv_sql4, "(id)")
+                            cur_create_async_partition_mv(dbName, 
nested_mv_name1, nested_mtmv_sql1, "(id)")
+
+                            sleep(10000)
+                            sql "set enable_nereids_planner=true"
+                            sql "set enable_fallback_to_original_planner=false"
+                            sql "set enable_sql_cache=true"
+
+                            // Direct Query
+                            assertNoCache "select * from ${mv_name1}"
+                            assertNoCache "select * from ${mv_name2}"
+                            assertNoCache "select * from ${mv_name4}"
+                            assertNoCache "select * from ${nested_mv_name1}"
+                            // mtmv rewrite
+                            assertNoCache mtmv_sql1
+                            assertNoCache mtmv_sql2
+                            assertNoCache mtmv_sql4
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            retryUntilHasSqlCache "select * from ${mv_name2}"
+                            retryUntilHasSqlCache "select * from ${mv_name4}"
+                            retryUntilHasSqlCache "select * from 
${nested_mv_name1}"
+                            retryUntilHasSqlCache mtmv_sql1
+                            retryUntilHasSqlCache mtmv_sql2
+                            retryUntilHasSqlCache mtmv_sql4
+                            retryUntilHasSqlCache nested_mtmv_sql1
+
+                            assertHasCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertHasCache "select * from ${mv_name4}"
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertHasCache mtmv_sql1
+                            assertHasCache mtmv_sql2
+                            assertHasCache mtmv_sql4
+                            assertHasCache nested_mtmv_sql1
+
+                            // recreate mtmv to add column
+                            cur_create_async_partition_mv(dbName, mv_name1, 
mtmv_sql3, "(id)")
+                            sleep(15 * 1000)
+                            assertNoCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name2}"
+                            assertNoCache mtmv_sql1
+                            assertHasCache "select * from ${nested_mv_name1}"
+                            assertNoCache nested_mtmv_sql1
+
+                            retryUntilHasSqlCache "select * from ${mv_name1}"
+                            assertHasCache "select * from ${mv_name1}"
+
+                            sql "REFRESH MATERIALIZED VIEW ${mv_name2} AUTO;"
+                            waitingMTMVTaskFinishedByMvName(mv_name2)
+                            sleep(10000)
+                            assertHasCache "select * from ${mv_name2}"
+
+                            retryUntilHasSqlCache mtmv_sql1
+                            assertHasCache mtmv_sql1
+                            retryUntilHasSqlCache nested_mtmv_sql1
+                            assertHasCache nested_mtmv_sql1
+                        }
+                    })
+            ).get()
         }
 
-
     }
 
 


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

Reply via email to