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 f50453f78a8215c3b73bed321cb46841fd688e2d..abe25e1d5899d218e64feb5d67e8947d31684213 100644 (file)
@@ -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