pub fn split_subquery_predicates(expr: &mut HirRelationExpr)
Expand description

Rewrites predicates that contain subqueries so that the subqueries appear in their own later predicate when possible.

For example, this function rewrites this expression

Filter {
    predicates: [a = b AND EXISTS (<subquery 1>) AND c = d AND (<subquery 2>) = e]
}

like so:

Filter {
    predicates: [
        a = b AND c = d,
        EXISTS (<subquery>),
        (<subquery 2>) = e,
    ]
}

The rewrite causes decorrelation to incorporate prior predicates into the outer relation upon which the subquery is evaluated. In the above rewritten example, the EXISTS (<subquery>) will only be evaluated for outer rows where a = b AND c = d. The second subquery, (<subquery 2>) = e, will be further restricted to outer rows that match A = b AND c = d AND EXISTS(<subquery>). This can vastly reduce the cost of the subquery, especially when the original conjunction contains join keys.