[
https://issues.apache.org/jira/browse/CALCITE-2841?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Zoltan Haindrich updated CALCITE-2841:
--------------------------------------
Description:
Why would this be usefull?
* right now a boolean CASE expressions are translated into AND/ORs in most
cases ; "disjunction of conjuctions"
* AND/OR simplification could "push" the NOT into them; but only after the CASE
conversion; so the expression becames a "conjunction of disjunctions" and all
the other simplification rules are working hard to restore order....
* if the push of NOT would happen earlier it would be better because it could
address complex cases better
{code:java}
@Test public void testNotIntoCase() {
checkSimplify(
not(
case_(
isTrue(vBool()), vBool(1),
vBool(2))),
"CASE(IS TRUE(?0.bool0), NOT(?0.bool1), NOT(?0.bool2))");
}
{code}
actually NOT right now stops the simplification recursion so it would be best
to also enable that as well; in case NOT is not is not pushed/handled -
unknownAs need to be negated.
{code}
@Test public void testNotRecursion() {
checkSimplify(
not(coalesce(nullBool, trueLiteral)),
"false");
}
{code}
was:
{code:java}
@Test public void testNotIntoCase() {
checkSimplify(
not(
case_(
isTrue(vBool()), vBool(1),
vBool(2))),
"CASE(IS TRUE(?0.bool0), NOT(?0.bool1), NOT(?0.bool2))");
}
{code}
actually NOT right now stops the simplification recursion so it would be best
to also enable that as well; in case NOT is not is not pushed/handled -
unknownAs need to be negated.
{code}
@Test public void testNotRecursion() {
checkSimplify(
not(coalesce(nullBool, trueLiteral)),
"false");
}
{code}
> Simplification: push negation into Case expression
> --------------------------------------------------
>
> Key: CALCITE-2841
> URL: https://issues.apache.org/jira/browse/CALCITE-2841
> Project: Calcite
> Issue Type: Improvement
> Reporter: Zoltan Haindrich
> Assignee: Julian Hyde
> Priority: Major
>
> Why would this be usefull?
> * right now a boolean CASE expressions are translated into AND/ORs in most
> cases ; "disjunction of conjuctions"
> * AND/OR simplification could "push" the NOT into them; but only after the
> CASE conversion; so the expression becames a "conjunction of disjunctions"
> and all the other simplification rules are working hard to restore order....
> * if the push of NOT would happen earlier it would be better because it could
> address complex cases better
> {code:java}
> @Test public void testNotIntoCase() {
> checkSimplify(
> not(
> case_(
> isTrue(vBool()), vBool(1),
> vBool(2))),
> "CASE(IS TRUE(?0.bool0), NOT(?0.bool1), NOT(?0.bool2))");
> }
> {code}
> actually NOT right now stops the simplification recursion so it would be best
> to also enable that as well; in case NOT is not is not pushed/handled -
> unknownAs need to be negated.
> {code}
> @Test public void testNotRecursion() {
> checkSimplify(
> not(coalesce(nullBool, trueLiteral)),
> "false");
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)