]> granicus.if.org Git - postgresql/commitdiff
Fix ExecBRDeleteTriggers so that deletion is not suppressed when delete
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 24 Aug 2005 17:38:35 +0000 (17:38 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 24 Aug 2005 17:38:35 +0000 (17:38 +0000)
triggers exist but are all disabled.  Problem noted by Gavin Sherry in
original discussion of enable/disable trigger patch, but was never
addressed.

src/backend/commands/trigger.c

index b1d2f4ce0dbe66a7222a1f4184f1d1c64364eab2..b3caaa4ce3cf0025ed6f619d26ed0720275d3f06 100644 (file)
@@ -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