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 583e6cde94d [test](nereids) add arthmetic comparison ut (#45690)
583e6cde94d is described below
commit 583e6cde94d8bd77634bf95aa0275872b13c93ca
Author: yujun <[email protected]>
AuthorDate: Tue Dec 24 10:23:37 2024 +0800
[test](nereids) add arthmetic comparison ut (#45690)
### What problem does this PR solve?
Issue Number: close #xxx
Related PR: #xxx
Problem Summary:
---
.../SimplifyArithmeticComparisonRuleTest.java | 193 ++++++++++++++++-----
1 file changed, 147 insertions(+), 46 deletions(-)
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticComparisonRuleTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticComparisonRuleTest.java
index 4d932187611..32857d4f4ae 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticComparisonRuleTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyArithmeticComparisonRuleTest.java
@@ -21,70 +21,171 @@ import
org.apache.doris.nereids.rules.expression.ExpressionRewrite;
import org.apache.doris.nereids.rules.expression.ExpressionRewriteTestHelper;
import org.apache.doris.nereids.rules.expression.ExpressionRuleExecutor;
import org.apache.doris.nereids.trees.expressions.Expression;
-import org.apache.doris.nereids.trees.expressions.Slot;
-import org.apache.doris.nereids.trees.expressions.SlotReference;
-import org.apache.doris.nereids.types.IntegerType;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Maps;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import java.util.HashMap;
-import java.util.Map;
-
class SimplifyArithmeticComparisonRuleTest extends ExpressionRewriteTestHelper
{
@Test
- public void testProcess() {
- Map<String, Slot> nameToSlot = new HashMap<>();
- nameToSlot.put("a", new SlotReference("a", IntegerType.INSTANCE));
+ public void testNumeric() {
executor = new ExpressionRuleExecutor(ImmutableList.of(
ExpressionRewrite.bottomUp(SimplifyArithmeticComparisonRule.INSTANCE)
));
- assertRewriteAfterSimplify("a + 1 > 1", "a > cast((1 - 1) as INT)",
nameToSlot);
- assertRewriteAfterSimplify("a - 1 > 1", "a > cast((1 + 1) as INT)",
nameToSlot);
- assertRewriteAfterSimplify("a / -2 > 1", "cast((1 * -2) as INT) > a",
nameToSlot);
+
+ // test tinyint type
+ assertRewriteAfterSimplify("TA + 2 > 1", "cast(TA as SMALLINT) > (1 -
2)");
+ assertRewriteAfterSimplify("TA - 2 > 1", "cast(TA as SMALLINT) > (1 +
2)");
+ assertRewriteAfterSimplify("1 + TA > 2", "cast(TA as SMALLINT) > (2 -
1)");
+ assertRewriteAfterSimplify("-1 + TA > 2", "cast(TA as SMALLINT) > (2 -
(-1))");
+ assertRewriteAfterSimplify("1 - TA > 2", "cast(TA as SMALLINT) < (1 -
2))");
+ assertRewriteAfterSimplify("-1 - TA > 2", "cast(TA as SMALLINT) <
((-1) - 2)");
+ assertRewriteAfterSimplify("2 * TA > 1", "((2 * TA) > 1)");
+ assertRewriteAfterSimplify("-2 * TA > 1", "((-2 * TA) > 1)");
+ assertRewriteAfterSimplify("2 / TA > 1", "((2 / TA) > 1)");
+ assertRewriteAfterSimplify("-2 / TA > 1", "((-2 / TA) > 1)");
+ assertRewriteAfterSimplify("TA * 2 > 1", "((TA * 2) > 1)");
+ assertRewriteAfterSimplify("TA * (-2) > 1", "((TA * (-2)) > 1)");
+ assertRewriteAfterSimplify("TA / 2 > 1", "cast(TA as SMALLINT) > (1 *
2)");
+ assertRewriteAfterSimplify("TA / -2 > 1", "(1 * -2) > cast(TA as
SMALLINT)");
+
+ // test integer type
+ assertRewriteAfterSimplify("IA + 2 > 1", "IA > cast((1 - 2) as INT)");
+ assertRewriteAfterSimplify("IA - 2 > 1", "IA > cast((1 + 2) as INT)");
+ assertRewriteAfterSimplify("1 + IA > 2", "IA > cast((2 - 1) as INT)");
+ assertRewriteAfterSimplify("-1 + IA > 2", "IA > cast((2 - (-1)) as
INT)");
+ assertRewriteAfterSimplify("1 - IA > 2", "IA < cast((1 - 2) as INT)");
+ assertRewriteAfterSimplify("-1 - IA > 2", "IA < cast(((-1) - 2) as
INT)");
+ assertRewriteAfterSimplify("2 * IA > 1", "((2 * IA) > 1)");
+ assertRewriteAfterSimplify("-2 * IA > 1", "((-2 * IA) > 1)");
+ assertRewriteAfterSimplify("2 / IA > 1", "((2 / IA) > 1)");
+ assertRewriteAfterSimplify("-2 / IA > 1", "((-2 / IA) > 1)");
+ assertRewriteAfterSimplify("IA * 2 > 1", "((IA * 2) > 1)");
+ assertRewriteAfterSimplify("IA * (-2) > 1", "((IA * (-2)) > 1)");
+ assertRewriteAfterSimplify("IA / 2 > 1", "(IA > cast((1 * 2) as
INT))");
+ assertRewriteAfterSimplify("IA / -2 > 1", "cast((1 * -2) as INT) >
IA");
// test integer type
- assertRewriteAfterSimplify("1 + a > 2", "a > cast((2 - 1) as INT)",
nameToSlot);
- assertRewriteAfterSimplify("-1 + a > 2", "a > cast((2 - (-1)) as
INT)", nameToSlot);
- assertRewriteAfterSimplify("1 - a > 2", "a < cast((1 - 2) as INT)",
nameToSlot);
- assertRewriteAfterSimplify("-1 - a > 2", "a < cast(((-1) - 2) as
INT)", nameToSlot);
- assertRewriteAfterSimplify("2 * a > 1", "((2 * a) > 1)", nameToSlot);
- assertRewriteAfterSimplify("-2 * a > 1", "((-2 * a) > 1)", nameToSlot);
- assertRewriteAfterSimplify("2 / a > 1", "((2 / a) > 1)", nameToSlot);
- assertRewriteAfterSimplify("-2 / a > 1", "((-2 / a) > 1)", nameToSlot);
- assertRewriteAfterSimplify("a * 2 > 1", "((a * 2) > 1)", nameToSlot);
- assertRewriteAfterSimplify("a * (-2) > 1", "((a * (-2)) > 1)",
nameToSlot);
- assertRewriteAfterSimplify("a / 2 > 1", "(a > cast((1 * 2) as INT))",
nameToSlot);
+ assertRewriteAfterSimplify("TA + 2 > 200", "cast(TA as INT) > (200 -
2)");
+ assertRewriteAfterSimplify("TA - 2 > 200", "cast(TA as INT) > (200 +
2)");
+ assertRewriteAfterSimplify("1 + TA > 200", "cast(TA as INT) > (200 -
1)");
+ assertRewriteAfterSimplify("-1 + TA > 200", "cast(TA as INT) > (200 -
(-1))");
+ assertRewriteAfterSimplify("1 - TA > 200", "cast(TA as INT) < (1 -
200))");
+ assertRewriteAfterSimplify("-1 - TA > 200", "cast(TA as INT) < ((-1) -
200)");
+ assertRewriteAfterSimplify("2 * TA > 200", "((2 * TA) > 200)");
+ assertRewriteAfterSimplify("-2 * TA > 200", "((-2 * TA) > 200)");
+ assertRewriteAfterSimplify("2 / TA > 200", "((2 / TA) > 200)");
+ assertRewriteAfterSimplify("-2 / TA > 200", "((-2 / TA) > 200)");
+ assertRewriteAfterSimplify("TA * 2 > 200", "((TA * 2) > 200)");
+ assertRewriteAfterSimplify("TA * (-2) > 200", "((TA * (-2)) > 200)");
+ assertRewriteAfterSimplify("TA / 2 > 200", "cast(TA as INT) > (200 *
2)");
+ assertRewriteAfterSimplify("TA / -2 > 200", "(200 * -2) > cast(TA as
INT)");
// test decimal type
- assertRewriteAfterSimplify("1.1 + a > 2.22", "(cast(a as DECIMALV3(12,
2)) > cast((2.22 - 1.1) as DECIMALV3(12, 2)))", nameToSlot);
- assertRewriteAfterSimplify("-1.1 + a > 2.22", "(cast(a as
DECIMALV3(12, 2)) > cast((2.22 - (-1.1)) as DECIMALV3(12, 2)))", nameToSlot);
- assertRewriteAfterSimplify("1.1 - a > 2.22", "(cast(a as DECIMALV3(11,
1)) < cast((1.1 - 2.22) as DECIMALV3(11, 1)))", nameToSlot);
- assertRewriteAfterSimplify("-1.1 - a > 2.22", "(cast(a as
DECIMALV3(11, 1)) < cast((-1.1 - 2.22) as DECIMALV3(11, 1)))", nameToSlot);
- assertRewriteAfterSimplify("2.22 * a > 1.1", "((2.22 * a) > 1.1)",
nameToSlot);
- assertRewriteAfterSimplify("-2.22 * a > 1.1", "-2.22 * a > 1.1",
nameToSlot);
- assertRewriteAfterSimplify("2.22 / a > 1.1", "((2.22 / a) > 1.1)",
nameToSlot);
- assertRewriteAfterSimplify("-2.22 / a > 1.1", "((-2.22 / a) > 1.1)",
nameToSlot);
- assertRewriteAfterSimplify("a * 2.22 > 1.1", "a * 2.22 > 1.1",
nameToSlot);
- assertRewriteAfterSimplify("a * (-2.22) > 1.1", "a * (-2.22) > 1.1",
nameToSlot);
- assertRewriteAfterSimplify("a / 2.22 > 1.1", "(cast(a as DECIMALV3(13,
3)) > cast((1.1 * 2.22) as DECIMALV3(13, 3)))", nameToSlot);
- assertRewriteAfterSimplify("a / (-2.22) > 1.1", "(cast((1.1 * -2.22)
as DECIMALV3(13, 3)) > cast(a as DECIMALV3(13, 3)))", nameToSlot);
-
- // test (1 + a) can be processed
- assertRewriteAfterSimplify("2 - (1 + a) > 3", "(a < ((2 - 3) - 1))",
nameToSlot);
- assertRewriteAfterSimplify("(1 - a) / 2 > 3", "(a < (1 - 6))",
nameToSlot);
- assertRewriteAfterSimplify("1 - a / 2 > 3", "(a < ((1 - 3) * 2))",
nameToSlot);
- assertRewriteAfterSimplify("(1 - (a + 4)) / 2 > 3", "(cast(a as
BIGINT) < ((1 - 6) - 4))", nameToSlot);
- assertRewriteAfterSimplify("2 * (1 + a) > 1", "(2 * (1 + a)) > 1",
nameToSlot);
+ assertRewriteAfterSimplify("1.1 + IA > 2.22", "(cast(IA as
DECIMALV3(12, 2)) > cast((2.22 - 1.1) as DECIMALV3(12, 2)))");
+ assertRewriteAfterSimplify("-1.1 + IA > 2.22", "(cast(IA as
DECIMALV3(12, 2)) > cast((2.22 - (-1.1)) as DECIMALV3(12, 2)))");
+ assertRewriteAfterSimplify("1.1 - IA > 2.22", "(cast(IA as
DECIMALV3(11, 1)) < cast((1.1 - 2.22) as DECIMALV3(11, 1)))");
+ assertRewriteAfterSimplify("-1.1 - IA > 2.22", "(cast(IA as
DECIMALV3(11, 1)) < cast((-1.1 - 2.22) as DECIMALV3(11, 1)))");
+ assertRewriteAfterSimplify("2.22 * IA > 1.1", "((2.22 * IA) > 1.1)");
+ assertRewriteAfterSimplify("-2.22 * IA > 1.1", "-2.22 * IA > 1.1");
+ assertRewriteAfterSimplify("2.22 / IA > 1.1", "((2.22 / IA) > 1.1)");
+ assertRewriteAfterSimplify("-2.22 / IA > 1.1", "((-2.22 / IA) > 1.1)");
+ assertRewriteAfterSimplify("IA * 2.22 > 1.1", "IA * 2.22 > 1.1");
+ assertRewriteAfterSimplify("IA * (-2.22) > 1.1", "IA * (-2.22) > 1.1");
+ assertRewriteAfterSimplify("IA / 2.22 > 1.1", "(cast(IA as
DECIMALV3(13, 3)) > cast((1.1 * 2.22) as DECIMALV3(13, 3)))");
+ assertRewriteAfterSimplify("IA / (-2.22) > 1.1", "(cast((1.1 * -2.22)
as DECIMALV3(13, 3)) > cast(IA as DECIMALV3(13, 3)))");
+
+ // test (1 + IA) can be processed
+ assertRewriteAfterSimplify("2 - (1 + IA) > 3", "(IA < ((2 - 3) - 1))");
+ assertRewriteAfterSimplify("(1 - IA) / 2 > 3", "(IA < (1 - 6))");
+ assertRewriteAfterSimplify("1 - IA / 2 > 3", "(IA < ((1 - 3) * 2))");
+ assertRewriteAfterSimplify("(1 - (IA + 4)) / 2 > 3", "(cast(IA as
BIGINT) < ((1 - 6) - 4))");
+ assertRewriteAfterSimplify("2 * (1 + IA) > 1", "(2 * (1 + IA)) > 1");
+
+ // test (IA + IB) can be processed
+ assertRewriteAfterSimplify("2 - (1 + (IA + IB)) > 3", "(IA + IB) <
cast(((2 - 3) - 1) as BIGINT)");
+ assertRewriteAfterSimplify("(1 - (IA + IB)) / 2 > 3", "(IA + IB) <
cast((1 - 6) as BIGINT)");
+ assertRewriteAfterSimplify("1 - (IA + IB) / 2 > 3", "(IA + IB) <
cast(((1 - 3) * 2) as BIGINT)");
+ assertRewriteAfterSimplify("2 * (1 + (IA + IB)) > 1", "(2 * (1 + (IA +
IB))) > 1");
+ }
+
+ @Test
+ public void testDateLike() {
+ executor = new ExpressionRuleExecutor(ImmutableList.of(
+ bottomUp(
+ SimplifyArithmeticRule.INSTANCE,
+ SimplifyArithmeticComparisonRule.INSTANCE
+ )
+ ));
+
+ // test datetimev2 type
+ assertRewriteAfterTypeCoercion("years_add(AA, 1) > '2021-01-01
00:00:00'", "(years_add(AA, 1) > '2021-01-01 00:00:00')");
+ assertRewriteAfterTypeCoercion("years_sub(AA, 1) > '2021-01-01
00:00:00'", "(years_sub(AA, 1) > '2021-01-01 00:00:00')");
+ assertRewriteAfterTypeCoercion("months_add(AA, 1) > '2021-01-01
00:00:00'", "(months_add(AA, 1) > '2021-01-01 00:00:00')");
+ assertRewriteAfterTypeCoercion("months_sub(AA, 1) > '2021-01-01
00:00:00'", "(months_sub(AA, 1) > '2021-01-01 00:00:00')");
+ assertRewriteAfterTypeCoercion("weeks_add(AA, 1) > '2021-01-01
00:00:00'", "AA > weeks_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("weeks_sub(AA, 1) > '2021-01-01
00:00:00'", "AA > weeks_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("days_add(AA, 1) > '2021-01-01
00:00:00'", "AA > days_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("days_sub(AA, 1) > '2021-01-01
00:00:00'", "AA > days_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("hours_add(AA, 1) > '2021-01-01
00:00:00'", "AA > hours_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("hours_sub(AA, 1) > '2021-01-01
00:00:00'", "AA > hours_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("minutes_add(AA, 1) > '2021-01-01
00:00:00'", "AA > minutes_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("minutes_sub(AA, 1) > '2021-01-01
00:00:00'", "AA > minutes_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("seconds_add(AA, 1) > '2021-01-01
00:00:00'", "AA > seconds_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("seconds_sub(AA, 1) > '2021-01-01
00:00:00'", "AA > seconds_add('2021-01-01 00:00:00', 1)");
+
+ assertRewriteAfterTypeCoercion("years_add(AA, 1) > '2021-01-01'",
"(years_add(AA, 1) > '2021-01-01 00:00:00')");
+ assertRewriteAfterTypeCoercion("years_sub(AA, 1) > '2021-01-01'",
"(years_sub(AA, 1) > '2021-01-01 00:00:00')");
+ assertRewriteAfterTypeCoercion("months_add(AA, 1) > '2021-01-01'",
"(months_add(AA, 1) > '2021-01-01 00:00:00')");
+ assertRewriteAfterTypeCoercion("months_sub(AA, 1) > '2021-01-01'",
"(months_sub(AA, 1) > '2021-01-01 00:00:00')");
+ assertRewriteAfterTypeCoercion("weeks_add(AA, 1) > '2021-01-01'", "AA
> weeks_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("weeks_sub(AA, 1) > '2021-01-01'", "AA
> weeks_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("days_add(AA, 1) > '2021-01-01'", "AA >
days_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("days_sub(AA, 1) > '2021-01-01'", "AA >
days_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("hours_add(AA, 1) > '2021-01-01'", "AA
> hours_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("hours_sub(AA, 1) > '2021-01-01'", "AA
> hours_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("minutes_add(AA, 1) > '2021-01-01'",
"AA > minutes_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("minutes_sub(AA, 1) > '2021-01-01'",
"AA > minutes_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("seconds_add(AA, 1) > '2021-01-01'",
"AA > seconds_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("seconds_sub(AA, 1) > '2021-01-01'",
"AA > seconds_add('2021-01-01 00:00:00', 1)");
+
+ // test date type
+ assertRewriteAfterTypeCoercion("years_add(CA, 1) > '2021-01-01'",
"years_add(CA, 1) > cast('2021-01-01' as date)");
+ assertRewriteAfterTypeCoercion("years_sub(CA, 1) > '2021-01-01'",
"years_sub(CA, 1) > cast('2021-01-01' as date)");
+ assertRewriteAfterTypeCoercion("months_add(CA, 1) > '2021-01-01'",
"months_add(CA, 1) > cast('2021-01-01' as date)");
+ assertRewriteAfterTypeCoercion("months_sub(CA, 1) > '2021-01-01'",
"months_sub(CA, 1) > cast('2021-01-01' as date)");
+ assertRewriteAfterTypeCoercion("weeks_add(CA, 1) > '2021-01-01'", "CA
> weeks_sub(cast('2021-01-01' as date), 1)");
+ assertRewriteAfterTypeCoercion("weeks_sub(CA, 1) > '2021-01-01'", "CA
> weeks_add(cast('2021-01-01' as date), 1)");
+ assertRewriteAfterTypeCoercion("days_add(CA, 1) > '2021-01-01'", "CA >
days_sub(cast('2021-01-01' as date), 1)");
+ assertRewriteAfterTypeCoercion("days_sub(CA, 1) > '2021-01-01'", "CA >
days_add(cast('2021-01-01' as date), 1)");
+ assertRewriteAfterTypeCoercion("hours_add(CA, 1) > '2021-01-01'",
"cast(CA as datetime) > hours_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("hours_sub(CA, 1) > '2021-01-01'",
"cast(CA as datetime) > hours_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("minutes_add(CA, 1) > '2021-01-01'",
"cast(CA as datetime) > minutes_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("minutes_sub(CA, 1) > '2021-01-01'",
"cast(CA as datetime) > minutes_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("seconds_add(CA, 1) > '2021-01-01'",
"cast(CA as datetime) > seconds_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("seconds_sub(CA, 1) > '2021-01-01'",
"cast(CA as datetime) > seconds_add('2021-01-01 00:00:00', 1)");
+
+ assertRewriteAfterTypeCoercion("years_add(CA, 1) > '2021-01-01
00:00:00'", "years_add(CA, 1) > cast('2021-01-01' as date)");
+ assertRewriteAfterTypeCoercion("years_sub(CA, 1) > '2021-01-01
00:00:00'", "years_sub(CA, 1) > cast('2021-01-01' as date)");
+ assertRewriteAfterTypeCoercion("months_add(CA, 1) > '2021-01-01
00:00:00'", "months_add(CA, 1) > cast('2021-01-01' as date)");
+ assertRewriteAfterTypeCoercion("months_sub(CA, 1) > '2021-01-01
00:00:00'", "months_sub(CA, 1) > cast('2021-01-01' as date)");
+ assertRewriteAfterTypeCoercion("weeks_add(CA, 1) > '2021-01-01
00:00:00'", "CA > weeks_sub(cast('2021-01-01' as date), 1)");
+ assertRewriteAfterTypeCoercion("weeks_sub(CA, 1) > '2021-01-01
00:00:00'", "CA > weeks_add(cast('2021-01-01' as date), 1)");
+ assertRewriteAfterTypeCoercion("days_add(CA, 1) > '2021-01-01
00:00:00'", "CA > days_sub(cast('2021-01-01' as date), 1)");
+ assertRewriteAfterTypeCoercion("days_sub(CA, 1) > '2021-01-01
00:00:00'", "CA > days_add(cast('2021-01-01' as date), 1)");
+ assertRewriteAfterTypeCoercion("hours_add(CA, 1) > '2021-01-01
00:00:00'", "cast(CA as datetime) > hours_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("hours_sub(CA, 1) > '2021-01-01
00:00:00'", "cast(CA as datetime) > hours_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("minutes_add(CA, 1) > '2021-01-01
00:00:00'", "cast(CA as datetime) > minutes_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("minutes_sub(CA, 1) > '2021-01-01
00:00:00'", "cast(CA as datetime) > minutes_add('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("seconds_add(CA, 1) > '2021-01-01
00:00:00'", "cast(CA as datetime) > seconds_sub('2021-01-01 00:00:00', 1)");
+ assertRewriteAfterTypeCoercion("seconds_sub(CA, 1) > '2021-01-01
00:00:00'", "cast(CA as datetime) > seconds_add('2021-01-01 00:00:00', 1)");
}
- private void assertRewriteAfterSimplify(String expr, String expected,
Map<String, Slot> slotNameToSlot) {
+ private void assertRewriteAfterSimplify(String expr, String expected) {
Expression needRewriteExpression = PARSER.parseExpression(expr);
- if (slotNameToSlot != null) {
- needRewriteExpression = replaceUnboundSlot(needRewriteExpression,
slotNameToSlot);
- }
+ needRewriteExpression = replaceUnboundSlot(needRewriteExpression,
Maps.newHashMap());
Expression rewritten = executor.rewrite(needRewriteExpression,
context);
Expression expectedExpression = PARSER.parseExpression(expected);
Assertions.assertEquals(expectedExpression.toSql(), rewritten.toSql());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]