diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-12-05 15:50:39 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-12-05 15:50:39 +0000 |
| commit | 1fd0c59e25063e664f8a5cee6f723470c5979544 (patch) | |
| tree | d7c1ba5ee25323021a65d0e419299162a9db9c19 /src/backend/executor/README | |
| parent | 0f3b83edfaf65b6105b455f601c11af6e12170ca (diff) | |
| download | postgresql-1fd0c59e25063e664f8a5cee6f723470c5979544.tar.gz | |
Phase 1 of read-only-plans project: cause executor state nodes to point
to plan nodes, not vice-versa. All executor state nodes now inherit from
struct PlanState. Copying of plan trees has been simplified by not
storing a list of SubPlans in Plan nodes (eliminating duplicate links).
The executor still needs such a list, but it can build it during
ExecutorStart since it has to scan the plan tree anyway.
No initdb forced since no stored-on-disk structures changed, but you
will need a full recompile because of node-numbering changes.
Diffstat (limited to 'src/backend/executor/README')
| -rw-r--r-- | src/backend/executor/README | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/backend/executor/README b/src/backend/executor/README index 0a56c3fa6a..d9b0ea1275 100644 --- a/src/backend/executor/README +++ b/src/backend/executor/README @@ -1,4 +1,4 @@ -$Header: /cvsroot/pgsql/src/backend/executor/README,v 1.1 2001/05/15 00:35:50 tgl Exp $ +$Header: /cvsroot/pgsql/src/backend/executor/README,v 1.2 2002/12/05 15:50:30 tgl Exp $ The Postgres Executor --------------------- @@ -39,6 +39,27 @@ delivered by the plan tree. XXX a great deal more documentation needs to be written here... +Plan Trees and State Trees +-------------------------- + +The plan tree delivered by the planner contains a tree of Plan nodes (struct +types derived from struct Plan). Each Plan node may have expression trees +associated with it, to represent its target list, qualification conditions, +etc. During executor startup we build a parallel tree of identical structure +containing executor state nodes --- every plan and expression node type has +a corresponding executor state node type. Each node in the state tree has a +pointer to its corresponding node in the plan tree, plus executor state data +as needed to implement that node type. This arrangement allows the plan +tree to be completely read-only as far as the executor is concerned: all data +that is modified during execution is in the state tree. Read-only plan trees +make life much simpler for plan caching and reuse. + +Altogether there are four classes of nodes used in these trees: Plan nodes, +their corresponding PlanState nodes, Expr nodes, and their corresponding +ExprState nodes. (Actually, there are also List nodes, which are used as +"glue" in all four kinds of tree.) + + EvalPlanQual (READ COMMITTED update checking) --------------------------------------------- |
