Fix an oversight in checking whether a join with LATERAL refs is legal. In many cases, we can implement a semijoin as a plain innerjoin by first passing the righthand-side relation through a unique-ification step. However, one of the cases where this does NOT work is where the RHS has a LATERAL reference to the LHS; that makes the RHS dependent on the LHS so that unique-ification is meaningless. joinpath.c understood this, and so would not generate any join paths of this kind ... but join_is_legal neglected to check for the case, so it would think that we could do it. The upshot would be a "could not devise a query plan for the given query" failure once we had failed to generate any join paths at all for the bogus join pair.
Back-patch to 9.3 where LATERAL was added. Branch ------ REL9_4_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/216977a7d99507ca3227a505510bf5ced4f14799 Modified Files -------------- src/backend/optimizer/path/joinrels.c | 8 ++++++-- src/test/regress/expected/join.out | 35 +++++++++++++++++++++++++++++++++ src/test/regress/sql/join.sql | 13 ++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) -- Sent via pgsql-committers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-committers
