Fix "wrong varnullingrels" for subquery nestloop parameters.
authorTom Lane <[email protected]>
Mon, 12 Jun 2023 14:01:26 +0000 (10:01 -0400)
committerTom Lane <[email protected]>
Mon, 12 Jun 2023 14:01:26 +0000 (10:01 -0400)
commitbfd332b3fda5c73e28c05b7ba0aac6cf053cdf00
tree7d29b08446723d1ed812546bc092c768be087a5c
parent548d7260309008b146bd9eaa66f3c5be0a8d725a
Fix "wrong varnullingrels" for subquery nestloop parameters.

If we apply outer join identity 3 when relation C is a subquery
having lateral references to relation B, then the lateral references
within C continue to bear the original syntactically-correct
varnullingrels marks, but that won't match what is available from
the outer side of the nestloop.  Compensate for that in
process_subquery_nestloop_params().  This is a slightly hacky fix,
but we certainly don't want to re-plan C in toto for each possible
outer join order, so there's not a lot of better alternatives.

Richard Guo and Tom Lane, per report from Markus Winand

Discussion: https://postgr.es/m/DFBB2D25-DE97-49CA-A60E-07C881EA59A7@winand.at
src/backend/optimizer/plan/setrefs.c
src/backend/optimizer/util/paramassign.c
src/test/regress/expected/join.out
src/test/regress/sql/join.sql