pgsql: Fix an oversight in checking whether a join with LATERAL refs is - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix an oversight in checking whether a join with LATERAL refs is
Date
Msg-id E1ZLJhR-0007hh-09@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
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(-)


pgsql-committers by date:

Previous
From: Noah Misch
Date:
Subject: pgsql: Consolidate makefile code for setting top_srcdir, srcdir and VPA
Next
From: Tom Lane
Date:
Subject: pgsql: Fix an oversight in checking whether a join with LATERAL refs is