aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-09-23 22:57:44 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-09-23 22:57:44 +0000
commit233ecca7c91b900984faf6f8cfdeec75589778ae (patch)
treeb812f3b80088d074cea22d762ac6edf0b6e08866
parent0d3be98ae9524e78d51d259f4fae00850e987e9d (diff)
downloadpostgresql-233ecca7c91b900984faf6f8cfdeec75589778ae.tar.gz
postgresql-233ecca7c91b900984faf6f8cfdeec75589778ae.zip
Further thinking about heap_mark4update: in HeapTupleSelfUpdated case,
executor should not return the tuple as successfully marked, because in fact it's been deleted. Not clear that this case has ever been seen in practice (I think you'd have to write a SELECT FOR UPDATE that calls a function that deletes some row the SELECT will visit later...) but we should be consistent. Also add comments to several other places that got it right but didn't explain what they were doing.
-rw-r--r--src/backend/commands/trigger.c3
-rw-r--r--src/backend/executor/execMain.c7
2 files changed, 8 insertions, 2 deletions
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index eb78fe484a3..fcc16c4342c 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.132 2002/09/21 18:39:25 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.133 2002/09/23 22:57:44 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1209,6 +1209,7 @@ ltrmark:;
switch (test)
{
case HeapTupleSelfUpdated:
+ /* treat it as deleted; do not process */
ReleaseBuffer(buffer);
return (NULL);
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 300c415a015..370d7e52ec3 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -27,7 +27,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.178 2002/09/04 20:31:17 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.179 2002/09/23 22:57:44 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1032,6 +1032,9 @@ lnext: ;
switch (test)
{
case HeapTupleSelfUpdated:
+ /* treat it as deleted; do not process */
+ goto lnext;
+
case HeapTupleMayBeUpdated:
break;
@@ -1303,6 +1306,7 @@ ldelete:;
switch (result)
{
case HeapTupleSelfUpdated:
+ /* already deleted by self; nothing to do */
return;
case HeapTupleMayBeUpdated:
@@ -1437,6 +1441,7 @@ lreplace:;
switch (result)
{
case HeapTupleSelfUpdated:
+ /* already deleted by self; nothing to do */
return;
case HeapTupleMayBeUpdated: