NobiGo commented on code in PR #4413:
URL: https://github.com/apache/calcite/pull/4413#discussion_r2141296942
##########
core/src/test/resources/sql/cast.iq:
##########
@@ -1794,4 +1794,128 @@ EnumerableCalc(expr#0=[{inputs}],
expr#1=[1.11:DECIMAL(3, 2)], expr#2=[2.22:DECI
EnumerableValues(tuples=[[{ 0 }]])
!plan
+# [CALCITE-7054] Runtime conversion of DECIMAL MULTISET to INT MULTISET or
DECIMAL ARRAY to INT MULTISET fails with a ClassCastException
+# Cast DECIMAL MULTISET to INTEGER MULTISET
+SELECT CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL ARRAY to INT MULTISET
Review Comment:
`INTEGER MULTISET`. Be consistent with the actual sql and befor comment.
##########
core/src/test/resources/sql/cast.iq:
##########
@@ -1794,4 +1794,128 @@ EnumerableCalc(expr#0=[{inputs}],
expr#1=[1.11:DECIMAL(3, 2)], expr#2=[2.22:DECI
EnumerableValues(tuples=[[{ 0 }]])
!plan
+# [CALCITE-7054] Runtime conversion of DECIMAL MULTISET to INT MULTISET or
DECIMAL ARRAY to INT MULTISET fails with a ClassCastException
+# Cast DECIMAL MULTISET to INTEGER MULTISET
+SELECT CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL ARRAY to INT MULTISET
+SELECT CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL MULTISET to INT ARRAY
+SELECT CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER ARRAY);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL ARRAY to SMALLINT MULTISET, and then convert SMALLINT MULTISET
to INTEGER MULTISET
+SELECT CAST(CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS
DECIMAL(2, 1))] AS SMALLINT MULTISET) as INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[1.1:DECIMAL(2, 1)],
expr#2=[3.1:DECIMAL(2, 1)], expr#3=[ARRAY($t1, $t2)],
expr#4=[CAST($t3):SMALLINT NOT NULL MULTISET NOT NULL],
expr#5=[CAST($t4):INTEGER NOT NULL MULTISET NOT NULL], EXPR$0=[$t5])
+ EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
+# Cast DECIMAL MULTISET to INTEGER MULTISET, and then convert INTEGER MULTISET
to DOUBLE MULTISET
+SELECT CAST(CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS
DECIMAL(2, 1))] AS INTEGER MULTISET) as DOUBLE MULTISET);
++------------+
+| EXPR$0 |
++------------+
+| [1.0, 3.0] |
++------------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[$SLICE($t0)],
expr#2=[CAST($t1):INTEGER NOT NULL MULTISET NOT NULL], expr#3=[CAST($t2):DOUBLE
NOT NULL MULTISET NOT NULL], EXPR$0=[$t3])
+ EnumerableCollect(field=[EXPR$0])
+ EnumerableValues(tuples=[[{ 1.1 }, { 3.1 }]])
+!plan
+
+# Cast DECIMAL ARRAY to INTEGER MULTISET, and then convert INTEGER ARRAY to
DOUBLE MULTISET
+SELECT CAST(CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS
DECIMAL(2, 1))] AS INTEGER MULTISET) as DOUBLE MULTISET);
++------------+
+| EXPR$0 |
++------------+
+| [1.0, 3.0] |
++------------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[1.1:DECIMAL(2, 1)],
expr#2=[3.1:DECIMAL(2, 1)], expr#3=[ARRAY($t1, $t2)], expr#4=[CAST($t3):INTEGER
NOT NULL MULTISET NOT NULL], expr#5=[CAST($t4):DOUBLE NOT NULL MULTISET NOT
NULL], EXPR$0=[$t5])
+ EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
+# Cast SMALLINT ARRAY ARRAY to INTEGER MULTISET MULTISET
+SELECT CAST(ARRAY[ARRAY[1, 2], ARRAY[3, 4]] AS INTEGER MULTISET MULTISET);
++------------------+
+| EXPR$0 |
++------------------+
+| [[1, 2], [3, 4]] |
++------------------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[1], expr#2=[2], expr#3=[ARRAY($t1,
$t2)], expr#4=[3], expr#5=[4], expr#6=[ARRAY($t4, $t5)], expr#7=[ARRAY($t3,
$t6)], expr#8=[CAST($t7):INTEGER NOT NULL MULTISET NOT NULL MULTISET NOT NULL],
EXPR$0=[$t8])
+ EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
+# Cast DECIMAL ARRAY ARRAY to INTEGER ARRAY MULTISET
+SELECT CAST(CAST(ARRAY[ARRAY[1.11, 2.22], ARRAY[3.33, 4.44]] AS DECIMAL ARRAY
MULTISET) as INTEGER ARRAY MULTISET);
++------------------+
+| EXPR$0 |
++------------------+
+| [[1, 2], [3, 4]] |
++------------------+
+(1 row)
+
+!ok
+EnumerableCalc(expr#0=[{inputs}], expr#1=[1.11:DECIMAL(3, 2)],
expr#2=[2.22:DECIMAL(3, 2)], expr#3=[ARRAY($t1, $t2)], expr#4=[3.33:DECIMAL(3,
2)], expr#5=[4.44:DECIMAL(3, 2)], expr#6=[ARRAY($t4, $t5)], expr#7=[ARRAY($t3,
$t6)], expr#8=[CAST($t7):DECIMAL(19, 0) NOT NULL ARRAY NOT NULL MULTISET NOT
NULL], expr#9=[CAST($t8):INTEGER NOT NULL ARRAY NOT NULL MULTISET NOT NULL],
EXPR$0=[$t9])
+ EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
+# Cast DECIMAL ARRAY ARRAY to INTEGER MULTISET MULTISET, and then convert
INTEGER ARRAY ARRAY to DECIMAL MULTISET MULTISET
Review Comment:
`INTEGER MULTISET MULTISET` not `INTEGER ARRAY ARRAY`
##########
core/src/test/resources/sql/cast.iq:
##########
@@ -1794,4 +1794,128 @@ EnumerableCalc(expr#0=[{inputs}],
expr#1=[1.11:DECIMAL(3, 2)], expr#2=[2.22:DECI
EnumerableValues(tuples=[[{ 0 }]])
!plan
+# [CALCITE-7054] Runtime conversion of DECIMAL MULTISET to INT MULTISET or
DECIMAL ARRAY to INT MULTISET fails with a ClassCastException
+# Cast DECIMAL MULTISET to INTEGER MULTISET
+SELECT CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL ARRAY to INT MULTISET
+SELECT CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL MULTISET to INT ARRAY
+SELECT CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER ARRAY);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL ARRAY to SMALLINT MULTISET, and then convert SMALLINT MULTISET
to INTEGER MULTISET
+SELECT CAST(CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS
DECIMAL(2, 1))] AS SMALLINT MULTISET) as INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[1.1:DECIMAL(2, 1)],
expr#2=[3.1:DECIMAL(2, 1)], expr#3=[ARRAY($t1, $t2)],
expr#4=[CAST($t3):SMALLINT NOT NULL MULTISET NOT NULL],
expr#5=[CAST($t4):INTEGER NOT NULL MULTISET NOT NULL], EXPR$0=[$t5])
+ EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
+# Cast DECIMAL MULTISET to INTEGER MULTISET, and then convert INTEGER MULTISET
to DOUBLE MULTISET
+SELECT CAST(CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS
DECIMAL(2, 1))] AS INTEGER MULTISET) as DOUBLE MULTISET);
++------------+
+| EXPR$0 |
++------------+
+| [1.0, 3.0] |
++------------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[$SLICE($t0)],
expr#2=[CAST($t1):INTEGER NOT NULL MULTISET NOT NULL], expr#3=[CAST($t2):DOUBLE
NOT NULL MULTISET NOT NULL], EXPR$0=[$t3])
+ EnumerableCollect(field=[EXPR$0])
+ EnumerableValues(tuples=[[{ 1.1 }, { 3.1 }]])
+!plan
+
+# Cast DECIMAL ARRAY to INTEGER MULTISET, and then convert INTEGER ARRAY to
DOUBLE MULTISET
Review Comment:
INTEGER MULTISET
##########
core/src/test/resources/sql/cast.iq:
##########
@@ -1794,4 +1794,128 @@ EnumerableCalc(expr#0=[{inputs}],
expr#1=[1.11:DECIMAL(3, 2)], expr#2=[2.22:DECI
EnumerableValues(tuples=[[{ 0 }]])
!plan
+# [CALCITE-7054] Runtime conversion of DECIMAL MULTISET to INT MULTISET or
DECIMAL ARRAY to INT MULTISET fails with a ClassCastException
+# Cast DECIMAL MULTISET to INTEGER MULTISET
+SELECT CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL ARRAY to INT MULTISET
+SELECT CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL MULTISET to INT ARRAY
+SELECT CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER ARRAY);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL ARRAY to SMALLINT MULTISET, and then convert SMALLINT MULTISET
to INTEGER MULTISET
+SELECT CAST(CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS
DECIMAL(2, 1))] AS SMALLINT MULTISET) as INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[1.1:DECIMAL(2, 1)],
expr#2=[3.1:DECIMAL(2, 1)], expr#3=[ARRAY($t1, $t2)],
expr#4=[CAST($t3):SMALLINT NOT NULL MULTISET NOT NULL],
expr#5=[CAST($t4):INTEGER NOT NULL MULTISET NOT NULL], EXPR$0=[$t5])
+ EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
+# Cast DECIMAL MULTISET to INTEGER MULTISET, and then convert INTEGER MULTISET
to DOUBLE MULTISET
+SELECT CAST(CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS
DECIMAL(2, 1))] AS INTEGER MULTISET) as DOUBLE MULTISET);
++------------+
+| EXPR$0 |
++------------+
+| [1.0, 3.0] |
++------------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[$SLICE($t0)],
expr#2=[CAST($t1):INTEGER NOT NULL MULTISET NOT NULL], expr#3=[CAST($t2):DOUBLE
NOT NULL MULTISET NOT NULL], EXPR$0=[$t3])
+ EnumerableCollect(field=[EXPR$0])
+ EnumerableValues(tuples=[[{ 1.1 }, { 3.1 }]])
+!plan
+
+# Cast DECIMAL ARRAY to INTEGER MULTISET, and then convert INTEGER ARRAY to
DOUBLE MULTISET
+SELECT CAST(CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS
DECIMAL(2, 1))] AS INTEGER MULTISET) as DOUBLE MULTISET);
++------------+
+| EXPR$0 |
++------------+
+| [1.0, 3.0] |
++------------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[1.1:DECIMAL(2, 1)],
expr#2=[3.1:DECIMAL(2, 1)], expr#3=[ARRAY($t1, $t2)], expr#4=[CAST($t3):INTEGER
NOT NULL MULTISET NOT NULL], expr#5=[CAST($t4):DOUBLE NOT NULL MULTISET NOT
NULL], EXPR$0=[$t5])
+ EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
+# Cast SMALLINT ARRAY ARRAY to INTEGER MULTISET MULTISET
+SELECT CAST(ARRAY[ARRAY[1, 2], ARRAY[3, 4]] AS INTEGER MULTISET MULTISET);
++------------------+
+| EXPR$0 |
++------------------+
+| [[1, 2], [3, 4]] |
++------------------+
+(1 row)
+
+!ok
+
+EnumerableCalc(expr#0=[{inputs}], expr#1=[1], expr#2=[2], expr#3=[ARRAY($t1,
$t2)], expr#4=[3], expr#5=[4], expr#6=[ARRAY($t4, $t5)], expr#7=[ARRAY($t3,
$t6)], expr#8=[CAST($t7):INTEGER NOT NULL MULTISET NOT NULL MULTISET NOT NULL],
EXPR$0=[$t8])
+ EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
+# Cast DECIMAL ARRAY ARRAY to INTEGER ARRAY MULTISET
Review Comment:
DECIMAL ARRAY MULTISET
##########
core/src/test/resources/sql/cast.iq:
##########
@@ -1794,4 +1794,128 @@ EnumerableCalc(expr#0=[{inputs}],
expr#1=[1.11:DECIMAL(3, 2)], expr#2=[2.22:DECI
EnumerableValues(tuples=[[{ 0 }]])
!plan
+# [CALCITE-7054] Runtime conversion of DECIMAL MULTISET to INT MULTISET or
DECIMAL ARRAY to INT MULTISET fails with a ClassCastException
+# Cast DECIMAL MULTISET to INTEGER MULTISET
+SELECT CAST(MULTISET[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL ARRAY to INT MULTISET
+SELECT CAST(ARRAY[CAST(1.1111 AS DECIMAL(2, 1)), CAST(3.06754 AS DECIMAL(2,
1))] AS INTEGER MULTISET);
++--------+
+| EXPR$0 |
++--------+
+| [1, 3] |
++--------+
+(1 row)
+
+!ok
+
+# Cast DECIMAL MULTISET to INT ARRAY
Review Comment:
INTEGER
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]