Hi Alena,
Thanks for v8. The walker is much easier to follow now, and all of
Peter's points look addressed to me.
I compared the results of random EXISTS/NOT EXISTS queries with and
without the pull-up (adding OFFSET 0 to the sub-select blocks it). The
queries had nested inner and outer joins in the sub-select, correlated
and uncorrelated quals in the ON clauses, and NULLs in the data. About
13.5k queries ran, and about 1250 of them go through the new code path.
I found no wrong results and no assertion failures, so the approach
looks correct to me.
My main comment is about the regression tests. A few things are missing
in the regression tests:
1. anti join cases
2. query results not only EXPLAIN output
3. An EXISTS sublink in the ON clause of an outer join in the parent
query, where the moved qual interacts with the available_rels check.
--
Best regards,
Ilia Evdokimov,
Tantor Labs LLC,
https://tantorlabs.com/