Fix ExecBRDeleteTriggers so that deletion is not suppressed when delete
authorTom Lane
Wed, 24 Aug 2005 17:38:35 +0000 (17:38 +0000)
committerTom Lane
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