Mihai Budiu created CALCITE-6518: ------------------------------------ Summary: 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
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)