zfr9527 commented on code in PR #41145:
URL: https://github.com/apache/doris/pull/41145#discussion_r1778122401


##########
regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy:
##########
@@ -1641,26 +1649,177 @@ class Suite implements GroovyInterceptable {
         """
         def job_name = getJobName(db, mv_name);
         waitingMTMVTaskFinished(job_name)
-        sql "analyze table ${mv_name} with sync;"
     }
 
+    // mv not part in rewrite process
     def mv_not_part_in = { query_sql, mv_name ->
+        logger.info("query_sql = " + query_sql)
         explain {
             sql(" memo plan ${query_sql}")
-            notContains("${mv_name} chose")
-            notContains("${mv_name} not chose")
-            notContains("${mv_name} fail")
+            check { result ->
+                boolean success = !result.contains("${mv_name} chose") && 
!result.contains("${mv_name} not chose")
+                && !result.contains("${mv_name} fail")
+                Assert.assertEquals(true, success)
+            }
+        }
+    }
+
+    // multi mv all not part in rewrite process
+    def mv_all_not_part_in = { query_sql, mv_names ->
+        logger.info("query_sql = " + query_sql)
+        explain {
+            sql(" memo plan ${query_sql}")
+            check { result ->
+                boolean success = true;
+                for (String mv_name : mv_names) {
+                    success = !result.contains("${mv_name} chose") && 
!result.contains("${mv_name} not chose")
+                            && !result.contains("${mv_name} fail")
+                }
+                Assert.assertEquals(true, success)
+            }
         }
     }
 
-    def mv_rewrite_success = { query_sql, mv_name ->
+    // mv part in rewrite process, rewrte success and chosen by cbo
+    // sync_cbo_rewrite is the bool value which control sync mv is use cbo 
based mv rewrite
+    def mv_rewrite_success = { query_sql, mv_name, sync_cbo_rewrite = true ->
+        logger.info("query_sql = " + query_sql)
+        if (!sync_cbo_rewrite) {
+            explain {
+                sql("${query_sql}")
+                contains("(${mv_name})")
+            }
+            return
+        }
         explain {
             sql(" memo plan ${query_sql}")
             contains("${mv_name} chose")
         }
     }
 
-    def mv_rewrite_success_without_check_chosen = { query_sql, mv_name ->
+    // multi mv part in rewrite process, all rewrte success and chosen by cbo
+    def mv_rewrite_all_success = { query_sql, mv_names, sync_cbo_rewrite = 
true ->
+        logger.info("query_sql = " + query_sql)
+        if (!sync_cbo_rewrite) {
+            explain {
+                sql("${query_sql}")
+                check { result ->
+                    boolean success = true;
+                    for (String mv_name : mv_names) {
+                        success = success && result.contains("(${mv_name})")
+                    }
+                    Assert.assertEquals(true, success)
+                }
+            }
+            return
+        }
+        explain {
+            sql(" memo plan ${query_sql}")
+            check { result ->
+                boolean success = true;
+                for (String mv_name : mv_names) {
+                    success = success && result.contains("${mv_name} chose")
+                }
+                Assert.assertEquals(true, success)
+            }
+        }
+    }
+
+    // multi mv part in rewrite process, any of them rewrte success and chosen 
by cbo
+    def mv_rewrite_any_success = { query_sql, mv_names, sync_cbo_rewrite = 
true ->
+        logger.info("query_sql = " + query_sql)
+        if (!sync_cbo_rewrite) {
+            explain {
+                sql("${query_sql}")
+                check { result ->
+                    boolean success = false;
+                    for (String mv_name : mv_names) {
+                        success = success || result.contains("(${mv_name})")
+                    }
+                    Assert.assertEquals(true, success)
+                }
+            }
+            return
+        }
+        explain {
+            sql(" memo plan ${query_sql}")
+            check { result ->
+                boolean success = false;
+                for (String mv_name : mv_names) {
+                    success = success || result.contains("${mv_name} chose")
+                }
+                Assert.assertEquals(true, success)
+            }
+        }
+    }
+
+    // multi mv part in rewrite process, all rewrte success without check if 
chosen by cbo
+    def mv_rewrite_all_success_without_check_chosen = { query_sql, mv_names, 
sync_cbo_rewrite = true ->
+        logger.info("query_sql = " + query_sql)
+        if (!sync_cbo_rewrite) {
+            explain {
+                sql("${query_sql}")
+                check { result ->
+                    boolean success = true;
+                    for (String mv_name : mv_names) {
+                        success = success && result.contains("(${mv_name})")
+                    }
+                    Assert.assertEquals(true, success)
+                }
+            }
+            return
+        }
+        explain {
+            sql(" memo plan ${query_sql}")
+            check {result ->
+                boolean success = true
+                for (String mv_name : mv_names) {
+                    boolean stepSuccess = result.contains("${mv_name} chose") 
|| result.contains("${mv_name} not chose")
+                    success = success && stepSuccess
+                }
+                Assert.assertEquals(true, success)
+            }
+        }
+    }
+
+    // multi mv part in rewrite process, any of them rewrte success without 
check if chosen by cbo or not
+    def mv_rewrite_any_success_without_check_chosen = { query_sql, mv_names, 
sync_cbo_rewrite = true ->

Review Comment:
   It can automatically adjust the switch according to the version number?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to