First phase of plan-invalidation project: create a plan cache management

Tom Lane <tgl@sss.pgh.pa.us>

Commit: b9527e984092e838790b543b014c0c2720ea4f11
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2007-03-13T00:33:44Z
Releases: 8.3.0
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.

Files

PathChange+/−
src/backend/access/transam/xact.c modified +19 −21
src/backend/bootstrap/bootparse.y modified +3 −3
src/backend/commands/cluster.c modified +3 −3
src/backend/commands/copy.c modified +16 −27
src/backend/commands/dbcommands.c modified +1 −6
src/backend/commands/explain.c modified +108 −76
src/backend/commands/indexcmds.c modified +2 −22
src/backend/commands/portalcmds.c modified +39 −29
src/backend/commands/prepare.c modified +294 −257
src/backend/commands/schemacmds.c modified +9 −4
src/backend/commands/tablecmds.c modified +8 −2
src/backend/commands/tablespace.c modified +1 −9
src/backend/commands/vacuum.c modified +7 −6
src/backend/commands/view.c modified +82 −65
src/backend/executor/functions.c modified +21 −24
src/backend/executor/spi.c modified +8 −3
src/backend/nodes/copyfuncs.c modified +1 −3
src/backend/nodes/equalfuncs.c modified +1 −3
src/backend/nodes/outfuncs.c modified +1 −2
src/backend/nodes/params.c modified +32 −1
src/backend/optimizer/util/clauses.c modified +1 −33
src/backend/parser/analyze.c modified +132 −360
src/backend/parser/gram.y modified +8 −8
src/backend/postmaster/autovacuum.c modified +2 −9
src/backend/rewrite/rewriteDefine.c modified +45 −13
src/backend/tcop/postgres.c modified +158 −127
src/backend/tcop/pquery.c modified +35 −39
src/backend/tcop/utility.c modified +54 −51
src/backend/utils/cache/Makefile modified +3 −2
src/backend/utils/cache/plancache.c added +862 −0
src/backend/utils/init/postinit.c modified +4 −2
src/backend/utils/mmgr/mcxt.c modified +2 −3
src/backend/utils/mmgr/portalmem.c modified +52 −34
src/backend/utils/mmgr/README modified +2 −13
src/backend/utils/resowner/README modified +8 −7
src/backend/utils/resowner/resowner.c modified +97 −1
src/include/access/xact.h modified +4 −4
src/include/commands/cluster.h modified +2 −2
src/include/commands/copy.h modified +2 −2
src/include/commands/defrem.h modified +1 −2
src/include/commands/explain.h modified +8 −3
src/include/commands/portalcmds.h modified +3 −2
src/include/commands/prepare.h modified +16 −25
src/include/commands/schemacmds.h modified +3 −2
src/include/commands/vacuum.h modified +2 −2
src/include/commands/view.h modified +2 −2
src/include/nodes/params.h modified +4 −1
src/include/nodes/parsenodes.h modified +7 −11
src/include/parser/analyze.h modified +5 −1
src/include/rewrite/rewriteDefine.h modified +10 −2
src/include/tcop/pquery.h modified +2 −2
src/include/tcop/utility.h modified +4 −3
src/include/utils/memutils.h modified +2 −3
src/include/utils/plancache.h added +105 −0
src/include/utils/portal.h modified +5 −13
src/include/utils/resowner.h modified +9 −1
src/test/regress/expected/plancache.out added +102 −0
src/test/regress/expected/rules.out modified +2 −0
src/test/regress/parallel_schedule modified +2 −2
src/test/regress/serial_schedule modified +2 −1
src/test/regress/sql/plancache.sql added +53 −0