You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Mihai Budiu (Jira)" <ji...@apache.org> on 2025/04/30 06:51:00 UTC

[jira] [Resolved] (CALCITE-6946) Expand predicates from disjunction for inputs of Join

     [ https://issues.apache.org/jira/browse/CALCITE-6946?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mihai Budiu resolved CALCITE-6946.
----------------------------------
    Fix Version/s: 1.40.0
       Resolution: Fixed

Fixed in [https://github.com/apache/calcite/commit/cb27eed9d79a186a5c3c24effaead520f899dcdc]

Thank you for your contribution [~dongsl] 

Thank you for your reviews [~asolimando] [~jensen] 

> 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
>             Fix For: 1.40.0
>
>
> 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)