Julian Hyde created CALCITE-4446:
------------------------------------
Summary: 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
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:
* {{SEARCH(10, 20, UNKNOWN AS TRUE)}}: {{x IS NULL OR x IN (10, 20)}} →
TRUE
* {{SEARCH(10, 20, UNKNOWN AS UNKNOWN)}}: {{x IN (10, 20)}} → UNKNOWN
* {{SEARCH(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)