[ https://issues.apache.org/jira/browse/IGNITE-25830?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aleksey Plekhanov updated IGNITE-25830: --------------------------------------- Description: Quries like: {code:sql} SELECT COALESCE(COALESCE(null, 'a'), 'b') {code} Fail with: {noformat} java.lang.AssertionError: Conversion to relational algebra failed to preserve datatypes: validated type: RecordType(VARCHAR(1024) CHARACTER SET "UTF-8" NOT NULL EXPR$0) NOT NULL converted type: RecordType(CHAR(1) CHARACTER SET "UTF-8" NOT NULL EXPR$0) NOT NULL {noformat} Query works on pure Calcite. Query like {code:sql} SELECT COALESCE(COALESCE(null::varchar, 'a'), 'b') {code} Also works. Operator {{COALESCE}} is converted to {{CASE WHEN ... IS NOT NULL}}. Operator {{IS_NOT_NULL}} has {{InferTypes.VARCHAR_1024}} operand type inference. The type of the whole upper {{CASE WHEN}} is inferred as {{VARCHAR(1024)}}, but when converted to Rex is inferred as {{CHAR(1)}}. For some reason pure Calcite infer {{CASE WHEN}} type correctly. Need to investigate our changes in {{IgniteSqlValidator.inferUnknownTypes}}. was: Quries like: {code:java} SELECT COALESCE(COALESCE(null, 'a'), 'b') {code} Fail with: {noformat} java.lang.AssertionError: Conversion to relational algebra failed to preserve datatypes: validated type: RecordType(VARCHAR(1024) CHARACTER SET "UTF-8" NOT NULL EXPR$0) NOT NULL converted type: RecordType(CHAR(1) CHARACTER SET "UTF-8" NOT NULL EXPR$0) NOT NULL {noformat} > Calcite engine. Double coalesce with null literal throws an exception > --------------------------------------------------------------------- > > Key: IGNITE-25830 > URL: https://issues.apache.org/jira/browse/IGNITE-25830 > Project: Ignite > Issue Type: Bug > Reporter: Aleksey Plekhanov > Priority: Major > Labels: ise > > Quries like: > {code:sql} > SELECT COALESCE(COALESCE(null, 'a'), 'b') > {code} > Fail with: > {noformat} > java.lang.AssertionError: Conversion to relational algebra failed to preserve > datatypes: > validated type: > RecordType(VARCHAR(1024) CHARACTER SET "UTF-8" NOT NULL EXPR$0) NOT NULL > converted type: > RecordType(CHAR(1) CHARACTER SET "UTF-8" NOT NULL EXPR$0) NOT NULL > {noformat} > Query works on pure Calcite. > Query like > {code:sql} > SELECT COALESCE(COALESCE(null::varchar, 'a'), 'b') > {code} > Also works. > Operator {{COALESCE}} is converted to {{CASE WHEN ... IS NOT NULL}}. Operator > {{IS_NOT_NULL}} has {{InferTypes.VARCHAR_1024}} operand type inference. The > type of the whole upper {{CASE WHEN}} is inferred as {{VARCHAR(1024)}}, but > when converted to Rex is inferred as {{CHAR(1)}}. For some reason pure > Calcite infer {{CASE WHEN}} type correctly. Need to investigate our changes > in {{IgniteSqlValidator.inferUnknownTypes}}. -- This message was sent by Atlassian Jira (v8.20.10#820010)