[
https://issues.apache.org/jira/browse/CALCITE-739?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14552295#comment-14552295
]
Jesus Camacho Rodriguez commented on CALCITE-739:
-------------------------------------------------
[~julianhyde], what do you think? Other ideas? Thanks
> Extend RexUtil.pullFactors to recognize additional common factors
> -----------------------------------------------------------------
>
> Key: CALCITE-739
> URL: https://issues.apache.org/jira/browse/CALCITE-739
> Project: Calcite
> Issue Type: Bug
> Reporter: Jesus Camacho Rodriguez
> Assignee: Jesus Camacho Rodriguez
>
> RexUtil.pullFactors canonizes at the term level (i.e. "a or b or a" becomes
> "a or b" but does not attempt to recognize terms that are equivalent).
> Further, it does not exploit the symmetry of '=' (i.e. a = b iff b = a).
> - A first extension would be to normalize comparisons between field
> references and literals so that the lower field reference is always on the
> left. So, "$6 = $3" becomes "$3 = $6"; "$6 > $3" becomes "$3< $6". And
> "literal <= $5" becomes "$5 >= literal". This would not damage performance,
> and would improve a few plans.
> - Another possible extension. Given the predicate "(a or b) and ((x and a) or
> (y and b))", the first factor can be removed so the expression consists only
> of "(x and a) or (y and b)".
> One possible way to recognize such cases is to transform the second factor to
> CNF i.e. "(x or y) and (x or b) and (a or y) and (a or b)", and as it
> contains "(a or b)", we would know that we can discard it. Then we could just
> use the original expression i.e. "(x and a) or (y and b)" in the predicate,
> once we have done the check.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)