pgsql: Postpone extParam/allParam calculations until the very end of pl

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Postpone extParam/allParam calculations until the very end of pl
Дата
Msg-id E1ZPN23-00064Q-RV@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Postpone extParam/allParam calculations until the very end of planning.

Until now we computed these Param ID sets at the end of subquery_planner,
but that approach depends on subquery_planner returning a concrete Plan
tree.  We would like to switch over to returning one or more Paths for a
subquery, and in that representation the necessary details aren't fully
fleshed out (not to mention that we don't really want to do this work for
Paths that end up getting discarded).  Hence, refactor so that we can
compute the param ID sets at the end of planning, just before
set_plan_references is run.

The main change necessary to make this work is that we need to capture
the set of outer-level Param IDs available to the current query level
before exiting subquery_planner, since the outer levels' plan_params lists
are transient.  (That's not going to pose a problem for returning Paths,
since all the work involved in producing that data is part of expression
preprocessing, which will continue to happen before Paths are produced.)
On the plus side, this change gets rid of several existing kluges.

Eventually I'd like to get rid of SS_finalize_plan altogether in favor of
doing this work during set_plan_references, but that will require some
complex rejiggering because SS_finalize_plan needs to visit subplans and
initplans before the main plan.  So leave that idea for another day.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/68fa28f77146653f1fcaa530d2f2f161bf5de479

Modified Files
--------------
src/backend/nodes/outfuncs.c              |    1 +
src/backend/optimizer/plan/createplan.c   |   10 +-
src/backend/optimizer/plan/planagg.c      |   43 +++--
src/backend/optimizer/plan/planner.c      |   37 +++-
src/backend/optimizer/plan/subselect.c    |  266 +++++++++++++++--------------
src/backend/optimizer/prep/prepjointree.c |    1 +
src/include/nodes/relation.h              |    7 +
src/include/optimizer/subselect.h         |    8 +-
src/test/regress/expected/join.out        |   57 +++++++
src/test/regress/sql/join.sql             |   21 +++
10 files changed, 293 insertions(+), 158 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: pgsql: Don't include rel.h when relcache.h is sufficient
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix some possible low-memory failures in regexp compilation.