Are you familiar with the work I did in https://issues.apache.org/jira/browse/CALCITE-5424 to defer the creation of literals? Previously when a literal is a type followed by a string, such as DATE ‘1969-07-21’, the string was parsed in the parser; now we defer parsing the string until validation time, when the desired type is known (having consulted the type system and in particular type aliases).
Your logic could hook into that, for collection types such as TIMESTAMP ARRAY. > On Mar 27, 2023, at 4:07 AM, Dmitry Sysolyatin <dm.sysolya...@gmail.com> > wrote: > > Hi! > Some time ago, I implemented an implicit cast from string literals to > arrays [1]. However, this implementation has limitations. For instance, the > following query will not work: > select a.v = ARRAY[1,2] FROM UNNEST(ARRAY['{1,2}', '{3,4}']) as a(v); > > Additionally, an implicit cast from arrays to strings has not been > implemented. > > I began working on these things [2][3] and faced the issue that I have no > idea how to properly implement parsing of typed arrays using JavaCC. Here > are some examples: > > SELECT TIMESTAMP ARRAY ''{"2000-07-20 20:17:40", "2001-07-20 20:17:40"}' > SELECT ARRAY[TIMESTAMP '2000-07-20 20:17:40', TIMESTAMP '2001-07-20 > 20:17:40'] || array '{"2000-07-20 20:17:40", "2001-07-20 20:17:40"}'; > > Does someone have an idea of the best way to implement this? > > Thanks! > > [1] https://issues.apache.org/jira/browse/CALCITE-5159 > [2] > https://github.com/dssysolyatin/calcite/tree/feature/implicit-cast-betweeb > [3] > https://github.com/dssysolyatin/calcite/commit/bb41df3fbb1671e190633ed95f1684ada54603c1