You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Thomas Rebele (Jira)" <ji...@apache.org> on 2020/08/21 09:50:00 UTC
[jira] [Created] (CALCITE-4189) Simplify 'X OR IS NOT TRUE X' to
'TRUE'
Thomas Rebele created CALCITE-4189:
--------------------------------------
Summary: Simplify 'X OR IS NOT TRUE X' to 'TRUE'
Key: CALCITE-4189
URL: https://issues.apache.org/jira/browse/CALCITE-4189
Project: Calcite
Issue Type: Improvement
Reporter: Thomas Rebele
Statements of the form 'P OR IS NOT TRUE P' to 'TRUE' should always be true (please correct me if I am wrong):
{code:java}
> select x, X='A' as EQ,
X='A' IS NOT TRUE as EQ_NOT_TRUE,
(X='A') OR ((X='A') IS NOT TRUE) as EQ_OR_EQ_NOT_TRUE
from (values 'A', 'B', null) as t(x);
+---+-------+-------------+-------------------+
| X | EQ | EQ_NOT_TRUE | EQ_OR_EQ_NOT_TRUE |
+---+-------+-------------+-------------------+
| A | true | false | true |
| B | false | true | true |
| | | true | true |
+---+-------+-------------+-------------------+
{code}
Here a test case for the expected behavior:
{code:java}
@Test void testSimplifyPOrPNotTrue() {
checkSimplify(
and(
vBool(),
or(
eq(vInt(), literal(1)),
isNotTrue(eq(vInt(), literal(1)))
)),
"?0.bool0");
}{code}
There are some other, similar expressions, such as 'P IS NOT FALSE OR NOT P', which can be reduced to true. Maybe there's a way to handle all of them?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)