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 e67cade56ba [fix](Nereids) Fix materialized view rule to check struct info validity (#34665) e67cade56ba is described below commit e67cade56baaa048fd59a06ff80ff5b5f3c0bb04 Author: 谢健 <jianx...@gmail.com> AuthorDate: Sat May 11 16:07:13 2024 +0800 [fix](Nereids) Fix materialized view rule to check struct info validity (#34665) This PR improves the materialized view rule by adding additional validity checks for the struct info. The changes include: 1. In AbstractMaterializedViewRule.java: * Modified the checkPattern method to also check the validity of the struct info using context.getStructInfo().isValid(). * Updated the error message for invalid struct info to include the view plan string for better debugging. 2. In StructInfo.java: * Enhanced the isValid() method to ensure that all nodes in the hyper graph have non-null expressions, in addition to the existing validity check. These changes ensure that the materialized view rule properly validates the struct info before proceeding with the optimization. It prevents invalid struct info from being used and provides more detailed error messages for debugging purposes. The additional validity check in StructInfo.isValid() verifies that all nodes in the hyper graph have non-null expressions, which is necessary for the materialized view rule to function correctly. By incorporating these validity checks, the materialized view rule becomes more robust and can handle invalid struct info gracefully, improving the overall stability and reliability of the optimization process. --- .../nereids/rules/exploration/mv/AbstractMaterializedViewRule.java | 5 +++-- .../org/apache/doris/nereids/rules/exploration/mv/StructInfo.java | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewRule.java index 6aa69712775..dcff9db69db 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewRule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewRule.java @@ -108,7 +108,8 @@ public abstract class AbstractMaterializedViewRule implements ExplorationRuleFac continue; } // check mv plan is valid or not - if (!checkPattern(context.getStructInfo())) { + boolean valid = checkPattern(context.getStructInfo()) && context.getStructInfo().isValid(); + if (!valid) { context.recordFailReason(context.getStructInfo(), "View struct info is invalid", () -> String.format(", view plan is %s", context.getStructInfo().getOriginalPlan().treeString())); @@ -145,7 +146,7 @@ public abstract class AbstractMaterializedViewRule implements ExplorationRuleFac List<StructInfo> uncheckedStructInfos = MaterializedViewUtils.extractStructInfo(queryPlan, cascadesContext, materializedViewTableSet); uncheckedStructInfos.forEach(queryStructInfo -> { - boolean valid = checkPattern(queryStructInfo); + boolean valid = checkPattern(queryStructInfo) && queryStructInfo.isValid(); if (!valid) { cascadesContext.getMaterializationContexts().forEach(ctx -> ctx.recordFailReason(queryStructInfo, "Query struct info is invalid", diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java index 8f36b990d52..55649c658b5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java @@ -122,7 +122,8 @@ public class StructInfo { this.originalPlan = originalPlan; this.originalPlanId = originalPlanId; this.hyperGraph = hyperGraph; - this.valid = valid; + this.valid = valid + && hyperGraph.getNodes().stream().allMatch(n -> ((StructInfoNode) n).getExpressions() != null); this.topPlan = topPlan; this.bottomPlan = bottomPlan; this.relations = relations; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org