[
https://issues.apache.org/jira/browse/CALCITE-7722?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated CALCITE-7722:
------------------------------------
Labels: pull-request-available (was: )
> Simplify IS NULL / IS NOT NULL expressions by removing operations if they do
> not affect the nullability
> -------------------------------------------------------------------------------------------------------
>
> Key: CALCITE-7722
> URL: https://issues.apache.org/jira/browse/CALCITE-7722
> Project: Calcite
> Issue Type: Improvement
> Reporter: Thomas Rebele
> Assignee: Ruben Q L
> Priority: Major
> Labels: pull-request-available
>
> Example: consider the expression {{{}(CAST(col AS INT)*2) IS NULL{}}}. If the
> operation uses integer overflows, then it does not affect the nullability. So
> the expression can be simplified to {{{}CAST(col as INT) IS NULL{}}}.
> If the operation just returns NULL or throws an exception, then this
> simplification would change the semantics. Calcite's built-in multiplication
> [uses integer
> overflows|https://github.com/apache/calcite/blob/437398834e49c8086a64870427214fec428684fc/core/src/main/java/org/apache/calcite/adapter/enumerable/RexImpTable.java#L844],
> so it should carry out that simplification.
> However, currently the following RexProgramTest assertion fails:
> {code:java}
> checkSimplify(isNull(mul(vInt(), literal(2))), "IS NULL(?0.int0)"); {code}
> If the sub-expression may throw an exception, then the multiplication can
> still be removed:
> {code:java}
> checkSimplify(isNull(mul(cast(vVarchar(), tInt(false)), literal(2))),
> "IS NULL(CAST(?0.varchar0):INTEGER NOT NULL)"); {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)