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 2019/11/08 15:44:00 UTC
[jira] [Commented] (CALCITE-3485) Validation error in UDF with
overloads and dynamic parameter
[ https://issues.apache.org/jira/browse/CALCITE-3485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16970334#comment-16970334 ]
Stamatis Zampetakis commented on CALCITE-3485:
----------------------------------------------
As it is shown in the stack trace the error comes up when we attempt to infer the types of the operands. Given that there are multiple overloads for the user defined function the operator remains an {{SqlUnresolvedFunction}} which at the moment does not have any strategy for inferring the types of its operands thus it fails normally since it cannot determine the type for a dynamic parameter.
I was thinking that at this point we shouldn't be strict with the operand inference (i.e, use {{InferTypes.ANY_NULLABLE}} or something along these lines). If there is a problem it will fail later when we resolve the real function.
The same idea is also applied in [SqlUnresolvedFunction#inferReturnType(SqlOperatorBinding opBinding)|https://github.com/apache/calcite/blob/08c83afb16ba8dde3082735edf693d6914716ada/core/src/main/java/org/apache/calcite/sql/SqlUnresolvedFunction.java#L66].
> Validation error in UDF with overloads and dynamic parameter
> ------------------------------------------------------------
>
> Key: CALCITE-3485
> URL: https://issues.apache.org/jira/browse/CALCITE-3485
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.21.0
> Reporter: Stamatis Zampetakis
> Assignee: Stamatis Zampetakis
> Priority: Major
>
> The problem can be reproduced by defining multiple user defined functions with the same name and trying to validate a query having at least one operand that is a dynamic parameter.
> The interesting part of the stack trace is shown below:
> {noformat}
> com.onwbp.org.apache.calcite.runtime.CalciteContextException: At line 1, column 84: Illegal use of dynamic parameter
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
> at com.onwbp.org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463)
> at com.onwbp.org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:835)
> at com.onwbp.org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:820)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:4881)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.inferUnknownTypes(SqlValidatorImpl.java:1801)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.inferUnknownTypes(SqlValidatorImpl.java:1880)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.validateWhereOrOn(SqlValidatorImpl.java:4052)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.validateWhereClause(SqlValidatorImpl.java:4044)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3386)
> at com.onwbp.org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60)
> at com.onwbp.org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1009)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:969)
> at com.onwbp.org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:216)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:944)
> at com.onwbp.org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:651)
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)