[ 
https://issues.apache.org/jira/browse/CALCITE-1790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16007821#comment-16007821
 ] 

Julian Hyde commented on CALCITE-1790:
--------------------------------------

This rewrite can cause a quadratic expansion in size. For example, a case 
expression with 10 WHENs will produce an expression of size 1 + 2 + ... + 10 = 
55. How do we plan to manage that?

It certainly would be great if we could detect expressions that were never 
simultaneously true. Then instead of "not(p1) and not(p2) and p3" we could just 
write "p3". That would prevent the quadratic expansion in a lot of common cases.

> 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 not nullable 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)

Reply via email to