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)