You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Remus Rusanu (JIRA)" <ji...@apache.org> on 2017/05/12 08:29:04 UTC

[jira] [Updated] (CALCITE-1790) Simplify CASE P1 THEN P@ THEN ... ELSE TRUE/FALSE

     [ https://issues.apache.org/jira/browse/CALCITE-1790?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Remus Rusanu updated CALCITE-1790:
----------------------------------
    Description: 
In HIVE-14431 [~jcamachorodriguez] proposed a simplification for CASE when all branches are boolean expression into an alternative AND/OR/NOT based expression. This allows for more aggressive reductions and split/push-down on the whole.  Meantime the simplifier code migrated to Calcite so I'm reviving this here.

The proposed simplification is:

{code}
CASE
WHEN p1 THEN ex1
WHEN p2 THEN ex2
...
WHEN pn THEN exn
ELSE TRUE/FALSE
END
{code}

to be transformed into:
{code}
(p1 AND ex1)
OR (not(p1) AND p2 AND x2)
...
OR (not(p1) AND not(p2) ... AND not(pn-1) AND Pn AND exn)
[OR (not(p1) AND not(p2) ... AND not(pn))]
{code}

The last OR is depending on the ELSE branch being TRUE/FALSE.

  was:
In HIVE-14431 [~jcamachorodriguez] proposed a simplification for CASE when all branches are boolean expression into an alternative AND/OR/NOT based expression. This allows for more aggressive reductions and split/push-down on the whole.  Meantime the simplifier code migrated to Calcite so I'm reviving this here.

The proposed simplification is:

{code}
CASE
WHEN p1 THEN ex1
WHEN p2 THEN ex2
...
WHEN pn THEN exn
ELSE TRUE/FALSE
END
{code}

to be transformed into:
{code}
(p1 AND ex1)
OR (not(p1) AND p2 AND x2)
...
OR (not(p1) AND not(p2) ... AND not(pn-1) AND Pn AND exn)
OR [not] (not(p1) AND not(p2) ... AND not(pn))
{code}

The last OR is negated depending on the ELSE branch being TRUE/FALSE.


> Simplify CASE P1 THEN <boolean> P@ THEN <booleans> ...  ELSE TRUE/FALSE
> -----------------------------------------------------------------------
>
>                 Key: CALCITE-1790
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1790
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: Remus Rusanu
>            Assignee: Remus Rusanu
>            Priority: Minor
>
> In HIVE-14431 [~jcamachorodriguez] proposed a simplification for CASE when all branches are boolean expression into an alternative AND/OR/NOT based expression. This allows for more aggressive reductions and split/push-down on the whole.  Meantime the simplifier code migrated to Calcite so I'm reviving this here.
> The proposed simplification is:
> {code}
> CASE
> WHEN p1 THEN ex1
> WHEN p2 THEN ex2
> ...
> WHEN pn THEN exn
> ELSE TRUE/FALSE
> END
> {code}
> to be transformed into:
> {code}
> (p1 AND ex1)
> OR (not(p1) AND p2 AND x2)
> ...
> OR (not(p1) AND not(p2) ... AND not(pn-1) AND Pn AND exn)
> [OR (not(p1) AND not(p2) ... AND not(pn))]
> {code}
> The last OR is depending on the ELSE branch being TRUE/FALSE.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)