[ https://issues.apache.org/jira/browse/CALCITE-4446?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ASF GitHub Bot updated CALCITE-4446: ------------------------------------ Labels: pull-request-available (was: ) > Implement three-valued logic for SEARCH operator > ------------------------------------------------- > > Key: CALCITE-4446 > URL: https://issues.apache.org/jira/browse/CALCITE-4446 > Project: Calcite > Issue Type: Bug > Reporter: Julian Hyde > Priority: Blocker > Labels: pull-request-available > Fix For: 1.27.0 > > Time Spent: 10m > Remaining Estimate: 0h > > Implement three-valued logic for SEARCH operator. > Consider the expression {{x IN (10, 20)}}, which we might represent as > {{SEARCH(x, Sarg(10, 20))}}. Suppose we invoke this with a value of {{NULL}} > for {{x}}. Do we want it to return UNKNOWN, FALSE or TRUE? The answer is: all > of the above. > Here are the 3 variants: > * {{Sarg(10, 20, UNKNOWN AS TRUE)}}: {{x IS NULL OR x IN (10, 20)}} → > TRUE > * {{Sarg(10, 20, UNKNOWN AS UNKNOWN)}}: {{x IN (10, 20)}} → UNKNOWN > * {{Sarg(10, 20, UNKNOWN AS FALSE)}}: {{x IS NOT NULL AND (x IN (10, 20))}} > → FALSE > Currently {{class Sarg}} has a field {{boolean containsNull}} which deals > with the first two cases. Changing {{boolean containsNull}} to {{RexUnknownAs > unknownAs}} (which has 3 values) will allow us to represent the third. The > new representation is symmetrical under negation, which de Morgan's law > suggests is a good thing. -- This message was sent by Atlassian Jira (v8.3.4#803005)