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

mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new 18e66e8019 [CALCITE-4806] Lossy CAST is incorrectly simplified
18e66e8019 is described below

commit 18e66e801979242b163b492b66ff4b76c3bdc1ea
Author: Xiong Duan <[email protected]>
AuthorDate: Wed Aug 21 14:57:03 2024 +0800

    [CALCITE-4806] Lossy CAST is incorrectly simplified
---
 core/src/test/resources/sql/misc.iq | 98 +++++++++++++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)

diff --git a/core/src/test/resources/sql/misc.iq 
b/core/src/test/resources/sql/misc.iq
index fdc8802bab..7d1288b8e3 100644
--- a/core/src/test/resources/sql/misc.iq
+++ b/core/src/test/resources/sql/misc.iq
@@ -3084,4 +3084,102 @@ from (values 0) as t(x);
 
 !ok
 
+# [CALCITE-4806] Lossy CAST is incorrectly simplified
+
+!use scott-rounding-half-up
+
+# rounding mode is HALF-UP
+select cast(5.5 as int) = 5 as value1,
+       cast(5.5 as int) = 6 as value2,
+       cast(3.5 as int) = 3 as value3,
+       cast(3.5 as int) = 4 as value4,
+       cast(1.6 as int) = 1 as value5,
+       cast(1.6 as int) = 2 as value6,
+       cast(1.1 as int) = 1 as value7,
+       cast(1.1 as int) = 2 as value8,
+       cast(1.0 as int) = 1 as value9,
+       cast(1.0 as int) = 2 as value10
+from (values 0) as t(x);
++--------+--------+--------+--------+--------+--------+--------+--------+--------+---------+
+| VALUE1 | VALUE2 | VALUE3 | VALUE4 | VALUE5 | VALUE6 | VALUE7 | VALUE8 | 
VALUE9 | VALUE10 |
++--------+--------+--------+--------+--------+--------+--------+--------+--------+---------+
+| false  | true   | false  | true   | false  | true   | true   | false  | true 
  | false   |
++--------+--------+--------+--------+--------+--------+--------+--------+--------+---------+
+(1 row)
+
+!ok
+
+EnumerableValues(tuples=[[{ false, true, false, true, false, true, true, 
false, true, false }]])
+!plan
+
+# same as before, but is negative number
+select cast(-1.0 as int) = -1 as value1,
+       cast(-1.0 as int) = -2 as value2,
+       cast(-1.1 as int) = -1 as value3,
+       cast(-1.1 as int) = -2 as value4,
+       cast(-1.6 as int) = -1 as value5,
+       cast(-1.6 as int) = -2 as value6,
+       cast(-2.5 as int) = -2 as value7,
+       cast(-2.5 as int) = -3 as value8
+from (values 0) as t(x);
++--------+--------+--------+--------+--------+--------+--------+--------+
+| VALUE1 | VALUE2 | VALUE3 | VALUE4 | VALUE5 | VALUE6 | VALUE7 | VALUE8 |
++--------+--------+--------+--------+--------+--------+--------+--------+
+| true   | false  | true   | false  | false  | true   | false  | true   |
++--------+--------+--------+--------+--------+--------+--------+--------+
+(1 row)
+
+!ok
+
+EnumerableValues(tuples=[[{ true, false, true, false, false, true, false, true 
}]])
+!plan
+
+!use scott
+
+# rounding mode is DOWN
+select cast(5.5 as int) = 5 as value1,
+       cast(5.5 as int) = 6 as value2,
+       cast(3.5 as int) = 3 as value3,
+       cast(3.5 as int) = 4 as value4,
+       cast(1.6 as int) = 1 as value5,
+       cast(1.6 as int) = 2 as value6,
+       cast(1.1 as int) = 1 as value7,
+       cast(1.1 as int) = 2 as value8,
+       cast(1.0 as int) = 1 as value9,
+       cast(1.0 as int) = 2 as value10
+from (values 0) as t(x);
++--------+--------+--------+--------+--------+--------+--------+--------+--------+---------+
+| VALUE1 | VALUE2 | VALUE3 | VALUE4 | VALUE5 | VALUE6 | VALUE7 | VALUE8 | 
VALUE9 | VALUE10 |
++--------+--------+--------+--------+--------+--------+--------+--------+--------+---------+
+| true   | false  | true   | false  | true   | false  | true   | false  | true 
  | false   |
++--------+--------+--------+--------+--------+--------+--------+--------+--------+---------+
+(1 row)
+
+!ok
+
+EnumerableValues(tuples=[[{ true, false, true, false, true, false, true, 
false, true, false }]])
+!plan
+
+# same as before, but is negative number
+select cast(-1.0 as int) = -1 as value1,
+       cast(-1.0 as int) = -2 as value2,
+       cast(-1.1 as int) = -1 as value3,
+       cast(-1.1 as int) = -2 as value4,
+       cast(-1.6 as int) = -1 as value5,
+       cast(-1.6 as int) = -2 as value6,
+       cast(-2.5 as int) = -2 as value7,
+       cast(-2.5 as int) = -3 as value8
+from (values 0) as t(x);
++--------+--------+--------+--------+--------+--------+--------+--------+
+| VALUE1 | VALUE2 | VALUE3 | VALUE4 | VALUE5 | VALUE6 | VALUE7 | VALUE8 |
++--------+--------+--------+--------+--------+--------+--------+--------+
+| true   | false  | true   | false  | true   | false  | true   | false  |
++--------+--------+--------+--------+--------+--------+--------+--------+
+(1 row)
+
+!ok
+
+EnumerableValues(tuples=[[{ true, false, true, false, true, false, true, false 
}]])
+!plan
+
 # End misc.iq

Reply via email to