You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Stamatis Zampetakis (Jira)" <ji...@apache.org> on 2020/02/27 17:53:00 UTC

[jira] [Commented] (CALCITE-3835) Overloaded table functions fail with an assertion error if param types differ

    [ https://issues.apache.org/jira/browse/CALCITE-3835?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17046847#comment-17046847 ] 

Stamatis Zampetakis commented on CALCITE-3835:
----------------------------------------------

Is it related at all with CALCITE-3485?

> Overloaded table functions fail with an assertion error if param types differ
> -----------------------------------------------------------------------------
>
>                 Key: CALCITE-3835
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3835
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Vova Vysotskyi
>            Assignee: Vova Vysotskyi
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.23.0
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> For the case of using named parameters in table functions, when several table functions with the same name, but with different argument types, query with such function fails with an assertion error.
> For example, the following table functions:
> {{View(String R, String S, Integer T)}} and {{View(String R, String S, Integer T, String S2)}}
> will fail with assertion error for the following query:
> {code:sql}
> select * from table("adhoc"."View"(t=>5, s=>'6'))
> {code}
> with error:
> {noformat}
> VARCHAR
> java.lang.AssertionError: VARCHAR
> 	at org.apache.calcite.sql.type.SqlTypeExplicitPrecedenceList.compareTypePrecedence(SqlTypeExplicitPrecedenceList.java:139)
> 	at org.apache.calcite.sql.SqlUtil.bestMatch(SqlUtil.java:691)
> 	at org.apache.calcite.sql.SqlUtil.filterRoutinesByTypePrecedence(SqlUtil.java:660)
> 	at org.apache.calcite.sql.SqlUtil.lookupSubjectRoutines(SqlUtil.java:519)
> 	at org.apache.calcite.sql.SqlUtil.lookupRoutine(SqlUtil.java:439)
> 	at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:240)
> 	at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:218)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:5854)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:5841)
> 	at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:139)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:1800)
> 	at org.apache.calcite.sql.validate.ProcedureNamespace.validateImpl(ProcedureNamespace.java:53)
> 	at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1110)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1084)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3256)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3238)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3510)
> 	at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60)
> 	at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1110)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1084)
> 	at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:232)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1059)
> 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:766)
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:565)
> 	at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:241)
> 	at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:207)
> 	at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:634)
> 	at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:498)
> 	at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:468)
> 	at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:231)
> 	at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550)
> 	at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
> 	at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
> 	at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:227)
> 	at org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:533)
> 	at org.apache.calcite.test.CalciteAssert$AssertQuery.lambda$returns$1(CalciteAssert.java:1519)
> 	at org.apache.calcite.test.CalciteAssert$AssertQuery.withConnection(CalciteAssert.java:1451)
> 	at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1517)
> 	at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1500)
> 	at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1463)
> 	at org.apache.calcite.test.JdbcTest.testTableMacroWithNamedParameters(JdbcTest.java:546)
> {noformat}
> The issue here is that {{SqlUtil.filterRoutinesByTypePrecedence()}} assumes that all functions will have the same type at the same position, but table functions allow omitting arguments or flipping them.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)