You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Vova Vysotskyi (Jira)" <ji...@apache.org> on 2019/10/29 17:25:00 UTC

[jira] [Created] (CALCITE-3457) RexSimplify incorrectly simplifies IS NOT NULL operator with ITEM call

Vova Vysotskyi created CALCITE-3457:
---------------------------------------

             Summary: 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
             Fix For: 1.22.0


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() {
    HepProgramBuilder programBuilder = HepProgram.builder()
        .addRuleInstance(ReduceExpressionsRule.FILTER_INSTANCE);

    String query = "select * from sales.customer as t1 where t1.c_nationkey[0] is not null";

    checkPlanning(
        createDynamicTester(),
        null,
        new HepPlanner(programBuilder.build()),
        query,
        false);
  }
{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)