[ 
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)

Reply via email to