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

Mihai Budiu commented on CALCITE-6518:
--------------------------------------

The function SqlUtil.lookupSubjectRoutines will return the sole routine if 
there is only one with the proper name, but if there are multiple routines, it 
may actually reject them all using subsequent filters.

> ClassCastException during validation when loading multiple libraries
> --------------------------------------------------------------------
>
>                 Key: CALCITE-6518
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6518
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.37.0
>            Reporter: Mihai Budiu
>            Priority: Minor
>
> The following test added to CalciteSqlOperatorTest will cause a 
> ClassCastException:
> {code:java}
>   @Test void testLibraries() {
>     SqlOperatorFixture sqlOperatorFixture = fixture();
>     final SqlOperatorFixture f = sqlOperatorFixture.withOperatorTable(
>             SqlLibraryOperatorTableFactory.INSTANCE
>                 .getOperatorTable(
>                     SqlLibrary.STANDARD,
>                     SqlLibrary.MYSQL,
>                     SqlLibrary.POSTGRESQL
>                 ));
>     f.checkScalar("substr('a', 1, 2)", "a", "VARCHAR(1) NOT NULL");
>   }
> {code}
> Here is the top of the stack trace:
> {code}
> class org.apache.calcite.sql.type.FamilyOperandTypeChecker cannot be cast to 
> class org.apache.calcite.sql.type.SqlOperandMetadata 
> (org.apache.calcite.sql.type.FamilyOperandTypeChecker and 
> org.apache.calcite.sql.type.SqlOperandMetadata are in unnamed module of 
> loader 'app')
> java.lang.ClassCastException: class 
> org.apache.calcite.sql.type.FamilyOperandTypeChecker cannot be cast to class 
> org.apache.calcite.sql.type.SqlOperandMetadata 
> (org.apache.calcite.sql.type.FamilyOperandTypeChecker and 
> org.apache.calcite.sql.type.SqlOperandMetadata are in unnamed module of 
> loader 'app')
>       at 
> org.apache.calcite.sql.validate.implicit.TypeCoercionImpl.userDefinedFunctionCoercion(TypeCoercionImpl.java:601)
>       at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:313)
>       at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:231)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:6789)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:6776)
>       at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:167)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:2006)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:1993)
>       at org.apache.calcite.sql.SqlNode.validateExpr(SqlNode.java:276)
>       at org.apache.calcite.sql.SqlOperator.validateCall(SqlOperator.java:474)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateCall(SqlValidatorImpl.java:6446)
>       at org.apache.calcite.sql.SqlCall.validate(SqlCall.java:144)
>       at org.apache.calcite.sql.SqlNode.validateExpr(SqlNode.java:275)
>       at org.apache.calcite.sql.SqlOperator.validateCall(SqlOperator.java:474)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateCall(SqlValidatorImpl.java:6446)
>       at org.apache.calcite.sql.SqlCall.validate(SqlCall.java:144)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1143)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:849)
>       at 
> org.apache.calcite.sql.test.AbstractSqlTester.parseAndValidate(AbstractSqlTester.java:162)
>       at 
> org.apache.calcite.sql.test.AbstractSqlTester.validateAndThen(AbstractSqlTester.java:250)
> {code}
> Calcite behaves correctly if either the MYSQL or the POSTGRES libraries are 
> not supplied.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to