[
https://issues.apache.org/jira/browse/CALCITE-2573?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16621649#comment-16621649
]
Julian Hyde commented on CALCITE-2573:
--------------------------------------
I don't dispute any of that. My point is that when the verifier prints
{code}java.lang.AssertionError: result mismatch: when applied to {}, null
yielded NULL, and false yielded false{code} it is mistaken. It is not wrong for
the simplifier to leave unknown as unknown; it is just sub-optimal.
bq. It is much easier to check "filter condition" for literal FALSE rather than
write e.equals(falseLiteral) || utils.isnull(e) in each and every rule.
Especially when the rule asks for unknownAsFalse
Yes, but remember that the goal of simplification is not to save the planner
effort. It is to produce a more better plan.
> RexSimplify: simplify NULL to FALSE in uknownAsFalse mode
> ---------------------------------------------------------
>
> Key: CALCITE-2573
> URL: https://issues.apache.org/jira/browse/CALCITE-2573
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.17.0
> Reporter: Vladimir Sitnikov
> Assignee: Julian Hyde
> Priority: Major
> Labels: newbie
>
> {noformat}2018-09-19 20:42:41,804 [pool-1-thread-1] INFO - Randomized test
> identified a potential defect. Feel free to fix that issue
> java.lang.AssertionError: result mismatch: when applied to {}, null yielded
> NULL, and false yielded false
> at org.apache.calcite.rex.RexSimplify.verify(RexSimplify.java:1208)
> at org.apache.calcite.rex.RexSimplify.simplify(RexSimplify.java:178)
> at
> org.apache.calcite.test.fuzzer.RexProgramFuzzyTest.checkTrueFalse(RexProgramFuzzyTest.java:169)
> at
> org.apache.calcite.test.fuzzer.RexProgramFuzzyTest.checkTrueFalse(RexProgramFuzzyTest.java:160)
> Suppressed: org.apache.calcite.test.fuzzer.RexProgramFuzzyTest$1: seed
> -4383181468718104148{noformat}
> {noformat}postgres=# select * from (values(42)) as t where 42;
> ERROR: argument of WHERE must be type boolean, not type integer
> LINE 1: select * from (values(42)) as t where 42;
> ^
> postgres=# select * from (values(42)) as t where cast(null as int4);
> ERROR: argument of WHERE must be type boolean, not type integer
> LINE 1: select * from (values(42)) as t where cast(null as int4);
> ^
> postgres=# select * from (values(42)) as t where cast(null as bool);
> column1
> ---------
> (0 rows){noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)