[
https://issues.apache.org/jira/browse/CALCITE-1790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16008011#comment-16008011
]
Remus Rusanu commented on CALCITE-1790:
---------------------------------------
For cases when the expressions are known true/false it should be not more
complex than the existing simplification ({{CASE WHEN p1 THEN TRUE WHEN p2 THEN
FALSE ...}}. In fact, this rule would replace the existing rule, imho. But is
true that for expressions unknown at compile time it can grow big. Put a limit
and bail if exceeded? Not sure.
As for detecting the case when only one predicate can be true, I can think of
only few cases when it can be reliably be predicted (eg. {{CASE col WHEN v1
THEN ... WHEN v2 THEN ...}} when v1 != v2).
> 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)