This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new 1314a2b9428 branch-2.1: [test](nereids) add test simplify comparison
predicate #44886 (#45804)
1314a2b9428 is described below
commit 1314a2b94282f200baac636b62a3f7a2c02505b0
Author: yujun <[email protected]>
AuthorDate: Tue Dec 24 21:43:15 2024 +0800
branch-2.1: [test](nereids) add test simplify comparison predicate #44886
(#45804)
cherry pick from #44886
---
.../rules/SimplifyComparisonPredicateTest.java | 164 +++++++++++++++++++-
.../test_simplify_comparison_predicate.groovy | 170 +++++++++++++++++++++
2 files changed, 333 insertions(+), 1 deletion(-)
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
index 3038dbab41d..210408f80dc 100644
---
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
@@ -38,7 +38,12 @@ 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.DecimalV3Literal;
import org.apache.doris.nereids.trees.expressions.literal.DoubleLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.FloatLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral;
import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.SmallIntLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.TinyIntLiteral;
+import org.apache.doris.nereids.types.BigIntType;
import org.apache.doris.nereids.types.BooleanType;
import org.apache.doris.nereids.types.DateTimeType;
import org.apache.doris.nereids.types.DateTimeV2Type;
@@ -46,6 +51,10 @@ import org.apache.doris.nereids.types.DateType;
import org.apache.doris.nereids.types.DateV2Type;
import org.apache.doris.nereids.types.DecimalV3Type;
import org.apache.doris.nereids.types.DoubleType;
+import org.apache.doris.nereids.types.FloatType;
+import org.apache.doris.nereids.types.IntegerType;
+import org.apache.doris.nereids.types.SmallIntType;
+import org.apache.doris.nereids.types.TinyIntType;
import org.apache.doris.nereids.util.ExpressionUtils;
import com.google.common.collect.ImmutableList;
@@ -283,10 +292,163 @@ class SimplifyComparisonPredicateTest extends
ExpressionRewriteTestHelper {
Expression rewrittenExpression = executor.rewrite(expression, context);
Assertions.assertEquals(left.child(0).getDataType(),
rewrittenExpression.child(1).getDataType());
Assertions.assertEquals(rewrittenExpression.child(0).getDataType(),
rewrittenExpression.child(1).getDataType());
+
+ Expression tinyIntSlot = new SlotReference("a", TinyIntType.INSTANCE);
+ Expression smallIntSlot = new SlotReference("a",
SmallIntType.INSTANCE);
+ Expression intSlot = new SlotReference("a", IntegerType.INSTANCE);
+ Expression bigIntSlot = new SlotReference("a", BigIntType.INSTANCE);
+
+ // tiny int, literal not exceeds data type limit
+ assertRewrite(new EqualTo(new Cast(tinyIntSlot, FloatType.INSTANCE),
new FloatLiteral(12.0f)),
+ new EqualTo(tinyIntSlot, new TinyIntLiteral((byte) 12)));
+ assertRewrite(new EqualTo(new Cast(tinyIntSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.0f)),
+ new EqualTo(tinyIntSlot, new TinyIntLiteral((byte) 12)));
+ assertRewrite(new EqualTo(new Cast(tinyIntSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.3f)),
+ ExpressionUtils.falseOrNull(tinyIntSlot));
+ assertRewrite(new NullSafeEqual(new Cast(tinyIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ BooleanLiteral.FALSE);
+ assertRewrite(new GreaterThan(new Cast(tinyIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new GreaterThan(tinyIntSlot, new TinyIntLiteral((byte) 12)));
+ assertRewrite(new GreaterThanEqual(new Cast(tinyIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new GreaterThanEqual(tinyIntSlot, new TinyIntLiteral((byte)
13)));
+ assertRewrite(new LessThan(new Cast(tinyIntSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.3f)),
+ new LessThan(tinyIntSlot, new TinyIntLiteral((byte) 13)));
+ assertRewrite(new LessThanEqual(new Cast(tinyIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new LessThanEqual(tinyIntSlot, new TinyIntLiteral((byte) 12)));
+
+ // small int
+ assertRewrite(new EqualTo(new Cast(smallIntSlot, FloatType.INSTANCE),
new FloatLiteral(12.0f)),
+ new EqualTo(smallIntSlot, new SmallIntLiteral((short) 12)));
+ assertRewrite(new EqualTo(new Cast(smallIntSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.0f)),
+ new EqualTo(smallIntSlot, new SmallIntLiteral((short) 12)));
+ assertRewrite(new EqualTo(new Cast(smallIntSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.3f)),
+ ExpressionUtils.falseOrNull(smallIntSlot));
+ assertRewrite(new NullSafeEqual(new Cast(smallIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ BooleanLiteral.FALSE);
+ assertRewrite(new GreaterThan(new Cast(smallIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new GreaterThan(smallIntSlot, new SmallIntLiteral((short)
12)));
+ assertRewrite(new GreaterThanEqual(new Cast(smallIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new GreaterThanEqual(smallIntSlot, new SmallIntLiteral((short)
13)));
+ assertRewrite(new LessThan(new Cast(smallIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new LessThan(smallIntSlot, new SmallIntLiteral((short) 13)));
+ assertRewrite(new LessThanEqual(new Cast(smallIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new LessThanEqual(smallIntSlot, new SmallIntLiteral((short)
12)));
+
+ // int
+ assertRewrite(new EqualTo(new Cast(intSlot, FloatType.INSTANCE), new
FloatLiteral(12.0f)),
+ new EqualTo(intSlot, new IntegerLiteral(12)));
+ assertRewrite(new EqualTo(new Cast(intSlot, DoubleType.INSTANCE), new
DoubleLiteral(12.0f)),
+ new EqualTo(intSlot, new IntegerLiteral(12)));
+ assertRewrite(new EqualTo(new Cast(intSlot, DoubleType.INSTANCE), new
DoubleLiteral(12.3f)),
+ ExpressionUtils.falseOrNull(intSlot));
+ assertRewrite(new NullSafeEqual(new Cast(intSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ BooleanLiteral.FALSE);
+ assertRewrite(new GreaterThan(new Cast(intSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.3f)),
+ new GreaterThan(intSlot, new IntegerLiteral(12)));
+ assertRewrite(new GreaterThanEqual(new Cast(intSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new GreaterThanEqual(intSlot, new IntegerLiteral(13)));
+ assertRewrite(new LessThan(new Cast(intSlot, DoubleType.INSTANCE), new
DoubleLiteral(12.3f)),
+ new LessThan(intSlot, new IntegerLiteral(13)));
+ assertRewrite(new LessThanEqual(new Cast(intSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new LessThanEqual(intSlot, new IntegerLiteral(12)));
+
+ // big int
+ assertRewrite(new EqualTo(new Cast(bigIntSlot, FloatType.INSTANCE),
new FloatLiteral(12.0f)),
+ new EqualTo(bigIntSlot, new BigIntLiteral(12L)));
+ assertRewrite(new EqualTo(new Cast(bigIntSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.0f)),
+ new EqualTo(bigIntSlot, new BigIntLiteral(12L)));
+ assertRewrite(new EqualTo(new Cast(bigIntSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.3f)),
+ ExpressionUtils.falseOrNull(bigIntSlot));
+ assertRewrite(new NullSafeEqual(new Cast(bigIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ BooleanLiteral.FALSE);
+ assertRewrite(new GreaterThan(new Cast(bigIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new GreaterThan(bigIntSlot, new BigIntLiteral(12L)));
+ assertRewrite(new GreaterThanEqual(new Cast(bigIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new GreaterThanEqual(bigIntSlot, new BigIntLiteral(13L)));
+ assertRewrite(new LessThan(new Cast(bigIntSlot, DoubleType.INSTANCE),
new DoubleLiteral(12.3f)),
+ new LessThan(bigIntSlot, new BigIntLiteral(13L)));
+ assertRewrite(new LessThanEqual(new Cast(bigIntSlot,
DoubleType.INSTANCE), new DoubleLiteral(12.3f)),
+ new LessThanEqual(bigIntSlot, new BigIntLiteral(12L)));
+ }
+
+ @Test
+ void testIntCmpDecimalV3Literal() {
+ executor = new ExpressionRuleExecutor(ImmutableList.of(
+ bottomUp(SimplifyComparisonPredicate.INSTANCE)
+ ));
+
+ Expression tinyIntSlot = new SlotReference("a", TinyIntType.INSTANCE);
+ Expression smallIntSlot = new SlotReference("a",
SmallIntType.INSTANCE);
+ Expression intSlot = new SlotReference("a", IntegerType.INSTANCE);
+ Expression bigIntSlot = new SlotReference("a", BigIntType.INSTANCE);
+
+ // tiny int, literal not exceeds data type limit
+ assertRewrite(new EqualTo(new Cast(tinyIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.0"))),
+ new EqualTo(tinyIntSlot, new TinyIntLiteral((byte) 12)));
+ assertRewrite(new EqualTo(new Cast(tinyIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ ExpressionUtils.falseOrNull(tinyIntSlot));
+ assertRewrite(new NullSafeEqual(new Cast(tinyIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ BooleanLiteral.FALSE);
+ assertRewrite(new GreaterThan(new Cast(tinyIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new GreaterThan(tinyIntSlot, new TinyIntLiteral((byte) 12)));
+ assertRewrite(new GreaterThanEqual(new Cast(tinyIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new GreaterThanEqual(tinyIntSlot, new TinyIntLiteral((byte)
13)));
+ assertRewrite(new LessThan(new Cast(tinyIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new LessThan(tinyIntSlot, new TinyIntLiteral((byte) 13)));
+ assertRewrite(new LessThanEqual(new Cast(tinyIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new LessThanEqual(tinyIntSlot, new TinyIntLiteral((byte) 12)));
+
+ // small int
+ assertRewrite(new EqualTo(new Cast(smallIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.0"))),
+ new EqualTo(smallIntSlot, new SmallIntLiteral((short) 12)));
+ assertRewrite(new EqualTo(new Cast(smallIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ ExpressionUtils.falseOrNull(smallIntSlot));
+ assertRewrite(new NullSafeEqual(new Cast(smallIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ BooleanLiteral.FALSE);
+ assertRewrite(new GreaterThan(new Cast(smallIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new GreaterThan(smallIntSlot, new SmallIntLiteral((short)
12)));
+ assertRewrite(new GreaterThanEqual(new Cast(smallIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new GreaterThanEqual(smallIntSlot, new SmallIntLiteral((short)
13)));
+ assertRewrite(new LessThan(new Cast(smallIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new LessThan(smallIntSlot, new SmallIntLiteral((short) 13)));
+ assertRewrite(new LessThanEqual(new Cast(smallIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new LessThanEqual(smallIntSlot, new SmallIntLiteral((short)
12)));
+
+ // int
+ assertRewrite(new EqualTo(new Cast(intSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.0"))),
+ new EqualTo(intSlot, new IntegerLiteral(12)));
+ assertRewrite(new EqualTo(new Cast(intSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ ExpressionUtils.falseOrNull(intSlot));
+ assertRewrite(new NullSafeEqual(new Cast(intSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ BooleanLiteral.FALSE);
+ assertRewrite(new GreaterThan(new Cast(intSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new GreaterThan(intSlot, new IntegerLiteral(12)));
+ assertRewrite(new GreaterThanEqual(new Cast(intSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new GreaterThanEqual(intSlot, new IntegerLiteral(13)));
+ assertRewrite(new LessThan(new Cast(intSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new LessThan(intSlot, new IntegerLiteral(13)));
+ assertRewrite(new LessThanEqual(new Cast(intSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new LessThanEqual(intSlot, new IntegerLiteral(12)));
+
+ // big int
+ assertRewrite(new EqualTo(new Cast(bigIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.0"))),
+ new EqualTo(bigIntSlot, new BigIntLiteral(12L)));
+ assertRewrite(new EqualTo(new Cast(bigIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ ExpressionUtils.falseOrNull(bigIntSlot));
+ assertRewrite(new NullSafeEqual(new Cast(bigIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ BooleanLiteral.FALSE);
+ assertRewrite(new GreaterThan(new Cast(bigIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new GreaterThan(bigIntSlot, new BigIntLiteral(12L)));
+ assertRewrite(new GreaterThanEqual(new Cast(bigIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new GreaterThanEqual(bigIntSlot, new BigIntLiteral(13L)));
+ assertRewrite(new LessThan(new Cast(bigIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new LessThan(bigIntSlot, new BigIntLiteral(13L)));
+ assertRewrite(new LessThanEqual(new Cast(bigIntSlot,
DecimalV3Type.createDecimalV3Type(3, 1)), new DecimalV3Literal(new
BigDecimal("12.3"))),
+ new LessThanEqual(bigIntSlot, new BigIntLiteral(12L)));
}
@Test
- void testDecimalV3Literal() {
+ void testDecimalCmpDecimalV3Literal() {
executor = new ExpressionRuleExecutor(ImmutableList.of(
bottomUp(SimplifyComparisonPredicate.INSTANCE)
));
diff --git
a/regression-test/suites/nereids_rules_p0/expression/test_simplify_comparison_predicate.groovy
b/regression-test/suites/nereids_rules_p0/expression/test_simplify_comparison_predicate.groovy
new file mode 100644
index 00000000000..af975aeeaa2
--- /dev/null
+++
b/regression-test/suites/nereids_rules_p0/expression/test_simplify_comparison_predicate.groovy
@@ -0,0 +1,170 @@
+// 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.
+
+// TODO: date datetime comparison still has bug, need fix.
+suite('test_simplify_comparison_predicate', 'nonConcurrent') {
+ def tbl = 'test_simplify_comparison_predicate_tbl'
+ def checkExplain = { expression, resExpression ->
+ def checker = { explainString, exception, startTime, endTime ->
+ assertNull(exception)
+ def foundOutputExprs = false
+ def succ = false
+ for (def line : explainString.split('\n')) {
+ if (foundOutputExprs) {
+ assertTrue(line.contains(resExpression), "'${line}' no
contains '${resExpression}'")
+ succ = true
+ break
+ }
+ if (line.contains('OUTPUT EXPRS:')) {
+ foundOutputExprs = true
+ }
+ }
+ assertTrue(foundOutputExprs)
+ assertTrue(succ)
+ }
+
+ explain {
+ sql "SELECT ${expression} FROM ${tbl}"
+ check checker
+ }
+ }
+ def testSimplify = { checkNullColumn, checkNotNullColumn, expression,
resExpression ->
+ def types = ['']
+ def column = ''
+ if (expression.contains('{int_like_column}')) {
+ column = '{int_like_column}'
+ types = ['tinyint', 'smallint', 'int', 'bigint']
+ } else if (expression.contains('{decimal_column}')) {
+ column = '{decimal_column}'
+ types = ['decimal_3_0', 'decimal_5_2']
+ } else if (expression.contains('{date_column}')) {
+ column = '{date_column}'
+ types = ['date', 'datev1']
+ } else if (expression.contains('{datetime_column}')) {
+ column = '{datetime_column}'
+ types = ['datetime_0', 'datetime_3', 'datetimev1']
+ }
+ for (def type : types) {
+ if (type == '') {
+ checkExplain expression, resExpression
+ } else {
+ if (checkNullColumn) {
+ checkExplain expression.replace(column, "c_${type}_null"),
resExpression.replace(column, "c_${type}_null")
+ }
+ if (checkNotNullColumn) {
+ checkExplain expression.replace(column, "c_${type}"),
resExpression.replace(column, "c_${type}")
+ }
+ }
+ }
+ }
+
+ setFeConfigTemporary([disable_datev1:false, disable_decimalv2:false]) {
+ sql """
+ DROP TABLE IF EXISTS ${tbl} FORCE;
+
+ CREATE TABLE ${tbl} (
+ c_tinyint tinyint not null default 1,
+ c_tinyint_null tinyint,
+ c_smallint smallint not null default 1,
+ c_smallint_null smallint,
+ c_int int not null default 1,
+ c_int_null int,
+ c_bigint bigint not null default 1,
+ c_bigint_null bigint,
+ c_decimal_3_0 decimal(3, 0) not null default 1,
+ c_decimal_3_0_null decimal(3, 0),
+ c_decimal_5_2 decimal(5, 2) not null default 1,
+ c_decimal_5_2_null decimal(5, 2),
+ c_date date not null default '2000-01-01',
+ c_date_null date,
+ c_datev1 datev1 not null default '2000-01-01',
+ c_datev1_null datev1 null,
+ c_datetime_0 datetime(0) not null default '2000-01-01
00:00:00',
+ c_datetime_0_null datetime(0),
+ c_datetime_3 datetime(3) not null default '2000-01-01
00:00:00',
+ c_datetime_3_null datetime(3),
+ c_datetimev1 datetimev1 not null default '2000-01-01
00:00:00',
+ c_datetimev1_null datetimev1
+ )
+ PROPERTIES ('replication_num' = '1');
+
+ INSERT INTO ${tbl} VALUES();
+ """
+
+ testSimplify true, true, '{int_like_column} = CAST(1.00 as DOUBLE)',
'({int_like_column} = 1)'
+ testSimplify true, false, '{int_like_column} = CAST(1.01 as DOUBLE)',
'AND[{int_like_column} IS NULL,NULL]'
+ testSimplify false, true, '{int_like_column} = CAST(1.01 as DOUBLE)',
'FALSE'
+ testSimplify true, true, '{int_like_column} <=> CAST(1.01 as DOUBLE)',
'FALSE'
+ testSimplify true, true, '{int_like_column} > CAST(1.00 as DOUBLE)',
'({int_like_column} > 1)'
+ testSimplify true, true, '{int_like_column} < CAST(1.00 as DOUBLE)',
'({int_like_column} < 1)'
+ testSimplify true, true, '{int_like_column} > CAST(1.01 as DOUBLE)',
'({int_like_column} > 1)'
+ testSimplify true, true, '{int_like_column} >= CAST(1.01 as DOUBLE)',
'({int_like_column} >= 2)'
+ testSimplify true, true, '{int_like_column} <= CAST(1.01 as DOUBLE)',
'({int_like_column} <= 1)'
+ testSimplify true, true, '{int_like_column} < CAST(1.01 as DOUBLE)',
'({int_like_column} < 2)'
+ testSimplify true, true, '{int_like_column} = 1.00',
'({int_like_column} = 1)'
+ testSimplify true, true, '{int_like_column} > 1.00',
'({int_like_column} > 1)'
+ testSimplify true, true, '{int_like_column} < 1.00',
'({int_like_column} < 1)'
+ testSimplify true, false, '{int_like_column} = 1.01',
'AND[{int_like_column} IS NULL,NULL]'
+ testSimplify false, true, '{int_like_column} = 1.01', 'FALSE'
+ testSimplify true, true, '{int_like_column} <=> 1.01', 'FALSE'
+ testSimplify true, true, '{int_like_column} > 1.01',
'({int_like_column} > 1)'
+ testSimplify true, true, '{int_like_column} >= 1.01',
'({int_like_column} >= 2)'
+ testSimplify true, true, '{int_like_column} <= 1.01',
'({int_like_column} <= 1)'
+ testSimplify true, true, '{int_like_column} < 1.01',
'({int_like_column} < 2)'
+ testSimplify false, false, 'CAST(c_decimal_3_0_null as DECIMAL(10, 5))
= CAST(1.00 as DECIMAL(10, 5))', '(c_decimal_3_0_null = 1)'
+ testSimplify false, false, 'CAST(c_decimal_3_0_null as DECIMAL(10, 5))
= CAST(1.1 as DECIMAL(10, 5))', 'AND[c_decimal_3_0_null IS NULL,NULL]'
+ testSimplify false, false, 'CAST(c_decimal_3_0_null as DECIMAL(10, 5))
> CAST(1.1 as DECIMAL(10, 5))', '(c_decimal_3_0_null > 1)'
+ testSimplify false, false, 'CAST(c_decimal_3_0_null as DECIMAL(10, 5))
>= CAST(1.1 as DECIMAL(10, 5))', '(c_decimal_3_0_null >= 2)'
+ testSimplify false, false, 'CAST(c_decimal_3_0_null as DECIMAL(10, 5))
< CAST(1.1 as DECIMAL(10, 5))', '(c_decimal_3_0_null < 2)'
+ testSimplify false, false, 'CAST(c_decimal_3_0_null as DECIMAL(10, 5))
<= CAST(1.1 as DECIMAL(10, 5))', '(c_decimal_3_0_null <= 1)'
+ testSimplify false, false, 'c_decimal_5_2_null = CAST(1.0 as
DECIMAL(10, 5))', '(c_decimal_5_2_null = 1.00)'
+ testSimplify false, false, 'c_decimal_5_2_null = CAST(1.1 as
DECIMAL(10, 5))', '(c_decimal_5_2_null = 1.10)'
+ testSimplify false, false, 'c_decimal_5_2_null = CAST(1.12 as
DECIMAL(10, 5))', '(c_decimal_5_2_null = 1.12)'
+ testSimplify false, false, 'c_decimal_5_2_null = CAST(1.123 as
DECIMAL(10, 5))', 'AND[c_decimal_5_2_null IS NULL,NULL]'
+ testSimplify false, false, 'c_decimal_5_2 = CAST(1.123 as DECIMAL(10,
5))', 'FALSE'
+ testSimplify false, false, 'c_decimal_5_2_null > CAST(1.123 as
DECIMAL(10, 5))', 'c_decimal_5_2_null > 1.12'
+ testSimplify false, false, 'c_decimal_5_2_null >= CAST(1.123 as
DECIMAL(10, 5))', 'c_decimal_5_2_null >= 1.13'
+ testSimplify false, false, 'c_decimal_5_2_null <= CAST(1.123 as
DECIMAL(10, 5))', 'c_decimal_5_2_null <= 1.12'
+ testSimplify false, false, 'c_decimal_5_2_null < CAST(1.123 as
DECIMAL(10, 5))', 'c_decimal_5_2_null < 1.13'
+ testSimplify false, false, "CAST(c_datetime_0 AS DATETIME(5)) =
'2000-01-01'", "(c_datetime_0 = '2000-01-01 00:00:00')"
+ testSimplify false, false, "CAST(c_datetime_0 AS DATETIME(5)) =
'2000-01-01 00:00:00.1'", 'FALSE'
+ testSimplify false, false, "CAST(c_datetime_0_null AS DATETIME(5)) =
'2000-01-01 00:00:00.1'", 'AND[c_datetime_0_null IS NULL,NULL]'
+ testSimplify false, false, "CAST(c_datetime_0_null AS DATETIME(5)) <=>
'2000-01-01 00:00:00.1'", 'FALSE'
+ testSimplify false, false, "CAST(c_datetime_0 AS DATETIME(5)) >=
'2000-01-01 00:00:00.1'", "(c_datetime_0 >= '2000-01-01 00:00:01')"
+ testSimplify false, false, "CAST(c_datetime_0 AS DATETIME(5)) >
'2000-01-01 00:00:00.1'", "(c_datetime_0 > '2000-01-01 00:00:00')"
+ testSimplify false, false, "CAST(c_datetime_0 AS DATETIME(5)) <=
'2000-01-01 00:00:00.1'", "(c_datetime_0 <= '2000-01-01 00:00:00')"
+ testSimplify false, false, "CAST(c_datetime_0 AS DATETIME(5)) <
'2000-01-01 00:00:00.1'", "(c_datetime_0 < '2000-01-01 00:00:01')"
+ testSimplify false, false, "CAST(c_datetime_3 AS DATETIME(5)) =
'2000-01-01'", "(c_datetime_3 = '2000-01-01 00:00:00.000')"
+ testSimplify false, false, "CAST(c_datetime_3 AS DATETIME(5)) =
'2000-01-01 00:00:00.1234'", 'FALSE'
+ testSimplify false, false, "CAST(c_datetime_3_null AS DATETIME(5)) =
'2000-01-01 00:00:00.1234'", 'AND[c_datetime_3_null IS NULL,NULL]'
+ testSimplify false, false, "CAST(c_datetime_3_null AS DATETIME(5)) <=>
'2000-01-01 00:00:00.1234'", 'FALSE'
+ testSimplify false, false, "CAST(c_datetime_3 AS DATETIME(5)) >=
'2000-01-01 00:00:00.1234'", "(c_datetime_3 >= '2000-01-01 00:00:00.124')"
+ testSimplify false, false, "CAST(c_datetime_3 AS DATETIME(5)) >
'2000-01-01 00:00:00.1234'", "(c_datetime_3 > '2000-01-01 00:00:00.123')"
+ testSimplify false, false, "CAST(c_datetime_3 AS DATETIME(5)) <=
'2000-01-01 00:00:00.1234'", "(c_datetime_3 <= '2000-01-01 00:00:00.123')"
+ testSimplify false, false, "CAST(c_datetime_3 AS DATETIME(5)) <
'2000-01-01 00:00:00.1234'", "(c_datetime_3 < '2000-01-01 00:00:00.124')"
+ testSimplify false, false, "c_date = '2000-01-01 00:00:01'", 'FALSE'
+ testSimplify false, false, "CAST(c_date_null AS DATETIME(5)) =
'2000-01-01 00:00:01'", 'AND[c_date_null IS NULL,NULL]'
+ testSimplify false, false, "CAST(c_date_null AS DATETIME(5)) <=>
'2000-01-01 00:00:01'", 'FALSE'
+ testSimplify false, false, "CAST(c_date AS DATETIME(5)) > '2000-01-01
00:00:01'", "c_date > '2000-01-01'"
+ testSimplify false, false, "CAST(c_date AS DATETIME(5)) >= '2000-01-01
00:00:01'", "c_date >= '2000-01-02'"
+ testSimplify false, false, "CAST(c_date AS DATETIME(5)) <= '2000-01-01
00:00:01'", "c_date <= '2000-01-01'"
+ testSimplify false, false, "CAST(c_date AS DATETIME(5)) < '2000-01-01
00:00:01'", "c_date < '2000-01-02'"
+
+ sql "DROP TABLE IF EXISTS ${tbl} FORCE"
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]