From 698bae09b28100ae69dcfbccddcb7fc197db08be Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Mon, 5 Sep 2022 19:11:48 +0800 Subject: [PATCH] [fix](Nereids)get NPE and group not be optimized when add REWRITE rule to Cascades Optimzer (#12346) Fix some bugs when add REWRITE rule to Cascades Optimizer - all rule should set as not rewrite rule when use them in Cascades Optimizer - IMPLEMENT rule promise should large than others since we should do exploration first. --- .../org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java | 2 +- .../java/org/apache/doris/nereids/rules/RulePromise.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java index 0cb3e0dbd8..3b2864013b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java @@ -66,7 +66,7 @@ public class ApplyRuleJob extends Job { for (Plan newPlan : newPlans) { CopyInResult result = context.getCascadesContext() .getMemo() - .copyIn(newPlan, groupExpression.getOwnerGroup(), rule.isRewrite()); + .copyIn(newPlan, groupExpression.getOwnerGroup(), false); if (!result.generateNewExpression) { continue; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RulePromise.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RulePromise.java index c02caa363b..eb58e7734f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RulePromise.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RulePromise.java @@ -19,12 +19,13 @@ package org.apache.doris.nereids.rules; /** * Promise of rule, The value with a large promise has a higher priority. + * NOTICE: we must ensure that the promise of the IMPLEMENT is greater than the promise of the others. */ public enum RulePromise { + ANALYSIS, + REWRITE, EXPLORE, IMPLEMENT, - REWRITE, - ANALYSIS, // just for check plan in UT PLAN_CHECK