[
https://issues.apache.org/jira/browse/CALCITE-1790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16019622#comment-16019622
]
Remus Rusanu edited comment on CALCITE-1790 at 5/22/17 2:27 PM:
----------------------------------------------------------------
I'm going to propose to pull the plug on this one. As I see it the risk
outweighs the benefit. It triggers many test failures that are possibly
exposing existing problems, but overall the end result is less stable. And I
think the problems will keep piling, my hypothesis is that the breaking of the
evaluation order implicit in CASE is exposing too many sensistive code areas to
handle null/unknown when they did not expect before.
Add to this the fact that the complexity cap would make the behavior surprising
(sometime CASE gets converted, sometimes it does not).
was (Author: rusanu):
I'm going to propose to pull the plug on this one. As I see it the risk
outweighs the benefit. It triggers many test failures the are possibly exposing
existing problems, but overall the end result is less stable. And I think the
problems will keep piling, my hypothesis is that the breaking of the evaluation
order implicit in CASE is exposing too many sensistive code areas to handle
null/unknown when they did not expect before.
Add to this the fact that the complexity cap would make the behavior surprising
(sometime CASE gets converted, sometimes it does not).
> 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)