[
https://issues.apache.org/jira/browse/CALCITE-6570?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pavel Pereslegin updated CALCITE-6570:
--------------------------------------
Affects Version/s: 1.37.0
> UPDATE with sub-query that requires type cast gives AssertionError
> ------------------------------------------------------------------
>
> Key: CALCITE-6570
> URL: https://issues.apache.org/jira/browse/CALCITE-6570
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.37.0
> Reporter: Pavel Pereslegin
> Assignee: Pavel Pereslegin
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.38.0
>
> Attachments: debug.png
>
>
> Reproducer (for SqlToRelConverterTest)
> {code:java}
> @Test void testUpdateSubQuery() {
> final String sql = "update emp\n"
> + "set empno = (\n"
> + " select cast(empno as BIGINT) from emp" +
> ")";
> sql(sql).ok();
> }
> {code}
> Produces the following assertion error
> {noformat}
> java.lang.AssertionError
> at
> org.apache.calcite.sql.validate.implicit.AbstractTypeCoercion.needToCast(AbstractTypeCoercion.java:307)
> at
> org.apache.calcite.sql.validate.implicit.AbstractTypeCoercion.needToCast(AbstractTypeCoercion.java:250)
> at
> org.apache.calcite.sql.validate.implicit.AbstractTypeCoercion.coerceColumnType(AbstractTypeCoercion.java:210)
> at
> org.apache.calcite.sql.validate.implicit.TypeCoercionImpl.coerceSourceRowType(TypeCoercionImpl.java:676)
> at
> org.apache.calcite.sql.validate.implicit.TypeCoercionImpl.querySourceCoercion(TypeCoercionImpl.java:646)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.checkTypeAssignment(SqlValidatorImpl.java:5313)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateUpdate(SqlValidatorImpl.java:5420)
> at org.apache.calcite.sql.SqlUpdate.validate(SqlUpdate.java:190)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1136)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:841)
> at
> org.apache.calcite.sql.test.AbstractSqlTester.convertSqlToRel2(AbstractSqlTester.java:543)
> at
> org.apache.calcite.sql.test.AbstractSqlTester.assertSqlConvertsTo(AbstractSqlTester.java:486)
> at
> org.apache.calcite.sql.test.AbstractSqlTester.assertConvertsTo(AbstractSqlTester.java:464)
> at
> org.apache.calcite.test.SqlToRelFixture.convertsTo(SqlToRelFixture.java:106)
> at org.apache.calcite.test.SqlToRelFixture.ok(SqlToRelFixture.java:94)
> at
> org.apache.calcite.test.SqlToRelConverterTest.testUpdateSubQuery(SqlToRelConverterTest.java:3077)
> {noformat}
> The same query without casting to BIGINT works fine.
> Assertion line
> {code:java}
> // Should keep sync with rules in SqlTypeCoercionRule.
> assert SqlTypeUtil.canCastFrom(toType, fromType, mappingRule);
> return true;
> {code}
> When assertion fails, I see that
> toType = INTEGER
> fromType = RecordType(BIGINT EXPR$0)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)