First phase of plan-invalidation project: create a plan cache management
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 13 Mar 2007 00:33:44 +0000 (00:33 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 13 Mar 2007 00:33:44 +0000 (00:33 +0000)
commitb9527e984092e838790b543b014c0c2720ea4f11
tree60a6063280d446701e1b93e1149eaeb9ce13a128
parentf84308f1958313f6cd1644d74b6a8ff49a871f8d
First phase of plan-invalidation project: create a plan cache management
module and teach PREPARE and protocol-level prepared statements to use it.
In service of this, rearrange utility-statement processing so that parse
analysis does not assume table schemas can't change before execution for
utility statements (necessary because we don't attempt to re-acquire locks
for utility statements when reusing a stored plan).  This requires some
refactoring of the ProcessUtility API, but it ends up cleaner anyway,
for instance we can get rid of the QueryContext global.

Still to do: fix up SPI and related code to use the plan cache; I'm tempted to
try to make SQL functions use it too.  Also, there are at least some aspects
of system state that we want to ensure remain the same during a replan as in
the original processing; search_path certainly ought to behave that way for
instance, and perhaps there are others.
61 files changed:
src/backend/access/transam/xact.c
src/backend/bootstrap/bootparse.y
src/backend/commands/cluster.c
src/backend/commands/copy.c
src/backend/commands/dbcommands.c
src/backend/commands/explain.c
src/backend/commands/indexcmds.c
src/backend/commands/portalcmds.c
src/backend/commands/prepare.c
src/backend/commands/schemacmds.c
src/backend/commands/tablecmds.c
src/backend/commands/tablespace.c
src/backend/commands/vacuum.c
src/backend/commands/view.c
src/backend/executor/functions.c
src/backend/executor/spi.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/nodes/outfuncs.c
src/backend/nodes/params.c
src/backend/optimizer/util/clauses.c
src/backend/parser/analyze.c
src/backend/parser/gram.y
src/backend/postmaster/autovacuum.c
src/backend/rewrite/rewriteDefine.c
src/backend/tcop/postgres.c
src/backend/tcop/pquery.c
src/backend/tcop/utility.c
src/backend/utils/cache/Makefile
src/backend/utils/cache/plancache.c [new file with mode: 0644]
src/backend/utils/init/postinit.c
src/backend/utils/mmgr/README
src/backend/utils/mmgr/mcxt.c
src/backend/utils/mmgr/portalmem.c
src/backend/utils/resowner/README
src/backend/utils/resowner/resowner.c
src/include/access/xact.h
src/include/commands/cluster.h
src/include/commands/copy.h
src/include/commands/defrem.h
src/include/commands/explain.h
src/include/commands/portalcmds.h
src/include/commands/prepare.h
src/include/commands/schemacmds.h
src/include/commands/vacuum.h
src/include/commands/view.h
src/include/nodes/params.h
src/include/nodes/parsenodes.h
src/include/parser/analyze.h
src/include/rewrite/rewriteDefine.h
src/include/tcop/pquery.h
src/include/tcop/utility.h
src/include/utils/memutils.h
src/include/utils/plancache.h [new file with mode: 0644]
src/include/utils/portal.h
src/include/utils/resowner.h
src/test/regress/expected/plancache.out [new file with mode: 0644]
src/test/regress/expected/rules.out
src/test/regress/parallel_schedule
src/test/regress/serial_schedule
src/test/regress/sql/plancache.sql [new file with mode: 0644]