Centralize fixups for mismatched nullingrels in nestloop params.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 20 Jun 2023 14:22:52 +0000 (10:22 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 20 Jun 2023 14:22:52 +0000 (10:22 -0400)
commit0655c03ef9cc6154b0b209059e758863dcf4e6b0
treea415b667af2d1fa38dfe1b3a52b1a18edf6d9e5f
parent596114164699bbe184969df374fd6a1d8a93a57c
Centralize fixups for mismatched nullingrels in nestloop params.

It turns out that the fixes we applied in commits bfd332b3f
and 63e4f13d2 were not nearly enough to solve the problem.
We'd focused narrowly on subquery RTEs with lateral references,
but lateral references can occur in several other RTE kinds
such as function RTEs.  Putting the same hack into half a dozen
code paths seems quite unattractive.  Hence, revert the code changes
(but not the test cases) from those commits and instead solve it
centrally in identify_current_nestloop_params(), as Richard proposed
originally.  This is a bit annoying because it could mask erroneous
nullingrels in nestloop params that are generated from non-LATERAL
parameterized paths; but on balance I don't see a better way.
Maybe at some future time we'll be motivated to find a more rigorous
approach to nestloop params, but that's not happening for beta2.

Richard Guo and Tom Lane

Discussion: https://postgr.es/m/CAMbWs48Jcw-NvnxT23WiHP324wG44DvzcH1j4hc0Zn+3sR9cfg@mail.gmail.com
src/backend/optimizer/path/joinpath.c
src/backend/optimizer/plan/setrefs.c
src/backend/optimizer/util/paramassign.c
src/test/regress/expected/join.out
src/test/regress/sql/join.sql