Re: Making Vars outer-join aware
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Richard Guo <guofenglinux@gmail.com>
Cc: Pg Hackers <pgsql-hackers@lists.postgresql.org>,
"Finnerty,
Jim" <jfinnert@amazon.com>
Date: 2022-11-01T00:19:02Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Re-allow INDEX_VAR as rt_index in ChangeVarNodes().
- fbf80421ead5 16.0 landed
-
Fix thinkos in have_unsafe_outer_join_ref; reduce to Assert check.
- f50f029c497d 16.0 landed
-
Invent "join domains" to replace the below_outer_join hack.
- 3bef56e11650 16.0 landed
-
Do assorted mop-up in the planner.
- b448f1c8d83f 16.0 landed
-
Make Vars be outer-join-aware.
- 2489d76c4906 16.0 landed
-
Invent "multibitmapsets", and use them to speed up antijoin detection.
- e9e26b5e7166 16.0 landed
-
Add basic regression tests for semi/antijoin recognition.
- 0043aa6b8597 16.0 landed
-
Improve performance of adjust_appendrel_attrs_multilevel.
- 2f17b57017e5 16.0 landed
-
Refactor addition of PlaceHolderVars to joinrel targetlists.
- afa0ec30bfd1 16.0 landed
-
Use an explicit state flag to control PlaceHolderInfo creation.
- b3ff6c742f6c 16.0 landed
-
Make PlaceHolderInfo lookup O(1).
- 6569ca43973b 16.0 landed
Attachments
- v5-0000-add-overview-documentation.patch (text/x-diff) patch v5-0000
- v5-0001-add-nullingrels-fields.patch (text/x-diff) patch v5-0001
- v5-0002-label-Var-nullability-in-parser.patch (text/x-diff) patch v5-0002
- v5-0003-cope-with-nullability-in-planner.patch (text/x-diff) patch v5-0003
- v5-0004-add-rinfo-serial-numbers.patch (text/x-diff) patch v5-0004
- v5-0005-fix-flatten_join_alias_vars.patch (text/x-diff) patch v5-0005
- v5-0006-fix-FDWs.patch (text/x-diff) patch v5-0006
- v5-0007-avoid-using-nullable_relids.patch (text/x-diff) patch v5-0007
- v5-0008-remove-nullable_relids.patch (text/x-diff) patch v5-0008
- v5-0009-simplify-dummy-join-clauses.patch (text/x-diff) patch v5-0009
- v5-0010-fix-antijoin-recognition.patch (text/x-diff) patch v5-0010
Richard Guo <guofenglinux@gmail.com> writes: > I wonder why this is not noticed by regression tests. So I did some > search and it seems we do not have any test cases covering the > transformation we apply to reduce outer joins. I think maybe we should > add such cases in regression tests. Right, done at 0043aa6b8. The actual fix is in 0010 below (it would have been earlier, except I'd forgotten about this issue). I've been working away at this patch series, and here is an up-to-date version. I've mostly fixed the inability to check in setrefs.c that varnullingrels match up at different join levels, and I've found a solution that I feel reasonably happy about for variant join quals depending on application of outer-join identity 3. There's certainly bits of this that could be done in other ways, but overall I'm pleased with the state of these patches. I think that the next step is to change things so that the "push a constant through outer-join quals" hacks are replaced by EquivalenceClass-based logic. That turns out to be harder than I'd supposed initially, because labeling Vars with nullingrels fixes only part of the problem there. The other part is that deductions we make from an outer-join qual can only be applied below the nullable side of that join --- we can't use them to remove rows from the non-nullable side. I have an idea how to make that work, but it's not passing regression tests yet :-(. Anyway, there's much more to do, but here's what I've got today. regards, tom lane