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

Mihai Budiu commented on CALCITE-6946:
--------------------------------------

I think that ideally using DNF to rewrite join conditions should be used by a 
separate optimization rule, which would potentially be beneficial when combined 
with this one. 

Sometimes the conditions are in DNF form in the source program (I don't know if 
there exists an optimization that may rewrite them to other forms, such as CNF).

> Expand predicates from disjunction for inputs of Join
> -----------------------------------------------------
>
>                 Key: CALCITE-6946
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6946
>             Project: Calcite
>          Issue Type: New Feature
>          Components: core
>    Affects Versions: 1.39.0
>            Reporter: Silun Dong
>            Assignee: Silun Dong
>            Priority: Major
>
> Similar to Calcite-6914, we can expand redundant predicates from the 
> disjunction and push them down. However, the predicates expanded by 
> Calcite-6914 must belong to a single table, that is, if join_type does not 
> restrict pushdown, the redundant predicates can be pushed directly on 
> TableScan.
> However, pushing predicates down to the inputs of Join is also very useful 
> ([link|https://github.com/apache/calcite/pull/4267#discussion_r2021576009]), 
> for example:
> {code:java}
> select t1.id from t1, t2, t3
> where t1.id = t2.id
> and t1.id = t3.id
> and (
>     (t1.age < 50 and t3.age > 20)
>     or
>     (t2.weight > 70 and t3.height < 180)
> ) {code}
> Because {{(t1.age < 50 and t3.age > 20) or (t2.weight > 70 and t3.height < 
> 180)}} a is a disjunction and involves multiple tables, it cannot be pushed 
> down.
> However, we can expand it to {{(t1.age < 50 or t2.weight > 70)}} , 
> {{{}(t3.age > 20 or t3.height < 180){}}}, and push them down to both sides of 
> Join.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to