diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-11-15 19:43:47 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-11-15 19:43:47 +0000 |
commit | 0656ed3daa29b00c7c41ad44b407a7165f83d453 (patch) | |
tree | 2167bd78fa501c3ffed1d0de842ded643c32500b /src/backend/rewrite/rewriteManip.c | |
parent | 07c179a82b39ffbc172175382717706d90c714cd (diff) | |
download | postgresql-0656ed3daa29b00c7c41ad44b407a7165f83d453.tar.gz postgresql-0656ed3daa29b00c7c41ad44b407a7165f83d453.zip |
Make SELECT FOR UPDATE/SHARE work on inheritance trees, by having the plan
return the tableoid as well as the ctid for any FOR UPDATE targets that
have child tables. All child tables are listed in the ExecRowMark list,
but the executor just skips the ones that didn't produce the current row.
Curiously, this longstanding restriction doesn't seem to have been documented
anywhere; so no doc changes.
Diffstat (limited to 'src/backend/rewrite/rewriteManip.c')
-rw-r--r-- | src/backend/rewrite/rewriteManip.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 0322c58f3f0..954e21af181 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/rewrite/rewriteManip.c,v 1.117 2008/10/22 20:17:52 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/rewrite/rewriteManip.c,v 1.118 2008/11/15 19:43:46 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -352,6 +352,7 @@ OffsetVarNodes(Node *node, int offset, int sublevels_up) RowMarkClause *rc = (RowMarkClause *) lfirst(l); rc->rti += offset; + rc->prti += offset; } } query_tree_walker(qry, OffsetVarNodes_walker, @@ -536,6 +537,8 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up) if (rc->rti == rt_index) rc->rti = new_index; + if (rc->prti == rt_index) + rc->prti = new_index; } } query_tree_walker(qry, ChangeVarNodes_walker, |