Exactly. I understand the problem is not CHAR(1) vs CHAR(7), but the record
type. That is the point I was trying to make.
--
Michael Mior
mm...@apache.org


Le jeu. 10 févr. 2022 à 07:47, Dmitry Sysolyatin <dm.sysolya...@gmail.com>
a écrit :

> Michael, the problem is not because CHAR(1) and CHAR(7). Calcite can derive
> common type in this case = CHAR(7) and all will work ok.
>
> The problem is that one type is [<scalar> ARRAY] and another [<RecordType>
> ARRAY]. I see two options for resolving this problem:
>
> 1. Allow casting scalar type to RecordType with one field. I described it
> inside https://issues.apache.org/jira/browse/CALCITE-4999
> 2. Modify `ARRAY` function in the way that it will return ARRAY of scalar
> if subquery is used as argument. Like Postgres does -
>
> https://www.postgresql.org/docs/14/sql-expressions.html#SQL-SYNTAX-ARRAY-CONSTRUCTORS
>
> On Thu, Feb 10, 2022 at 2:02 PM Michael Mior <mm...@apache.org> wrote:
>
> > The two types in your example are incompatible. One is an array of
> CHAR(1).
> > The other is an array of records, each with a single CHAR(7) field.
> > --
> > Michael Mior
> > mm...@apache.org
> >
> >
> > Le ven. 4 févr. 2022 à 11:27, Dmitry Sysolyatin <dm.sysolya...@gmail.com
> >
> > a
> > écrit :
> >
> > > So, the previous case started to work. But I faced with another issue.
> > This
> > > query does not work:
> > >
> > > ```
> > > "SELECT ARRAY_CONCAT(ARRAY['1', '2'], array(select 'toast.' || x from
> > > unnest(ARRAY['1','2']) x))"
> > > ```
> > >
> > > ```
> > > java.lang.IllegalArgumentException: Cannot infer return type for
> > > ARRAY_CONCAT; operand types: [CHAR(1) ARRAY, RecordType(CHAR(7) EXPR$0)
> > > ARRAY]
> > > ```
> > >
> > > I created an issue -
> https://issues.apache.org/jira/browse/CALCITE-4999
> > > and
> > > PR - https://github.com/apache/calcite/pull/2712
> > >
> > >
> > > On Fri, Feb 4, 2022 at 2:51 PM Dmitry Sysolyatin <
> > dm.sysolya...@gmail.com>
> > > wrote:
> > >
> > > > Actually,
> > > >
> > `SqlParser.Config.DEFAULT.withConformance(SqlConformanceEnum.BIG_QUERY)`
> > > > helped, thanks !
> > > > I will try to understand why it doesn't work with BABEL conformance
> > > >
> > > > On Fri, Feb 4, 2022 at 2:35 PM Dmitry Sysolyatin <
> > > dm.sysolya...@gmail.com>
> > > > wrote:
> > > >
> > > >> How SqlParser config can help? If I understood correctly, parser
> > config
> > > >> affects only parser.parse stage. But code fails at the validation
> > phase
> > > >>
> > > >> Also, I would like to use ARRAY_CONCAT function with postgres
> dialect.
> > > My
> > > >> parser config at the moment:
> > > >>
> > > >> ```
> > > >> val parserConfig: SqlParser.Config =
> > > >> PostgresqlSqlDialect.DEFAULT
> > > >> .configureParser(SqlParser
> > > >> .config()
> > > >> // It is needed in order to parse PG "!~" operator
> > > >> .withParserFactory(SqlBabelParserImpl.FACTORY)
> > > >> )
> > > >> .withConformance(SqlConformanceEnum.BABEL)
> > > >> ```
> > > >>
> > > >> On Fri, Feb 4, 2022 at 2:26 PM Thomas Rebele
> > <treb...@tibco.com.invalid
> > > >
> > > >> wrote:
> > > >>
> > > >>> Hello,
> > > >>>
> > > >>> SqlParserTest might help you. It has some checks related to
> > BIG_QUERY.
> > > >>> Maybe a
> > > >>>
> > > >>>
> > >
> >
> .parserConfig(SqlParser.Config.DEFAULT.withConformance(SqlConformanceEnum.BIG_QUERY))
> > > >>> could fix the problem.
> > > >>>
> > > >>> Cordialement / Best Regards,
> > > >>> *Thomas Rebele, PhD* | R&D Developer | Germany | www.tibco.com
> > > >>>
> > > >>>
> > > >>> On Fri, Feb 4, 2022 at 12:57 PM Dmitry Sysolyatin <
> > > >>> dm.sysolya...@gmail.com>
> > > >>> wrote:
> > > >>>
> > > >>> > Hi!
> > > >>> > I have a problem with ARRAY_CONCAT operator.
> > > >>> >
> > > >>> > The following code failed with the exception ''No match found for
> > > >>> function
> > > >>> > signature array_concat(<INTEGER ARRAY>, <INTEGER ARRAY>)".
> > > >>> > ```
> > > >>> > val config = Frameworks.newConfigBuilder()
> > > >>> >      .parserConfig(parserConfig)
> > > >>> >      .defaultSchema(CalciteSchema.createRootSchema(false,
> > > >>> false).plus())
> > > >>> >       .operatorTable(SqlOperatorTables.chain(
> > > >>> >               SqlStdOperatorTable.instance(),
> > > >>> >
> > >  SqlLibraryOperatorTableFactory.INSTANCE.getOperatorTable(
> > > >>> >                     SqlLibrary.BIG_QUERY
> > > >>> >        )))
> > > >>> > .programs(Programs.standard())
> > > >>> > .build()
> > > >>> > val planner = Frameworks.getPlanner(config)
> > > >>> >
> > > >>> > val query = "SELECT ARRAY_CONCAT(ARRAY[1, 2], ARRAY[2, 3])"
> > > >>> > val parsedSqlNode = planner.parse(query)
> > > >>> > planner.validate(parsedSqlNode)
> > > >>> > ```
> > > >>> >
> > > >>> > Am I doing something wrong or it is a bug?
> > > >>> >
> > > >>>
> > > >>
> > >
> >
>

Reply via email to