[ https://issues.apache.org/jira/browse/CALCITE-3457?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17226568#comment-17226568 ]
Danny Chen commented on CALCITE-3457: ------------------------------------- The check of this patch is still valid, please review the fix code https://github.com/apache/calcite/pull/2246/files > RexSimplify incorrectly simplifies IS NOT NULL operator with ITEM call > ---------------------------------------------------------------------- > > Key: CALCITE-3457 > URL: https://issues.apache.org/jira/browse/CALCITE-3457 > Project: Calcite > Issue Type: Bug > Affects Versions: 1.22.0 > Reporter: Vova Vysotskyi > Assignee: Danny Chen > Priority: Major > Labels: pull-request-available > Fix For: 1.22.0 > > Time Spent: 1h 20m > Remaining Estimate: 0h > > In CALCITE-3390 ITEM was marked with {{Policy.ANY}} strong policy, but > according to its JavaDoc, the result may be null if and only if at least one > of its arguments is null. This statement was used in > {{RexSimplify.simplifyIsNotNull()}} method, so {{t1.c_nationkey[0] is not > null}} will be simplified to {{IS NOT NULL($0)}} which is wrong, since array > may be empty, or index may be less than the size of the array. > Unit test which helps to reproduce this issue: > {noformat} > @Test public void testSimplifyItemIsNotNull() { > String query = "select * from sales.customer as t1 where > t1.c_nationkey[0] is not null"; > sql(query) > .withTester(t -> createDynamicTester()) > .withRule(ReduceExpressionsRule.FILTER_INSTANCE) > .check(); > } > {noformat} > Returns plan with incorrectly simplified ITEM expression: > {noformat} > LogicalProject(**=[$1]) > LogicalFilter(condition=[IS NOT NULL($0)]) > LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]]) > {noformat} > But the initial intention of CALCITE-3390 was to allow pushing ITEM > expression to the right input of left-outer-join. > I propose to add a new element to the {{Policy}} which will have a relaxed > condition - expression is null if at least one of its arguments is null. -- This message was sent by Atlassian Jira (v8.3.4#803005)