[
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)