morrySnow commented on code in PR #49457:
URL: https://github.com/apache/doris/pull/49457#discussion_r2021297589


##########
fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/ExpressionRewriteSqlTest.java:
##########
@@ -44,4 +43,44 @@ public void testExtractNonConstant() {
                                 "OR[id#0 IN (10, 20, 30, 300),(id#0 = 
score#1),(id#0 = (score#1 + 10)),(id#0 = (score#1 + score#1))]"
                 )));
     }
+
+    @Test
+    public void testSimplifyRangeAndExtractCommonFactor() {
+        String sql = "select * from T1 where id > 1 and score > 1 or id > 1 
and score > 10";
+        PlanChecker.from(connectContext)
+                .analyze(sql)
+                .rewrite()
+                .matches(
+                        logicalFilter().when(f -> 
f.getPredicate().toString().equals(
+                                "AND[(id#0 > 1),(score#1 > 1)]"
+                        )));
+
+        sql = "select * from T1 where id > 1 and score > 1 or id > 1 and id < 
0";
+        PlanChecker.from(connectContext)
+                .analyze(sql)
+                .rewrite()
+                .matches(
+                        logicalFilter().when(f -> 
f.getPredicate().toString().equals(
+                                "AND[(score#1 > 1),(id#0 > 1)]"

Review Comment:
   check with toString is not a good idea, maybe `toSql` or a new util function 
`equalsWithoutExprId` is better



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateFilter.java:
##########
@@ -49,7 +50,14 @@ public List<Rule> buildRules() {
                 .thenApply(ctx -> {
                     LogicalFilter<Plan> filter = ctx.root;
                     ImmutableSet.Builder<Expression> newConjuncts = 
ImmutableSet.builder();
+                    boolean needEliminateNull = 
!ctx.cascadesContext.getConnectContext().getSessionVariable()
+                            .isDebugSkipFoldConstant();
+                    ExpressionRewriteContext context =
+                            new ExpressionRewriteContext(ctx.cascadesContext);
                     for (Expression expression : filter.getConjuncts()) {
+                        if (needEliminateNull) {
+                            expression = 
FoldConstantRule.evaluate(eliminateNullLiteral(expression), context);

Review Comment:
   chould we check `isDebugSkipFoldConstant` in `FoldConstantRule.evaluate` and 
in `eliminateNullLiteral` directly?



##########
fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateFilterTest.java:
##########
@@ -62,6 +69,80 @@ void testEliminateFilterNull() {
                 .matches(logicalEmptyRelation());
     }
 
+    @Test
+    void testEliminateFilterReduceNull() {

Review Comment:
   test `replaceNullToFalse` function directly in UT to ensure it works a 
expsectd



-- 
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