Avoid mislabeling of lateral references, redux. As I'd feared, commit 5c9d8636d was still a few bricks shy of a load. We can't just leave pulled-up lateral-reference Vars with no new nullingrels: we have to carefully compute what subset of the to-be-replaced Var's nullingrels apply to them, else we still get "wrong varnullingrels" errors. This is a bit tedious, but it looks like we can use the nullingrel data this patch computes for other purposes, enabling better optimization. We don't want to inject unnecessary plan changes into stable branches though, so leave that idea for a later HEAD-only patch.
Patch by me, but thanks to Richard Guo for devising a test case that broke 5c9d8636d, and for preliminary investigation about how to fix it. As before, back-patch to v16. Discussion: https://postgr.es/m/e1tgn4j-0003zi...@gemulon.postgresql.org Branch ------ REL_16_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/7b456f040fb6ca320c756cd822cfbd219b0c4078 Modified Files -------------- src/backend/optimizer/prep/prepjointree.c | 171 +++++++++++++++++++++++++++++- src/test/regress/expected/subselect.out | 51 +++++++++ src/test/regress/sql/subselect.sql | 15 +++ src/tools/pgindent/typedefs.list | 1 + 4 files changed, 233 insertions(+), 5 deletions(-)