pgsql: Fix improper interaction of FULL JOINs with lateral references.
От | Tom Lane |
---|---|
Тема | pgsql: Fix improper interaction of FULL JOINs with lateral references. |
Дата | |
Msg-id | E1hDaaL-0007M4-47@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix improper interaction of FULL JOINs with lateral references. join_is_legal() needs to reject forming certain outer joins in cases where that would lead the planner down a blind alley. However, it mistakenly supposed that the way to handle full joins was to treat them as applying the same constraints as for left joins, only to both sides. That doesn't work, as shown in bug #15741 from Anthony Skorski: given a lateral reference out of a join that's fully enclosed by a full join, the code would fail to believe that any join ordering is legal, resulting in errors like "failed to build any N-way joins". However, we don't really need to consider full joins at all for this purpose, because we effectively force them to be evaluated in syntactic order, and that order is always legal for lateral references. Hence, get rid of this broken logic for full joins and just ignore them instead. This seems to have been an oversight in commit 7e19db0c0. Back-patch to all supported branches, as that was. Discussion: https://postgr.es/m/15741-276f1f464b3f40eb@postgresql.org Branch ------ REL9_4_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/c6df3a28ff40ca7124ea6c28adf2e3ff9910faee Modified Files -------------- src/backend/optimizer/path/joinrels.c | 13 ++++--------- src/test/regress/expected/rangefuncs.out | 25 +++++++++++++++++++++++++ src/test/regress/sql/rangefuncs.sql | 15 +++++++++++++++ 3 files changed, 44 insertions(+), 9 deletions(-)
В списке pgsql-committers по дате отправления: