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

englefly 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 25cd9559652 [feat](nereids) add session variable 
disable_nereids_expression_rules (#44831)
25cd9559652 is described below

commit 25cd9559652d0a9715db138687d1264ccf4045e9
Author: yujun <yu...@selectdb.com>
AuthorDate: Tue Dec 31 16:21:39 2024 +0800

    [feat](nereids) add session variable disable_nereids_expression_rules 
(#44831)
    
    ### What problem does this PR solve?
    
    Issue Number: close #xxx
    
    Related PR: #xxx
    
    Problem Summary:
    
    Add session variable test_disable_nereids_expression_rule for disable
    expression rule, example:
    
    ```sql
    SET disable_nereids_expression_rules='SIMPLIFY_COMPARISON_PREDICATE'
    ```
    
    for a expression rule `ExpressionPatternMatcher`, its has default rule
    type: ANONYMOUS.
    
    when it calls `toRule(ruleTypeXX)` will create a rule with type:
    ruleTypeXX.
---
 .../nereids/pattern/ExpressionPatternRules.java    | 12 +++--
 .../expression/ExpressionPatternMatchRule.java     |  6 +++
 .../rules/expression/ExpressionPatternMatcher.java |  5 +-
 .../expression/ExpressionPatternRuleFactory.java   | 21 +++++---
 .../rules/expression/ExpressionRuleType.java       | 59 ++++++++++++++++++++++
 .../nereids/rules/expression/check/CheckCast.java  |  3 +-
 .../nereids/rules/expression/rules/AddMinMax.java  |  2 +
 .../rules/ArrayContainToArrayOverlap.java          |  2 +
 .../rules/expression/rules/BetweenToEqual.java     |  2 +
 .../rules/expression/rules/CaseWhenToIf.java       |  2 +
 .../expression/rules/ConvertAggStateCast.java      |  2 +
 .../expression/rules/DateFunctionRewrite.java      | 14 +++--
 .../expression/rules/DigitalMaskingConvert.java    |  5 +-
 .../expression/rules/DistinctPredicatesRule.java   |  2 +
 .../expression/rules/ExtractCommonFactorRule.java  |  2 +
 .../expression/rules/FoldConstantRuleOnBE.java     |  2 +
 .../expression/rules/FoldConstantRuleOnFE.java     |  4 +-
 .../rules/expression/rules/InPredicateDedup.java   |  2 +
 .../expression/rules/InPredicateToEqualToRule.java |  5 +-
 .../rules/expression/rules/LikeToEqualRewrite.java |  2 +
 .../rules/expression/rules/MergeDateTrunc.java     |  2 +
 .../rules/NormalizeBinaryPredicatesRule.java       |  2 +
 .../expression/rules/NullSafeEqualToEqual.java     |  2 +
 .../nereids/rules/expression/rules/OrToIn.java     |  2 +
 .../expression/rules/ReplaceVariableByLiteral.java |  3 +-
 .../rules/SimplifyArithmeticComparisonRule.java    |  2 +
 .../expression/rules/SimplifyArithmeticRule.java   |  2 +
 .../rules/expression/rules/SimplifyCastRule.java   |  2 +
 .../rules/SimplifyComparisonPredicate.java         |  2 +
 .../rules/SimplifyConditionalFunction.java         |  8 ++-
 .../expression/rules/SimplifyInPredicate.java      |  2 +
 .../expression/rules/SimplifyNotExprRule.java      |  2 +
 .../rules/expression/rules/SimplifyRange.java      |  2 +
 .../expression/rules/SupportJavaDateFormatter.java |  8 ++-
 .../nereids/rules/expression/rules/TopnToMax.java  |  2 +
 .../nereids/rules/rewrite/ExprIdRewriter.java      |  3 +-
 .../java/org/apache/doris/qe/SessionVariable.java  | 26 ++++++++++
 .../test_disable_nereids_expression_rule.out       | 10 ++++
 .../test_disable_nereids_expression_rule.groovy    | 28 ++++++++++
 39 files changed, 237 insertions(+), 27 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/ExpressionPatternRules.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/ExpressionPatternRules.java
index 523540e6435..339c082dbd2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/ExpressionPatternRules.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/ExpressionPatternRules.java
@@ -26,6 +26,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.lang.reflect.Field;
+import java.util.BitSet;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
@@ -48,10 +49,13 @@ public class ExpressionPatternRules extends 
TypeMappings<Expression, ExpressionP
         List<ExpressionPatternMatchRule> rules = 
singleMappings.get(expr.getClass());
         ExpressionMatchingContext<Expression> matchingContext
                 = new ExpressionMatchingContext<>(expr, parent, context);
+        BitSet disableRules = 
context.cascadesContext.getConnectContext().getSessionVariable()
+                .getDisableNereidsExpressionRules();
         switch (rules.size()) {
             case 0: {
                 for (ExpressionPatternMatchRule multiMatchRule : 
multiMappings) {
-                    if 
(multiMatchRule.matchesTypeAndPredicates(matchingContext)) {
+                    if 
(!disableRules.get(multiMatchRule.getExpressionRuleType().type())
+                            && 
multiMatchRule.matchesTypeAndPredicates(matchingContext)) {
                         Expression newExpr = 
multiMatchRule.apply(matchingContext);
                         if (!newExpr.equals(expr)) {
                             if (context.cascadesContext.isEnableExprTrace()) {
@@ -65,7 +69,8 @@ public class ExpressionPatternRules extends 
TypeMappings<Expression, ExpressionP
             }
             case 1: {
                 ExpressionPatternMatchRule rule = rules.get(0);
-                if (rule.matchesPredicates(matchingContext)) {
+                if (!disableRules.get(rule.getExpressionRuleType().type())
+                        && rule.matchesPredicates(matchingContext)) {
                     Expression newExpr = rule.apply(matchingContext);
                     if (!newExpr.equals(expr)) {
                         if (context.cascadesContext.isEnableExprTrace()) {
@@ -78,7 +83,8 @@ public class ExpressionPatternRules extends 
TypeMappings<Expression, ExpressionP
             }
             default: {
                 for (ExpressionPatternMatchRule rule : rules) {
-                    if (rule.matchesPredicates(matchingContext)) {
+                    if (!disableRules.get(rule.getExpressionRuleType().type())
+                            && rule.matchesPredicates(matchingContext)) {
                         Expression newExpr = rule.apply(matchingContext);
                         if (!expr.equals(newExpr)) {
                             if (context.cascadesContext.isEnableExprTrace()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternMatchRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternMatchRule.java
index dbf5c79c96d..b794981f657 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternMatchRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternMatchRule.java
@@ -25,11 +25,13 @@ import java.util.function.Predicate;
 
 /** ExpressionPatternMatcherRule */
 public class ExpressionPatternMatchRule implements TypeMapping<Expression> {
+    public final ExpressionRuleType expressionRuleType;
     public final Class<? extends Expression> typePattern;
     public final List<Predicate<ExpressionMatchingContext<Expression>>> 
predicates;
     public final ExpressionMatchingAction<Expression> matchingAction;
 
     public ExpressionPatternMatchRule(ExpressionPatternMatcher patternMatcher) 
{
+        this.expressionRuleType = patternMatcher.expressionRuleType;
         this.typePattern = patternMatcher.typePattern;
         this.predicates = patternMatcher.predicates;
         this.matchingAction = patternMatcher.matchingAction;
@@ -61,4 +63,8 @@ public class ExpressionPatternMatchRule implements 
TypeMapping<Expression> {
     public Class<? extends Expression> getType() {
         return typePattern;
     }
+
+    public ExpressionRuleType getExpressionRuleType() {
+        return expressionRuleType;
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternMatcher.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternMatcher.java
index 058b1d60b1d..0815060724e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternMatcher.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternMatcher.java
@@ -27,13 +27,16 @@ import java.util.function.Predicate;
 
 /** ExpressionPattern */
 public class ExpressionPatternMatcher<E extends Expression> {
+
+    public final ExpressionRuleType expressionRuleType;
     public final Class<E> typePattern;
     public final List<Predicate<ExpressionMatchingContext<E>>> predicates;
     public final ExpressionMatchingAction<E> matchingAction;
 
-    public ExpressionPatternMatcher(Class<E> typePattern,
+    public ExpressionPatternMatcher(ExpressionRuleType expressionRuleType, 
Class<E> typePattern,
             List<Predicate<ExpressionMatchingContext<E>>> predicates,
             ExpressionMatchingAction<E> matchingAction) {
+        this.expressionRuleType = Objects.requireNonNull(expressionRuleType, 
"expressionRuleType can not be null");
         this.typePattern = Objects.requireNonNull(typePattern, "typePattern 
can not be null");
         this.predicates = predicates == null ? ImmutableList.of() : predicates;
         this.matchingAction = Objects.requireNonNull(matchingAction, 
"matchingAction can not be null");
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternRuleFactory.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternRuleFactory.java
index 7fb18735ba5..635f8e0db7d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternRuleFactory.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionPatternRuleFactory.java
@@ -48,15 +48,18 @@ public interface ExpressionPatternRuleFactory {
     class ExpressionPatternDescriptor<E extends Expression> {
         private final Class<E> typePattern;
         private final ImmutableList<Predicate<ExpressionMatchingContext<E>>> 
predicates;
+        private final ExpressionMatchingAction<E> matchingAction;
 
         public ExpressionPatternDescriptor(Class<E> typePattern) {
-            this(typePattern, ImmutableList.of());
+            this(typePattern, ImmutableList.of(), ctx -> ctx.expr);
         }
 
         public ExpressionPatternDescriptor(
-                Class<E> typePattern, 
ImmutableList<Predicate<ExpressionMatchingContext<E>>> predicates) {
+                Class<E> typePattern, 
ImmutableList<Predicate<ExpressionMatchingContext<E>>> predicates,
+                ExpressionMatchingAction<E> matchingAction) {
             this.typePattern = Objects.requireNonNull(typePattern, 
"typePattern can not be null");
             this.predicates = Objects.requireNonNull(predicates, "predicates 
can not be null");
+            this.matchingAction = Objects.requireNonNull(matchingAction, 
"action can not be null");
         }
 
         public ExpressionPatternDescriptor<E> when(Predicate<E> predicate) {
@@ -68,17 +71,21 @@ public interface ExpressionPatternRuleFactory {
                     = ImmutableList.builderWithExpectedSize(predicates.size() 
+ 1);
             newPredicates.addAll(predicates);
             newPredicates.add(predicate);
-            return new ExpressionPatternDescriptor<>(typePattern, 
newPredicates.build());
+            return new ExpressionPatternDescriptor<>(typePattern, 
newPredicates.build(), ctx -> ctx.expr);
         }
 
         /** then */
-        public ExpressionPatternMatcher<E> then(Function<E, Expression> 
rewriter) {
-            return new ExpressionPatternMatcher<>(
+        public ExpressionPatternDescriptor<E> then(Function<E, Expression> 
rewriter) {
+            return new ExpressionPatternDescriptor<>(
                     typePattern, predicates, (context) -> 
rewriter.apply(context.expr));
         }
 
-        public ExpressionPatternMatcher<E> 
thenApply(ExpressionMatchingAction<E> action) {
-            return new ExpressionPatternMatcher<>(typePattern, predicates, 
action);
+        public ExpressionPatternDescriptor<E> 
thenApply(ExpressionMatchingAction<E> action) {
+            return new ExpressionPatternDescriptor<>(typePattern, predicates, 
action);
+        }
+
+        public ExpressionPatternMatcher<E> toRule(ExpressionRuleType 
expressionRuleType) {
+            return new ExpressionPatternMatcher<>(expressionRuleType, 
typePattern, predicates, matchingAction);
         }
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRuleType.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRuleType.java
new file mode 100644
index 00000000000..d8919d1eaed
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRuleType.java
@@ -0,0 +1,59 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.rules.expression;
+
+/**
+ * Type of rewrite expression rules.
+ */
+public enum ExpressionRuleType {
+    ADD_MIN_MAX,
+    ARRAY_CONTAIN_TO_ARRAY_OVERLAP,
+    BETWEEN_TO_EQUAL,
+    CASE_WHEN_TO_IF,
+    CHECK_CAST,
+    CONVERT_AGG_STATE_CAST,
+    DATE_FUNCTION_REWRITE,
+    DIGITAL_MASKING_CONVERT,
+    DISTINCT_PREDICATES,
+    EXPR_ID_REWRITE_REPLACE,
+    EXTRACT_COMMON_FACTOR,
+    FOLD_CONSTANT_ON_BE,
+    FOLD_CONSTANT_ON_FE,
+    IN_PREDICATE_DEDUP,
+    IN_PREDICATE_TO_EQUAL_TO,
+    LIKE_TO_EQUAL,
+    MERGE_DATE_TRUNC,
+    NORMALIZE_BINARY_PREDICATES,
+    NULL_SAFE_EQUAL_TO_EQUAL,
+    OR_TO_IN,
+    REPLACE_VARIABLE_BY_LITERAL,
+    SIMPLIFY_ARITHMETIC_COMPARISON,
+    SIMPLIFY_ARITHMETIC,
+    SIMPLIFY_CAST,
+    SIMPLIFY_COMPARISON_PREDICATE,
+    SIMPLIFY_CONDITIONAL_FUNCTION,
+    SIMPLIFY_IN_PREDICATE,
+    SIMPLIFY_NOT_EXPR,
+    SIMPLIFY_RANGE,
+    SUPPORT_JAVA_DATE_FORMATTER,
+    TOPN_TO_MAX;
+
+    public int type() {
+        return ordinal();
+    }
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/check/CheckCast.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/check/CheckCast.java
index e76d7ef344d..e3ede36da19 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/check/CheckCast.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/check/CheckCast.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.rules.expression.check;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Cast;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.types.ArrayType;
@@ -44,7 +45,7 @@ public class CheckCast implements 
ExpressionPatternRuleFactory {
     @Override
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
-                matchesType(Cast.class).then(CheckCast::check)
+                
matchesType(Cast.class).then(CheckCast::check).toRule(ExpressionRuleType.CHECK_CAST)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/AddMinMax.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/AddMinMax.java
index c1efb82bac6..80d245c3780 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/AddMinMax.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/AddMinMax.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
 import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import 
org.apache.doris.nereids.rules.expression.rules.RangeInference.DiscreteValue;
 import 
org.apache.doris.nereids.rules.expression.rules.RangeInference.EmptyValue;
 import 
org.apache.doris.nereids.rules.expression.rules.RangeInference.RangeValue;
@@ -69,6 +70,7 @@ public class AddMinMax implements 
ExpressionPatternRuleFactory {
         return ImmutableList.of(
                 matchesTopType(CompoundPredicate.class)
                         .thenApply(ctx -> rewrite(ctx.expr, 
ctx.rewriteContext))
+                        .toRule(ExpressionRuleType.ADD_MIN_MAX)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ArrayContainToArrayOverlap.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ArrayContainToArrayOverlap.java
index f32d76062aa..93e7873638d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ArrayContainToArrayOverlap.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ArrayContainToArrayOverlap.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Or;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayContains;
@@ -57,6 +58,7 @@ public class ArrayContainToArrayOverlap implements 
ExpressionPatternRuleFactory
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 
matchesTopType(Or.class).then(ArrayContainToArrayOverlap::rewrite)
+                        
.toRule(ExpressionRuleType.ARRAY_CONTAIN_TO_ARRAY_OVERLAP)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/BetweenToEqual.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/BetweenToEqual.java
index d1279fdfda5..9d9eda0a3fd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/BetweenToEqual.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/BetweenToEqual.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.And;
 import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
@@ -47,6 +48,7 @@ public class BetweenToEqual implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
             matchesType(And.class).then(BetweenToEqual::rewriteBetweenToEqual)
+                    .toRule(ExpressionRuleType.BETWEEN_TO_EQUAL)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/CaseWhenToIf.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/CaseWhenToIf.java
index cafb0ecd068..17d6c6fa675 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/CaseWhenToIf.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/CaseWhenToIf.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.CaseWhen;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.WhenClause;
@@ -42,6 +43,7 @@ public class CaseWhenToIf implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 matchesTopType(CaseWhen.class).then(CaseWhenToIf::rewrite)
+                        .toRule(ExpressionRuleType.CASE_WHEN_TO_IF)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ConvertAggStateCast.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ConvertAggStateCast.java
index 6d5a70139ab..28f6cc51365 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ConvertAggStateCast.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ConvertAggStateCast.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Alias;
 import org.apache.doris.nereids.trees.expressions.Cast;
 import org.apache.doris.nereids.trees.expressions.Expression;
@@ -44,6 +45,7 @@ public class ConvertAggStateCast implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 matchesType(Cast.class).then(ConvertAggStateCast::convert)
+                        .toRule(ExpressionRuleType.CONVERT_AGG_STATE_CAST)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DateFunctionRewrite.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DateFunctionRewrite.java
index 07ec0c3de71..deba786d44c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DateFunctionRewrite.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DateFunctionRewrite.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.And;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
 import org.apache.doris.nereids.trees.expressions.Expression;
@@ -50,11 +51,16 @@ public class DateFunctionRewrite implements 
ExpressionPatternRuleFactory {
     @Override
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
-                
matchesType(EqualTo.class).then(DateFunctionRewrite::rewriteEqualTo),
-                
matchesType(GreaterThan.class).then(DateFunctionRewrite::rewriteGreaterThan),
-                
matchesType(GreaterThanEqual.class).then(DateFunctionRewrite::rewriteGreaterThanEqual),
-                
matchesType(LessThan.class).then(DateFunctionRewrite::rewriteLessThan),
+                
matchesType(EqualTo.class).then(DateFunctionRewrite::rewriteEqualTo)
+                        .toRule(ExpressionRuleType.DATE_FUNCTION_REWRITE),
+                
matchesType(GreaterThan.class).then(DateFunctionRewrite::rewriteGreaterThan)
+                        .toRule(ExpressionRuleType.DATE_FUNCTION_REWRITE),
+                
matchesType(GreaterThanEqual.class).then(DateFunctionRewrite::rewriteGreaterThanEqual)
+                        .toRule(ExpressionRuleType.DATE_FUNCTION_REWRITE),
+                
matchesType(LessThan.class).then(DateFunctionRewrite::rewriteLessThan)
+                        .toRule(ExpressionRuleType.DATE_FUNCTION_REWRITE),
                 
matchesType(LessThanEqual.class).then(DateFunctionRewrite::rewriteLessThanEqual)
+                        .toRule(ExpressionRuleType.DATE_FUNCTION_REWRITE)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DigitalMaskingConvert.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DigitalMaskingConvert.java
index 95d25e3c592..d9cfee2b407 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DigitalMaskingConvert.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DigitalMaskingConvert.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Concat;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.DigitalMasking;
@@ -43,8 +44,8 @@ public class DigitalMaskingConvert implements 
ExpressionPatternRuleFactory {
                     new Concat(
                             new Left(digitalMasking.child(), Literal.of(3)),
                             Literal.of("****"),
-                            new Right(digitalMasking.child(), Literal.of(4)))
-                    )
+                            new Right(digitalMasking.child(), Literal.of(4))))
+                    .toRule(ExpressionRuleType.DIGITAL_MASKING_CONVERT)
         );
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DistinctPredicatesRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DistinctPredicatesRule.java
index cf18886cd85..83d7be34fac 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DistinctPredicatesRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/DistinctPredicatesRule.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.CompoundPredicate;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.util.ExpressionUtils;
@@ -43,6 +44,7 @@ public class DistinctPredicatesRule implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 
matchesTopType(CompoundPredicate.class).then(DistinctPredicatesRule::distinct)
+                        .toRule(ExpressionRuleType.DISTINCT_PREDICATES)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ExtractCommonFactorRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ExtractCommonFactorRule.java
index d79fafa80a7..9ad42d1b379 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ExtractCommonFactorRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ExtractCommonFactorRule.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 import org.apache.doris.nereids.annotation.Developing;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.CompoundPredicate;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral;
@@ -56,6 +57,7 @@ public class ExtractCommonFactorRule implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                  
matchesTopType(CompoundPredicate.class).then(ExtractCommonFactorRule::extractCommonFactor)
+                        .toRule(ExpressionRuleType.EXTRACT_COMMON_FACTOR)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java
index dd79de70e26..21a0d1d59c8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java
@@ -31,6 +31,7 @@ import 
org.apache.doris.nereids.glue.translator.ExpressionTranslator;
 import org.apache.doris.nereids.rules.expression.ExpressionMatchingContext;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Alias;
 import org.apache.doris.nereids.trees.expressions.ArrayItemReference;
 import org.apache.doris.nereids.trees.expressions.Cast;
@@ -123,6 +124,7 @@ public class FoldConstantRuleOnBE implements 
ExpressionPatternRuleFactory {
                                 .isDebugSkipFoldConstant())
                         .whenCtx(FoldConstantRuleOnBE::isEnableFoldByBe)
                         .thenApply(FoldConstantRuleOnBE::foldByBE)
+                        .toRule(ExpressionRuleType.FOLD_CONSTANT_ON_BE)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
index c2a73f7afec..c4dd18acaa2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
@@ -33,6 +33,7 @@ import 
org.apache.doris.nereids.rules.expression.ExpressionMatchingContext;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
 import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.rules.expression.ExpressionTraverseListener;
 import 
org.apache.doris.nereids.rules.expression.ExpressionTraverseListenerFactory;
 import org.apache.doris.nereids.trees.expressions.AggregateExpression;
@@ -764,6 +765,7 @@ public class FoldConstantRuleOnFE extends 
AbstractExpressionRewriteRule
                 .whenCtx(ctx -> 
!ctx.cascadesContext.getConnectContext().getSessionVariable()
                         .isDebugSkipFoldConstant())
                 .whenCtx(NOT_UNDER_AGG_DISTINCT.as())
-                .thenApply(ctx -> visitMethod.apply(ctx.expr, 
ctx.rewriteContext));
+                .thenApply(ctx -> visitMethod.apply(ctx.expr, 
ctx.rewriteContext))
+                .toRule(ExpressionRuleType.FOLD_CONSTANT_ON_FE);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/InPredicateDedup.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/InPredicateDedup.java
index 3760dcf0e72..aaa822ac691 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/InPredicateDedup.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/InPredicateDedup.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.InPredicate;
 
@@ -39,6 +40,7 @@ public class InPredicateDedup implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
             matchesType(InPredicate.class).then(InPredicateDedup::dedup)
+                    .toRule(ExpressionRuleType.IN_PREDICATE_DEDUP)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/InPredicateToEqualToRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/InPredicateToEqualToRule.java
index 353de7f41f6..463393327a1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/InPredicateToEqualToRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/InPredicateToEqualToRule.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.InPredicate;
@@ -46,8 +47,8 @@ public class InPredicateToEqualToRule implements 
ExpressionPatternRuleFactory {
         return ImmutableList.of(
                 matchesType(InPredicate.class)
                     .when(in -> in.getOptions().size() == 1)
-                    .then(in -> new EqualTo(in.getCompareExpr(), 
in.getOptions().get(0))
-                )
+                    .then(in -> new EqualTo(in.getCompareExpr(), 
in.getOptions().get(0)))
+                    .toRule(ExpressionRuleType.IN_PREDICATE_TO_EQUAL_TO)
         );
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/LikeToEqualRewrite.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/LikeToEqualRewrite.java
index e2836204cdc..0e93b7ddc5a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/LikeToEqualRewrite.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/LikeToEqualRewrite.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Like;
@@ -38,6 +39,7 @@ public class LikeToEqualRewrite implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 
matchesType(Like.class).then(LikeToEqualRewrite::rewriteLikeToEqual)
+                        .toRule(ExpressionRuleType.LIKE_TO_EQUAL)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/MergeDateTrunc.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/MergeDateTrunc.java
index 892724cf893..f52ba41948d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/MergeDateTrunc.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/MergeDateTrunc.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.DateTrunc;
 import org.apache.doris.nereids.trees.expressions.literal.Interval.TimeUnit;
@@ -47,6 +48,7 @@ public class MergeDateTrunc implements 
ExpressionPatternRuleFactory {
                 matchesTopType(DateTrunc.class)
                         .when(dateTrunc -> dateTrunc.getArgument(0) instanceof 
DateTrunc)
                         .then(MergeDateTrunc::rewrite)
+                        .toRule(ExpressionRuleType.MERGE_DATE_TRUNC)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/NormalizeBinaryPredicatesRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/NormalizeBinaryPredicatesRule.java
index e73104793cd..433a43ba185 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/NormalizeBinaryPredicatesRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/NormalizeBinaryPredicatesRule.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
 import org.apache.doris.nereids.trees.expressions.Expression;
 
@@ -38,6 +39,7 @@ public class NormalizeBinaryPredicatesRule implements 
ExpressionPatternRuleFacto
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 
matchesType(ComparisonPredicate.class).then(NormalizeBinaryPredicatesRule::normalize)
+                        .toRule(ExpressionRuleType.NORMALIZE_BINARY_PREDICATES)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/NullSafeEqualToEqual.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/NullSafeEqualToEqual.java
index 16c4663a1ed..6b3b53feb6b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/NullSafeEqualToEqual.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/NullSafeEqualToEqual.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.IsNull;
@@ -42,6 +43,7 @@ public class NullSafeEqualToEqual implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 
matchesType(NullSafeEqual.class).then(NullSafeEqualToEqual::rewrite)
+                        .toRule(ExpressionRuleType.NULL_SAFE_EQUAL_TO_EQUAL)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java
index af61bbdaddf..59b340478ce 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java
@@ -23,6 +23,7 @@ import 
org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
 import org.apache.doris.nereids.rules.expression.ExpressionRewrite;
 import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.And;
 import org.apache.doris.nereids.trees.expressions.CompoundPredicate;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
@@ -59,6 +60,7 @@ public class OrToIn implements ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 matchesTopType(Or.class).then(OrToIn.INSTANCE::rewrite)
+                        .toRule(ExpressionRuleType.OR_TO_IN)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ReplaceVariableByLiteral.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ReplaceVariableByLiteral.java
index 74f41e17cac..e800bf790c5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ReplaceVariableByLiteral.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/ReplaceVariableByLiteral.java
@@ -21,6 +21,7 @@ import org.apache.doris.nereids.SqlCacheContext;
 import org.apache.doris.nereids.StatementContext;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Variable;
 
@@ -46,7 +47,7 @@ public class ReplaceVariableByLiteral implements 
ExpressionPatternRuleFactory {
                     sqlCacheContext.get().addUsedVariable(variable);
                 }
                 return variable.getRealExpression();
-            })
+            }).toRule(ExpressionRuleType.REPLACE_VARIABLE_BY_LITERAL)
         );
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticComparisonRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticComparisonRule.java
index 863bfd18f45..853b5a3dfc9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticComparisonRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticComparisonRule.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
 import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Add;
 import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
 import org.apache.doris.nereids.trees.expressions.Divide;
@@ -82,6 +83,7 @@ public class SimplifyArithmeticComparisonRule implements 
ExpressionPatternRuleFa
         return ImmutableList.of(
                 matchesType(ComparisonPredicate.class)
                         .thenApply(ctx -> simplify(ctx.expr, new 
ExpressionRewriteContext(ctx.cascadesContext)))
+                        
.toRule(ExpressionRuleType.SIMPLIFY_ARITHMETIC_COMPARISON)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticRule.java
index b9fd91f6438..44d6505b003 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticRule.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Add;
 import org.apache.doris.nereids.trees.expressions.BinaryArithmetic;
 import org.apache.doris.nereids.trees.expressions.Divide;
@@ -52,6 +53,7 @@ public class SimplifyArithmeticRule implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 
matchesTopType(BinaryArithmetic.class).then(SimplifyArithmeticRule::simplify)
+                        .toRule(ExpressionRuleType.SIMPLIFY_ARITHMETIC)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyCastRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyCastRule.java
index cc044768056..8c3a5f21a30 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyCastRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyCastRule.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Cast;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.literal.BigIntLiteral;
@@ -57,6 +58,7 @@ public class SimplifyCastRule implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 matchesType(Cast.class).then(SimplifyCastRule::simplifyCast)
+                        .toRule(ExpressionRuleType.SIMPLIFY_CAST)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicate.java
index 1f435958202..e2bba0173b0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicate.java
@@ -23,6 +23,7 @@ import 
org.apache.doris.nereids.rules.expression.AbstractExpressionRewriteRule;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
 import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Cast;
 import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
@@ -77,6 +78,7 @@ public class SimplifyComparisonPredicate extends 
AbstractExpressionRewriteRule i
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 
matchesType(ComparisonPredicate.class).then(SimplifyComparisonPredicate::simplify)
+                        
.toRule(ExpressionRuleType.SIMPLIFY_COMPARISON_PREDICATE)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunction.java
index c1c6283e32d..6862e138ac9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunction.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Coalesce;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.NullIf;
@@ -37,9 +38,12 @@ public class SimplifyConditionalFunction implements 
ExpressionPatternRuleFactory
     @Override
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
-                
matchesType(Coalesce.class).then(SimplifyConditionalFunction::rewriteCoalesce),
-                
matchesType(Nvl.class).then(SimplifyConditionalFunction::rewriteNvl),
+                
matchesType(Coalesce.class).then(SimplifyConditionalFunction::rewriteCoalesce)
+                        
.toRule(ExpressionRuleType.SIMPLIFY_CONDITIONAL_FUNCTION),
+                
matchesType(Nvl.class).then(SimplifyConditionalFunction::rewriteNvl)
+                        
.toRule(ExpressionRuleType.SIMPLIFY_CONDITIONAL_FUNCTION),
                 
matchesType(NullIf.class).then(SimplifyConditionalFunction::rewriteNullIf)
+                        
.toRule(ExpressionRuleType.SIMPLIFY_CONDITIONAL_FUNCTION)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyInPredicate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyInPredicate.java
index bf1b194a6ac..70a964929e2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyInPredicate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyInPredicate.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Cast;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.InPredicate;
@@ -40,6 +41,7 @@ public class SimplifyInPredicate implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 
matchesType(InPredicate.class).then(SimplifyInPredicate::simplify)
+                        .toRule(ExpressionRuleType.SIMPLIFY_IN_PREDICATE)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyNotExprRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyNotExprRule.java
index 92ea5ddfd5c..413966514f6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyNotExprRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyNotExprRule.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
 import org.apache.doris.nereids.trees.expressions.CompoundPredicate;
 import org.apache.doris.nereids.trees.expressions.Expression;
@@ -55,6 +56,7 @@ public class SimplifyNotExprRule implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 matchesType(Not.class).then(SimplifyNotExprRule::simplify)
+                        .toRule(ExpressionRuleType.SIMPLIFY_NOT_EXPR)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java
index 4666342943a..576ef6bbf4d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
 import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import 
org.apache.doris.nereids.rules.expression.rules.RangeInference.DiscreteValue;
 import 
org.apache.doris.nereids.rules.expression.rules.RangeInference.EmptyValue;
 import 
org.apache.doris.nereids.rules.expression.rules.RangeInference.RangeValue;
@@ -76,6 +77,7 @@ public class SimplifyRange implements 
ExpressionPatternRuleFactory {
         return ImmutableList.of(
                 matchesTopType(CompoundPredicate.class)
                         .thenApply(ctx -> rewrite(ctx.expr, 
ctx.rewriteContext))
+                        .toRule(ExpressionRuleType.SIMPLIFY_RANGE)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SupportJavaDateFormatter.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SupportJavaDateFormatter.java
index f5b442a3989..fbf59ab624b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SupportJavaDateFormatter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SupportJavaDateFormatter.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.DateFormat;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.FromUnixtime;
@@ -38,9 +39,12 @@ public class SupportJavaDateFormatter implements 
ExpressionPatternRuleFactory {
     @Override
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
-                
matchesType(DateFormat.class).then(SupportJavaDateFormatter::rewriteDateFormat),
-                
matchesType(FromUnixtime.class).then(SupportJavaDateFormatter::rewriteFromUnixtime),
+                
matchesType(DateFormat.class).then(SupportJavaDateFormatter::rewriteDateFormat)
+                        
.toRule(ExpressionRuleType.SUPPORT_JAVA_DATE_FORMATTER),
+                
matchesType(FromUnixtime.class).then(SupportJavaDateFormatter::rewriteFromUnixtime)
+                        
.toRule(ExpressionRuleType.SUPPORT_JAVA_DATE_FORMATTER),
                 
matchesType(UnixTimestamp.class).then(SupportJavaDateFormatter::rewriteUnixTimestamp)
+                        .toRule(ExpressionRuleType.SUPPORT_JAVA_DATE_FORMATTER)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/TopnToMax.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/TopnToMax.java
index 318cb6ec603..972018b4244 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/TopnToMax.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/TopnToMax.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.nereids.rules.expression.ExpressionPatternMatcher;
 import org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.functions.agg.Max;
 import org.apache.doris.nereids.trees.expressions.functions.agg.TopN;
@@ -39,6 +40,7 @@ public class TopnToMax implements 
ExpressionPatternRuleFactory {
     public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
         return ImmutableList.of(
                 matchesTopType(TopN.class).then(TopnToMax::rewrite)
+                        .toRule(ExpressionRuleType.TOPN_TO_MAX)
         );
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExprIdRewriter.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExprIdRewriter.java
index 60c9da4bc6e..9dfe4e84faa 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExprIdRewriter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExprIdRewriter.java
@@ -28,6 +28,7 @@ import 
org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
 import org.apache.doris.nereids.rules.expression.ExpressionRewrite;
 import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext;
 import org.apache.doris.nereids.rules.expression.ExpressionRuleExecutor;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.nereids.trees.expressions.ExprId;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
@@ -125,7 +126,7 @@ public class ExprIdRewriter extends ExpressionRewrite {
                             return slot.withExprId(newId);
                         }
                         return slot;
-                    })
+                    }).toRule(ExpressionRuleType.EXPR_ID_REWRITE_REPLACE)
             );
         }
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 4f7506e30dc..18289a23bd4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -34,6 +34,7 @@ import org.apache.doris.nereids.metrics.Event;
 import org.apache.doris.nereids.metrics.EventSwitchParser;
 import org.apache.doris.nereids.parser.Dialect;
 import org.apache.doris.nereids.rules.RuleType;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import 
org.apache.doris.nereids.trees.plans.commands.insert.InsertIntoTableCommand;
 import org.apache.doris.nereids.trees.plans.logical.LogicalFileSink;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
@@ -332,6 +333,7 @@ public class SessionVariable implements Serializable, 
Writable {
     public static final String ENABLE_NEREIDS_DISTRIBUTE_PLANNER = 
"enable_nereids_distribute_planner";
     public static final String DISABLE_NEREIDS_RULES = "disable_nereids_rules";
     public static final String ENABLE_NEREIDS_RULES = "enable_nereids_rules";
+    public static final String DISABLE_NEREIDS_EXPRESSION_RULES = 
"disable_nereids_expression_rules";
     public static final String ENABLE_NEW_COST_MODEL = "enable_new_cost_model";
     public static final String ENABLE_FALLBACK_TO_ORIGINAL_PLANNER = 
"enable_fallback_to_original_planner";
     public static final String ENABLE_NEREIDS_TIMEOUT = 
"enable_nereids_timeout";
@@ -1438,6 +1440,12 @@ public class SessionVariable implements Serializable, 
Writable {
     @VariableMgr.VarAttr(name = ENABLE_NEREIDS_RULES, needForward = true)
     public String enableNereidsRules = "";
 
+    @VariableMgr.VarAttr(name = DISABLE_NEREIDS_EXPRESSION_RULES, needForward 
= true,
+            setter = "setDisableNereidsExpressionRules")
+    private String disableNereidsExpressionRules = "";
+
+    private BitSet disableNereidsExpressionRuleSet = new BitSet();
+
     @VariableMgr.VarAttr(name = ENABLE_NEW_COST_MODEL, needForward = true)
     private boolean enableNewCostModel = false;
 
@@ -3653,6 +3661,10 @@ public class SessionVariable implements Serializable, 
Writable {
                 .collect(ImmutableSet.toImmutableSet());
     }
 
+    public BitSet getDisableNereidsExpressionRules() {
+        return disableNereidsExpressionRuleSet;
+    }
+
     public void setEnableNewCostModel(boolean enable) {
         this.enableNewCostModel = enable;
     }
@@ -3665,6 +3677,20 @@ public class SessionVariable implements Serializable, 
Writable {
         this.disableNereidsRules = disableNereidsRules;
     }
 
+    public void setDisableNereidsExpressionRules(String 
disableNereidsExpressionRules) {
+        BitSet bitSet = new BitSet();
+        for (String ruleName : disableNereidsExpressionRules.split(",")) {
+            ruleName = ruleName.trim().toUpperCase(Locale.ROOT);
+            if (ruleName.isEmpty()) {
+                continue;
+            }
+            ExpressionRuleType ruleType = ExpressionRuleType.valueOf(ruleName);
+            bitSet.set(ruleType.type());
+        }
+        this.disableNereidsExpressionRuleSet = bitSet;
+        this.disableNereidsExpressionRules = disableNereidsExpressionRules;
+    }
+
     public double getNereidsCboPenaltyFactor() {
         return nereidsCboPenaltyFactor;
     }
diff --git 
a/regression-test/data/nereids_rules_p0/expression/test_disable_nereids_expression_rule.out
 
b/regression-test/data/nereids_rules_p0/expression/test_disable_nereids_expression_rule.out
new file mode 100644
index 00000000000..a9cf8afc2e5
--- /dev/null
+++ 
b/regression-test/data/nereids_rules_p0/expression/test_disable_nereids_expression_rule.out
@@ -0,0 +1,10 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !shape_1 --
+PhysicalResultSink
+--PhysicalEmptyRelation
+
+-- !shape_2 --
+PhysicalResultSink
+--filter((cast(a as DECIMALV3(11, 1)) = 1.1))
+----PhysicalOlapScan[test_disable_nereids_expression_rule_tbl]
+
diff --git 
a/regression-test/suites/nereids_rules_p0/expression/test_disable_nereids_expression_rule.groovy
 
b/regression-test/suites/nereids_rules_p0/expression/test_disable_nereids_expression_rule.groovy
new file mode 100644
index 00000000000..fda16071e16
--- /dev/null
+++ 
b/regression-test/suites/nereids_rules_p0/expression/test_disable_nereids_expression_rule.groovy
@@ -0,0 +1,28 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite('test_disable_nereids_expression_rule') {
+    def tbl = 'test_disable_nereids_expression_rule_tbl'
+    sql "DROP TABLE IF EXISTS ${tbl}"
+    sql "CREATE TABLE ${tbl}(a INT) PROPERTIES('replication_num' = '1')"
+    sql "INSERT INTO ${tbl} VALUES(10)"
+    sql "SET enable_parallel_result_sink=true"
+    qt_shape_1 "EXPLAIN SHAPE PLAN SELECT * FROM ${tbl} WHERE a = 1.1"
+    sql "SET disable_nereids_expression_rules='SIMPLIFY_COMPARISON_PREDICATE'"
+    qt_shape_2 "EXPLAIN SHAPE PLAN SELECT * FROM ${tbl} WHERE a = 1.1"
+    sql "DROP TABLE IF EXISTS ${tbl}"
+}


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

Reply via email to