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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]