pgsql: Fix PlaceHolderVar mechanism's interaction with outer joins.
От | Tom Lane |
---|---|
Тема | pgsql: Fix PlaceHolderVar mechanism's interaction with outer joins. |
Дата | |
Msg-id | E1P0env-0008HY-JL@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix PlaceHolderVar mechanism's interaction with outer joins. The point of a PlaceHolderVar is to allow a non-strict expression to be evaluated below an outer join, after which its value bubbles up like a Var and can be forced to NULL when the outer join's semantics require that. However, there was a serious design oversight in that, namely that we didn't ensure that there was actually a correct place in the plan tree to evaluate the placeholder :-(. It may be necessary to delay evaluation of an outer join to ensure that a placeholder that should be evaluated below the join can be evaluated there. Per recent bug report from Kirill Simonov. Back-patch to 8.4 where the PlaceHolderVar mechanism was introduced. Branch ------ REL9_0_STABLE Details ------- http://git.postgresql.org/gitweb?p=postgresql.git;a=commitdiff;h=4ec15077b2eaa1f7713e4fff87e220a23c772688 Modified Files -------------- src/backend/nodes/copyfuncs.c | 1 + src/backend/nodes/equalfuncs.c | 1 + src/backend/nodes/outfuncs.c | 1 + src/backend/optimizer/plan/analyzejoins.c | 2 + src/backend/optimizer/plan/initsplan.c | 37 +++++ src/backend/optimizer/plan/planmain.c | 23 ++- src/backend/optimizer/util/placeholder.c | 238 +++++++++++++++++++++++++--- src/include/nodes/relation.h | 17 ++- src/include/optimizer/placeholder.h | 5 +- src/test/regress/expected/join.out | 45 ++++++ src/test/regress/sql/join.sql | 40 +++++ 11 files changed, 374 insertions(+), 36 deletions(-)
В списке pgsql-committers по дате отправления: