I have created jira task - https://issues.apache.org/jira/browse/CALCITE-5127 And also created a commit with test cases - https://github.com/apache/calcite/commit/27e68ded2c3bea7d7af73dd1dc156e46fb3591a8
On Mon, May 2, 2022 at 6:47 PM Julian Hyde <[email protected]> wrote: > Oops, I misspoke. Calcite hasn’t used the array-to-Values transformation > here. I’m not sure where the ARRAY literal has gone. Possibly it’s still > present, just not being printed in the plan. > > Julian > > > On May 2, 2022, at 8:41 AM, Julian Hyde <[email protected]> wrote: > > > > The plan isn’t “completely wrong”. Calcite intentionally converts > UNNEST of a constant ARRAY into Values because the latter is a primitive > relational expression. > > > > As for the casts, maybe some confusion about scalar types versus record > types with a single field. Can you please log a jira case. > > > > Julian > > > >> On May 2, 2022, at 8:09 AM, Dmitry Sysolyatin <[email protected]> > wrote: > >> > >> Hi! > >> I am working on https://issues.apache.org/jira/browse/CALCITE-5126. > When I > >> was writing tests for this task I faced with issue that reproducible in > >> main branch as well. > >> > >> I tried to execute the following query using unnest.iq file > >> > >> SELECT ARRAY(SELECT * FROM UNNEST(s.x) y) > >> FROM (SELECT ARRAY[1,2,3] as x) s; > >> > >> Calcite generated the following plan: > >> > >> EnumerableProject(EXPR$0=[$1]): rowcount = 1.0, cumulative cost = {14.0 > >> rows, 12.0 cpu, 0.0 io}, id = 98 > >> > >> EnumerableCorrelate(correlation=[$cor0], joinType=[inner], > >> requiredColumns=[{0}]): rowcount = 1.0, cumulative cost = {13.0 rows, > 11.0 > >> cpu, 0.0 io}, id = 97 > >> > >> EnumerableValues(tuples=[[{ 0 }]]): rowcount = 1.0, cumulative cost = > >> {1.0 rows, 1.0 cpu, 0.0 io}, id = 79 > >> > >> EnumerableCollect(field=[x]): rowcount = 1.0, cumulative cost = {5.0 > >> rows, 5.0 cpu, 0.0 io}, id = 96 > >> > >> EnumerableProject(EXPR$0=[+($0, 1)]): rowcount = 1.0, cumulative > cost > >> = {4.0 rows, 4.0 cpu, 0.0 io}, id = 95 > >> > >> EnumerableUncollect: rowcount = 1.0, cumulative cost = {3.0 rows, > >> 3.0 cpu, 0.0 io}, id = 94 > >> > >> EnumerableProject(X=[$cor0.X]): rowcount = 1.0, cumulative cost > = > >> {2.0 rows, 2.0 cpu, 0.0 io}, id = 93 > >> > >> EnumerableValues(tuples=[[{ 0 }]]): rowcount = 1.0, cumulative > >> cost = {1.0 rows, 1.0 cpu, 0.0 io}, id = 79 > >> > >> It is a completely wrong plan. It does not use ARRAY[1,2,3] at all and > code > >> fails with error: > >> Caused by: java.lang.ClassCastException: class java.lang.Integer cannot > be > >> cast to class java.util.List (java.lang.Integer and java.util.List are > in > >> module java.base of loader 'bootstrap') > >> > >> > >> Maybe someone knows how to fastly fix this? >
