summaryrefslogtreecommitdiff
path: root/src/backend/commands/trigger.c
diff options
context:
space:
mode:
authorTom Lane2005-08-24 17:38:35 +0000
committerTom Lane2005-08-24 17:38:35 +0000
commita0a0bc02b72e6ad4f50470050da7f0c1147e697a (patch)
treec77dc8eb1404fd79c3c12270be816259a70fbf42 /src/backend/commands/trigger.c
parent130b2dd8ead85b9ee74de1e55d233ecbaf22c55d (diff)
Fix ExecBRDeleteTriggers so that deletion is not suppressed when delete
triggers exist but are all disabled. Problem noted by Gavin Sherry in original discussion of enable/disable trigger patch, but was never addressed.
Diffstat (limited to 'src/backend/commands/trigger.c')
-rw-r--r--src/backend/commands/trigger.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index b1d2f4ce0db..b3caaa4ce3c 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
- * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.193 2005/08/23 22:40:08 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.194 2005/08/24 17:38:35 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1492,9 +1492,10 @@ ExecBRDeleteTriggers(EState *estate, ResultRelInfo *relinfo,
TriggerDesc *trigdesc = relinfo->ri_TrigDesc;
int ntrigs = trigdesc->n_before_row[TRIGGER_EVENT_DELETE];
int *tgindx = trigdesc->tg_before_row[TRIGGER_EVENT_DELETE];
+ bool result = true;
TriggerData LocTriggerData;
HeapTuple trigtuple;
- HeapTuple newtuple = NULL;
+ HeapTuple newtuple;
TupleTableSlot *newSlot;
int i;
@@ -1524,13 +1525,16 @@ ExecBRDeleteTriggers(EState *estate, ResultRelInfo *relinfo,
relinfo->ri_TrigInstrument,
GetPerTupleMemoryContext(estate));
if (newtuple == NULL)
+ {
+ result = false; /* tell caller to suppress delete */
break;
+ }
if (newtuple != trigtuple)
heap_freetuple(newtuple);
}
heap_freetuple(trigtuple);
- return (newtuple == NULL) ? false : true;
+ return result;
}
void