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

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 0c9ce7206d2  [fix](mtmv) Fix collecting mv candidates when dml 
controlled by enable_dml_materialized_view_rewrite switch (#48374)
0c9ce7206d2 is described below

commit 0c9ce7206d2b86a0b692b8d482af248eabc19525
Author: seawinde <w...@selectdb.com>
AuthorDate: Tue Mar 18 20:15:19 2025 +0800

     [fix](mtmv) Fix collecting mv candidates when dml controlled by 
enable_dml_materialized_view_rewrite switch (#48374)
    
    fix collecting mv candidates when dml controlled by
    enable_dml_materialized_view_rewrite switch
    
    if we run set command as following:
    
    set global enable_dml_materialized_view_rewrite = false;
    
    
    when we run refresh command as following
    
    refresh materialized view mv_name complete;
    
    
    should not try to collect candidates for mv rewritting, but now would
    collect candidates
---
 .../java/org/apache/doris/nereids/CascadesContext.java    |  6 +++---
 .../java/org/apache/doris/nereids/StatementContext.java   |  5 +++--
 .../org/apache/doris/nereids/jobs/executor/Analyzer.java  |  2 --
 ...Collector.java => TableCollectAndHookInitializer.java} |  8 +++++---
 .../java/org/apache/doris/nereids/rules/RuleType.java     |  1 +
 .../rules/analysis/AddInitMaterializationHook.java        | 15 +++++++++++----
 .../doris/nereids/rules/analysis/CollectRelation.java     | 12 +++++++++++-
 .../src/main/java/org/apache/doris/qe/StmtExecutor.java   |  4 ----
 8 files changed, 34 insertions(+), 19 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java
index 4f81dde82d9..5944ce693da 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java
@@ -23,7 +23,7 @@ import org.apache.doris.nereids.hint.Hint;
 import org.apache.doris.nereids.jobs.Job;
 import org.apache.doris.nereids.jobs.JobContext;
 import org.apache.doris.nereids.jobs.executor.Analyzer;
-import org.apache.doris.nereids.jobs.executor.TableCollector;
+import org.apache.doris.nereids.jobs.executor.TableCollectAndHookInitializer;
 import org.apache.doris.nereids.jobs.rewrite.RewriteBottomUpJob;
 import org.apache.doris.nereids.jobs.rewrite.RewriteTopDownJob;
 import 
org.apache.doris.nereids.jobs.rewrite.RootPlanTreeRewriteJob.RootRewriteJobContext;
@@ -224,8 +224,8 @@ public class CascadesContext implements ScheduleContext {
         this.memo = new Memo(getConnectContext(), plan);
     }
 
-    public TableCollector newTableCollector() {
-        return new TableCollector(this);
+    public TableCollectAndHookInitializer newTableCollector() {
+        return new TableCollectAndHookInitializer(this);
     }
 
     public Analyzer newAnalyzer() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java
index e1f290999f1..4f0e7c27efd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java
@@ -74,6 +74,7 @@ import java.util.BitSet;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -203,7 +204,7 @@ public class StatementContext implements Closeable {
 
     private FormatOptions formatOptions = FormatOptions.getDefault();
 
-    private final List<PlannerHook> plannerHooks = new ArrayList<>();
+    private final Set<PlannerHook> plannerHooks = new HashSet<>();
 
     private String disableJoinReorderReason;
 
@@ -646,7 +647,7 @@ public class StatementContext implements Closeable {
         return formatOptions;
     }
 
-    public List<PlannerHook> getPlannerHooks() {
+    public Set<PlannerHook> getPlannerHooks() {
         return plannerHooks;
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java
index e05fead5901..e7bf9a57358 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java
@@ -19,7 +19,6 @@ package org.apache.doris.nereids.jobs.executor;
 
 import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.jobs.rewrite.RewriteJob;
-import org.apache.doris.nereids.rules.analysis.AddInitMaterializationHook;
 import 
org.apache.doris.nereids.rules.analysis.AdjustAggregateNullableForEmptySet;
 import org.apache.doris.nereids.rules.analysis.AnalyzeCTE;
 import org.apache.doris.nereids.rules.analysis.BindExpression;
@@ -106,7 +105,6 @@ public class Analyzer extends AbstractBatchJobExecutor {
             bottomUp(new BindExpression()),
             topDown(new BindSink()),
             bottomUp(new CheckAfterBind()),
-            bottomUp(new AddInitMaterializationHook()),
             topDown(new FillUpQualifyMissingSlot()),
             bottomUp(
                     new ProjectToGlobalAggregate(),
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/TableCollector.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/TableCollectAndHookInitializer.java
similarity index 85%
rename from 
fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/TableCollector.java
rename to 
fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/TableCollectAndHookInitializer.java
index 0ae433262ef..01ce6687ecb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/TableCollector.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/TableCollectAndHookInitializer.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.jobs.executor;
 
 import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.jobs.rewrite.RewriteJob;
+import org.apache.doris.nereids.rules.analysis.AddInitMaterializationHook;
 import org.apache.doris.nereids.rules.analysis.CollectRelation;
 import org.apache.doris.nereids.trees.plans.logical.LogicalView;
 
@@ -30,7 +31,7 @@ import java.util.List;
  * Bind symbols according to metadata in the catalog, perform semantic 
analysis, etc.
  * TODO: revisit the interface after subquery analysis is supported.
  */
-public class TableCollector extends AbstractBatchJobExecutor {
+public class TableCollectAndHookInitializer extends AbstractBatchJobExecutor {
 
     public static final List<RewriteJob> COLLECT_JOBS = 
buildCollectTableJobs();
 
@@ -39,7 +40,7 @@ public class TableCollector extends AbstractBatchJobExecutor {
      *
      * @param cascadesContext current context for analyzer
      */
-    public TableCollector(CascadesContext cascadesContext) {
+    public TableCollectAndHookInitializer(CascadesContext cascadesContext) {
         super(cascadesContext);
 
     }
@@ -59,12 +60,13 @@ public class TableCollector extends 
AbstractBatchJobExecutor {
     private static List<RewriteJob> buildCollectTableJobs() {
         return notTraverseChildrenOf(
                 ImmutableSet.of(LogicalView.class),
-                TableCollector::buildCollectorJobs
+                TableCollectAndHookInitializer::buildCollectorJobs
         );
     }
 
     private static List<RewriteJob> buildCollectorJobs() {
         return jobs(
+                topDown(new AddInitMaterializationHook()),
                 topDown(new CollectRelation())
         );
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java
index 0be26955b88..9cee3077f13 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java
@@ -41,6 +41,7 @@ public enum RuleType {
     BINDING_INSERT_TARGET_TABLE(RuleTypeClass.REWRITE),
     INIT_MATERIALIZATION_HOOK_FOR_FILE_SINK(RuleTypeClass.REWRITE),
     INIT_MATERIALIZATION_HOOK_FOR_TABLE_SINK(RuleTypeClass.REWRITE),
+    INIT_MATERIALIZATION_HOOK_FOR_RESULT_SINK(RuleTypeClass.REWRITE),
     BINDING_INSERT_FILE(RuleTypeClass.REWRITE),
     BINDING_ONE_ROW_RELATION_SLOT(RuleTypeClass.REWRITE),
     BINDING_RELATION(RuleTypeClass.REWRITE),
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/AddInitMaterializationHook.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/AddInitMaterializationHook.java
index bf19c4311d7..8e52942c99c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/AddInitMaterializationHook.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/AddInitMaterializationHook.java
@@ -20,7 +20,7 @@ package org.apache.doris.nereids.rules.analysis;
 import org.apache.doris.nereids.rules.Rule;
 import org.apache.doris.nereids.rules.RuleType;
 import 
org.apache.doris.nereids.rules.exploration.mv.InitConsistentMaterializationContextHook;
-import org.apache.doris.nereids.trees.plans.logical.LogicalTableSink;
+import 
org.apache.doris.nereids.rules.exploration.mv.InitMaterializationContextHook;
 
 import com.google.common.collect.ImmutableList;
 
@@ -28,7 +28,7 @@ import java.util.List;
 
 /**
  * Add init materialization hook for table sink and file sink
- * */
+ */
 public class AddInitMaterializationHook implements AnalysisRuleFactory {
 
     @Override
@@ -41,13 +41,20 @@ public class AddInitMaterializationHook implements 
AnalysisRuleFactory {
                             }
                             return ctx.root;
                         })),
-                RuleType.INIT_MATERIALIZATION_HOOK_FOR_TABLE_SINK.build(
-                        any().when(LogicalTableSink.class::isInstance)
+                
RuleType.INIT_MATERIALIZATION_HOOK_FOR_TABLE_SINK.build(unboundTableSink()
                         .thenApply(ctx -> {
                             if 
(ctx.connectContext.getSessionVariable().isEnableDmlMaterializedViewRewrite()) {
                                 
ctx.statementContext.addPlannerHook(InitConsistentMaterializationContextHook.INSTANCE);
                             }
                             return ctx.root;
+                        })),
+                
RuleType.INIT_MATERIALIZATION_HOOK_FOR_RESULT_SINK.build(unboundResultSink()
+                        .thenApply(ctx -> {
+                            if 
(ctx.connectContext.getSessionVariable().isEnableMaterializedViewRewrite()
+                                    && 
ctx.connectContext.getState().isQuery()) {
+                                
ctx.statementContext.addPlannerHook(InitMaterializationContextHook.INSTANCE);
+                            }
+                            return ctx.root;
                         }))
         );
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CollectRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CollectRelation.java
index bafdd5646be..3623eecf826 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CollectRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CollectRelation.java
@@ -25,6 +25,7 @@ import org.apache.doris.common.Pair;
 import org.apache.doris.mtmv.BaseTableInfo;
 import org.apache.doris.nereids.CTEContext;
 import org.apache.doris.nereids.CascadesContext;
+import org.apache.doris.nereids.PlannerHook;
 import org.apache.doris.nereids.StatementContext.TableFrom;
 import org.apache.doris.nereids.analyzer.UnboundRelation;
 import org.apache.doris.nereids.analyzer.UnboundResultSink;
@@ -35,6 +36,7 @@ import org.apache.doris.nereids.pattern.MatchingContext;
 import org.apache.doris.nereids.properties.PhysicalProperties;
 import org.apache.doris.nereids.rules.Rule;
 import org.apache.doris.nereids.rules.RuleType;
+import 
org.apache.doris.nereids.rules.exploration.mv.InitMaterializationContextHook;
 import org.apache.doris.nereids.trees.expressions.CTEId;
 import org.apache.doris.nereids.trees.expressions.SubqueryExpr;
 import org.apache.doris.nereids.trees.plans.Plan;
@@ -196,7 +198,15 @@ public class CollectRelation implements 
AnalysisRuleFactory {
     }
 
     private void collectMTMVCandidates(TableIf table, CascadesContext 
cascadesContext) {
-        if 
(cascadesContext.getConnectContext().getSessionVariable().enableMaterializedViewRewrite)
 {
+        boolean shouldCollect = false;
+        for (PlannerHook plannerHook : 
cascadesContext.getStatementContext().getPlannerHooks()) {
+            // only collect when InitMaterializationContextHook exists in 
planner hooks
+            if (plannerHook instanceof InitMaterializationContextHook) {
+                shouldCollect = true;
+                break;
+            }
+        }
+        if (shouldCollect) {
             Set<MTMV> mtmvSet = 
Env.getCurrentEnv().getMtmvService().getRelationManager()
                     .getAllMTMVs(Lists.newArrayList(new BaseTableInfo(table)));
             if (LOG.isDebugEnabled()) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 8be945ff6cb..f7547542065 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -149,7 +149,6 @@ import org.apache.doris.nereids.exceptions.ParseException;
 import org.apache.doris.nereids.glue.LogicalPlanAdapter;
 import org.apache.doris.nereids.minidump.MinidumpUtils;
 import org.apache.doris.nereids.parser.NereidsParser;
-import 
org.apache.doris.nereids.rules.exploration.mv.InitMaterializationContextHook;
 import org.apache.doris.nereids.trees.expressions.Placeholder;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.algebra.InlineTable;
@@ -842,9 +841,6 @@ public class StmtExecutor {
             // t3: observer fe receive editlog creating the table from the 
master fe
             syncJournalIfNeeded();
             planner = new NereidsPlanner(statementContext);
-            if 
(context.getSessionVariable().isEnableMaterializedViewRewrite()) {
-                
statementContext.addPlannerHook(InitMaterializationContextHook.INSTANCE);
-            }
             try {
                 planner.plan(parsedStmt, 
context.getSessionVariable().toThrift());
                 checkBlockRules();


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

Reply via email to