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

jakevin 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 6890e5bf0f [test](Nereids): add test for SimplifyComparisonPredicate 
(#24865)
6890e5bf0f is described below

commit 6890e5bf0f185d48f6a088444bd5fc8238f8b60c
Author: jakevin <jakevin...@gmail.com>
AuthorDate: Tue Sep 26 12:50:31 2023 +0800

    [test](Nereids): add test for SimplifyComparisonPredicate (#24865)
---
 .../rules/SimplifyComparisonPredicate.java         |  15 +--
 .../rules/expression/ExpressionRewriteTest.java    |  61 -----------
 .../rules/SimplifyComparisonPredicateTest.java     | 114 +++++++++++++++++++++
 3 files changed, 116 insertions(+), 74 deletions(-)

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 19574f8f16..5c6025f060 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
@@ -85,8 +85,7 @@ public class SimplifyComparisonPredicate extends 
AbstractExpressionRewriteRule {
         }
 
         // decimalv3 type
-        if (left.getDataType() instanceof DecimalV3Type
-                && right.getDataType() instanceof DecimalV3Type) {
+        if (left.getDataType() instanceof DecimalV3Type && right.getDataType() 
instanceof DecimalV3Type) {
             return processDecimalV3TypeCoercion(cp, left, right);
         }
 
@@ -198,7 +197,7 @@ public class SimplifyComparisonPredicate extends 
AbstractExpressionRewriteRule {
         }
 
         if (left.getDataType() == DateType.INSTANCE && right.getDataType() == 
DateType.INSTANCE) {
-            //Date cp Date is not supported in BE storage engine. So cast to 
DateTime
+            // Date cp Date is not supported in BE storage engine. So cast to 
DateTime
             left = new Cast(left, DateTimeType.INSTANCE);
             if (right instanceof DateLiteral) {
                 right = migrateLiteralToDateTime((DateLiteral) originalRight);
@@ -349,16 +348,6 @@ public class SimplifyComparisonPredicate extends 
AbstractExpressionRewriteRule {
         }
     }
 
-    private Expression migrateCastToDateTime(Cast cast) {
-        //cast( cast(v as date) as datetime) if v is datetime, set left = v
-        if (cast.child() instanceof Cast
-                && cast.child().child(0).getDataType() instanceof 
DateTimeType) {
-            return cast.child().child(0);
-        } else {
-            return new Cast(cast.child(), DateTimeType.INSTANCE);
-        }
-    }
-
     /*
     derive tree:
     DateLiteral
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java
index 1010e7df27..646174c9eb 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java
@@ -23,20 +23,13 @@ import 
org.apache.doris.nereids.rules.expression.rules.InPredicateDedup;
 import 
org.apache.doris.nereids.rules.expression.rules.InPredicateToEqualToRule;
 import 
org.apache.doris.nereids.rules.expression.rules.NormalizeBinaryPredicatesRule;
 import org.apache.doris.nereids.rules.expression.rules.SimplifyCastRule;
-import 
org.apache.doris.nereids.rules.expression.rules.SimplifyComparisonPredicate;
 import 
org.apache.doris.nereids.rules.expression.rules.SimplifyDecimalV3Comparison;
 import org.apache.doris.nereids.rules.expression.rules.SimplifyNotExprRule;
 import org.apache.doris.nereids.trees.expressions.Cast;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
 import org.apache.doris.nereids.trees.expressions.Expression;
-import org.apache.doris.nereids.trees.expressions.GreaterThan;
-import org.apache.doris.nereids.trees.expressions.LessThan;
 import org.apache.doris.nereids.trees.expressions.literal.BigIntLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.CharLiteral;
-import org.apache.doris.nereids.trees.expressions.literal.DateLiteral;
-import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral;
-import org.apache.doris.nereids.trees.expressions.literal.DateTimeV2Literal;
-import org.apache.doris.nereids.trees.expressions.literal.DateV2Literal;
 import org.apache.doris.nereids.trees.expressions.literal.DecimalLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.DecimalV3Literal;
 import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral;
@@ -44,8 +37,6 @@ import 
org.apache.doris.nereids.trees.expressions.literal.SmallIntLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.StringLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.TinyIntLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral;
-import org.apache.doris.nereids.types.DateTimeType;
-import org.apache.doris.nereids.types.DateTimeV2Type;
 import org.apache.doris.nereids.types.DecimalV2Type;
 import org.apache.doris.nereids.types.DecimalV3Type;
 import org.apache.doris.nereids.types.StringType;
@@ -218,58 +209,6 @@ class ExpressionRewriteTest extends 
ExpressionRewriteTestHelper {
                 new DecimalLiteral(new BigDecimal(1)));
     }
 
-    @Test
-    void testSimplifyComparisonPredicateRule() {
-        executor = new 
ExpressionRuleExecutor(ImmutableList.of(SimplifyCastRule.INSTANCE, 
SimplifyComparisonPredicate.INSTANCE));
-
-        Expression dtv2 = new DateTimeV2Literal(1, 1, 1, 1, 1, 1, 0);
-        Expression dt = new DateTimeLiteral(1, 1, 1, 1, 1, 1);
-        Expression dv2 = new DateV2Literal(1, 1, 1);
-        Expression dv2PlusOne = new DateV2Literal(1, 1, 2);
-        Expression d = new DateLiteral(1, 1, 1);
-        // Expression dPlusOne = new DateLiteral(1, 1, 2);
-
-        // DateTimeV2 -> DateTime
-        assertRewrite(
-                new GreaterThan(new Cast(dt, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
-                new GreaterThan(dt, dt));
-
-        // DateTimeV2 -> DateV2
-        assertRewrite(
-                new GreaterThan(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
-                new GreaterThan(dv2, dv2));
-        assertRewrite(
-                new LessThan(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
-                new LessThan(dv2, dv2PlusOne));
-        assertRewrite(
-                new EqualTo(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
-                new EqualTo(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2));
-
-        // DateTimeV2 -> Date
-        assertRewrite(
-                new GreaterThan(new Cast(d, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
-                new GreaterThan(new Cast(d, DateTimeType.INSTANCE), dt));
-        assertRewrite(
-                new LessThan(new Cast(d, DateTimeV2Type.SYSTEM_DEFAULT), dtv2),
-                new LessThan(new Cast(d, DateTimeType.INSTANCE), dt));
-        assertRewrite(
-                new EqualTo(new Cast(d, DateTimeV2Type.SYSTEM_DEFAULT), dtv2),
-                new EqualTo(new Cast(d, DateTimeV2Type.SYSTEM_DEFAULT), dtv2));
-
-        // test hour, minute and second all zero
-        Expression dtv2AtZeroClock = new DateTimeV2Literal(1, 1, 1, 0, 0, 0, 
0);
-        assertRewrite(
-                new GreaterThan(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2AtZeroClock),
-                new GreaterThan(dv2, dv2));
-        assertRewrite(
-                new LessThan(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2AtZeroClock),
-                new LessThan(dv2, dv2));
-        assertRewrite(
-                new EqualTo(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2AtZeroClock),
-                new EqualTo(dv2, dv2));
-
-    }
-
     @Test
     void testSimplifyDecimalV3Comparison() {
         executor = new 
ExpressionRuleExecutor(ImmutableList.of(SimplifyDecimalV3Comparison.INSTANCE));
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicateTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicateTest.java
new file mode 100644
index 0000000000..b06d914b65
--- /dev/null
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicateTest.java
@@ -0,0 +1,114 @@
+// 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.rules;
+
+import org.apache.doris.nereids.rules.expression.ExpressionRewriteTestHelper;
+import org.apache.doris.nereids.rules.expression.ExpressionRuleExecutor;
+import org.apache.doris.nereids.trees.expressions.Cast;
+import org.apache.doris.nereids.trees.expressions.EqualTo;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.GreaterThan;
+import org.apache.doris.nereids.trees.expressions.LessThan;
+import org.apache.doris.nereids.trees.expressions.literal.DateLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.DateTimeV2Literal;
+import org.apache.doris.nereids.trees.expressions.literal.DateV2Literal;
+import org.apache.doris.nereids.types.DateTimeType;
+import org.apache.doris.nereids.types.DateTimeV2Type;
+
+import com.google.common.collect.ImmutableList;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class SimplifyComparisonPredicateTest extends ExpressionRewriteTestHelper {
+
+    @Test
+    void testSimplifyComparisonPredicateRule() {
+        executor = new 
ExpressionRuleExecutor(ImmutableList.of(SimplifyCastRule.INSTANCE, 
SimplifyComparisonPredicate.INSTANCE));
+
+        Expression dtv2 = new DateTimeV2Literal(1, 1, 1, 1, 1, 1, 0);
+        Expression dt = new DateTimeLiteral(1, 1, 1, 1, 1, 1);
+        Expression dv2 = new DateV2Literal(1, 1, 1);
+        Expression dv2PlusOne = new DateV2Literal(1, 1, 2);
+        Expression d = new DateLiteral(1, 1, 1);
+        // Expression dPlusOne = new DateLiteral(1, 1, 2);
+
+        // DateTimeV2 -> DateTime
+        assertRewrite(
+                new GreaterThan(new Cast(dt, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
+                new GreaterThan(dt, dt));
+
+        // DateTimeV2 -> DateV2
+        assertRewrite(
+                new GreaterThan(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
+                new GreaterThan(dv2, dv2));
+        assertRewrite(
+                new LessThan(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
+                new LessThan(dv2, dv2PlusOne));
+        assertRewrite(
+                new EqualTo(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
+                new EqualTo(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2));
+
+        // DateTimeV2 -> Date
+        assertRewrite(
+                new GreaterThan(new Cast(d, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2),
+                new GreaterThan(new Cast(d, DateTimeType.INSTANCE), dt));
+        assertRewrite(
+                new LessThan(new Cast(d, DateTimeV2Type.SYSTEM_DEFAULT), dtv2),
+                new LessThan(new Cast(d, DateTimeType.INSTANCE), dt));
+        assertRewrite(
+                new EqualTo(new Cast(d, DateTimeV2Type.SYSTEM_DEFAULT), dtv2),
+                new EqualTo(new Cast(d, DateTimeV2Type.SYSTEM_DEFAULT), dtv2));
+
+        // test hour, minute and second all zero
+        Expression dtv2AtZeroClock = new DateTimeV2Literal(1, 1, 1, 0, 0, 0, 
0);
+        assertRewrite(
+                new GreaterThan(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2AtZeroClock),
+                new GreaterThan(dv2, dv2));
+        assertRewrite(
+                new LessThan(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2AtZeroClock),
+                new LessThan(dv2, dv2));
+        assertRewrite(
+                new EqualTo(new Cast(dv2, DateTimeV2Type.SYSTEM_DEFAULT), 
dtv2AtZeroClock),
+                new EqualTo(dv2, dv2));
+
+    }
+
+    @Test
+    void testDateTimeV2CmpDateTimeV2() {
+        executor = new ExpressionRuleExecutor(
+                ImmutableList.of(SimplifyCastRule.INSTANCE, 
SimplifyComparisonPredicate.INSTANCE));
+
+        Expression dt = new DateTimeLiteral(1, 1, 1, 1, 1, 1);
+
+        // cast(0001-01-01 01:01:01 as DATETIMEV2(0)
+        Expression left = new Cast(dt, DateTimeV2Type.SYSTEM_DEFAULT);
+        // 2021-01-01 00:00:00.001 (DATETIMEV2(3))
+        Expression right = new DateTimeV2Literal("2021-01-01 00:00:00.001");
+
+        // (cast(0001-01-01 01:01:01 as DATETIMEV2(0)) > 2021-01-01 
00:00:00.001)
+        Expression expression = new GreaterThan(left, right);
+        Expression rewrittenExpression = 
executor.rewrite(typeCoercion(expression), context);
+        Assertions.assertEquals(left.getDataType(), 
rewrittenExpression.child(0).getDataType());
+
+        // (cast(0001-01-01 01:01:01 as DATETIMEV2(0)) < 2021-01-01 
00:00:00.001)
+        expression = new GreaterThan(left, right);
+        rewrittenExpression = executor.rewrite(typeCoercion(expression), 
context);
+        Assertions.assertEquals(left.getDataType(), 
rewrittenExpression.child(0).getDataType());
+    }
+}


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

Reply via email to