aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/execMain.c
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1997-09-01 08:01:46 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1997-09-01 08:01:46 +0000
commit283e18ab0ea7f029315e6cf60fe17a46ea20f6b6 (patch)
treefeedb22ed03abf5d4027e8fc60e7ce293c43204c /src/backend/executor/execMain.c
parent8c798538b8d81a5ada0d83e7bcd3923891b58d79 (diff)
downloadpostgresql-283e18ab0ea7f029315e6cf60fe17a46ea20f6b6.tar.gz
postgresql-283e18ab0ea7f029315e6cf60fe17a46ea20f6b6.zip
BEFORE/AFTER ROW INSERT/DELETE/UPDATE triggers startup.
Diffstat (limited to 'src/backend/executor/execMain.c')
-rw-r--r--src/backend/executor/execMain.c72
1 files changed, 69 insertions, 3 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 62e76e6cfb7..6f0a7a2e1a4 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.20 1997/08/27 09:02:24 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.21 1997/09/01 08:01:46 vadim Exp $
*
*-------------------------------------------------------------------------
*/
@@ -51,6 +51,7 @@
#include "optimizer/var.h"
#include "access/heapam.h"
#include "catalog/heap.h"
+#include "commands/trigger.h"
@@ -917,7 +918,26 @@ ExecAppend(TupleTableSlot *slot,
* cim -12/1/89
* ----------------
*/
-
+
+ /* BEFORE ROW INSERT Triggers */
+ if ( resultRelationDesc->trigdesc &&
+ resultRelationDesc->trigdesc->n_before_row[TRIGGER_ACTION_INSERT] > 0 )
+ {
+ HeapTuple newtuple;
+
+ newtuple = ExecBRInsertTriggers (resultRelationDesc, tuple);
+
+ if ( newtuple == NULL ) /* "do nothing" */
+ return;
+
+ if ( newtuple != tuple ) /* modified by Trigger(s) */
+ {
+ Assert ( slot->ttc_shouldFree );
+ pfree (tuple);
+ slot->val = tuple = newtuple;
+ }
+ }
+
/* ----------------
* Check the constraints of a tuple
* ----------------
@@ -959,6 +979,11 @@ ExecAppend(TupleTableSlot *slot,
}
(estate->es_processed)++;
estate->es_lastoid = newId;
+
+ /* AFTER ROW INSERT Triggers */
+ if ( resultRelationDesc->trigdesc &&
+ resultRelationDesc->trigdesc->n_after_row[TRIGGER_ACTION_INSERT] > 0 )
+ ExecARInsertTriggers (resultRelationDesc, tuple);
}
/* ----------------------------------------------------------------
@@ -982,7 +1007,19 @@ ExecDelete(TupleTableSlot *slot,
*/
resultRelationInfo = estate->es_result_relation_info;
resultRelationDesc = resultRelationInfo->ri_RelationDesc;
-
+
+ /* BEFORE ROW DELETE Triggers */
+ if ( resultRelationDesc->trigdesc &&
+ resultRelationDesc->trigdesc->n_before_row[TRIGGER_ACTION_DELETE] > 0 )
+ {
+ bool dodelete;
+
+ dodelete = ExecBRDeleteTriggers (resultRelationDesc, tupleid);
+
+ if ( !dodelete ) /* "do nothing" */
+ return;
+ }
+
/* ----------------
* delete the tuple
* ----------------
@@ -1005,6 +1042,11 @@ ExecDelete(TupleTableSlot *slot,
* when it finds deleted heap tuples. -cim 9/27/89
* ----------------
*/
+
+ /* AFTER ROW DELETE Triggers */
+ if ( resultRelationDesc->trigdesc &&
+ resultRelationDesc->trigdesc->n_after_row[TRIGGER_ACTION_DELETE] > 0 )
+ ExecARDeleteTriggers (resultRelationDesc, tupleid);
}
@@ -1059,6 +1101,25 @@ ExecReplace(TupleTableSlot *slot,
* cim -12/1/89
* ----------------
*/
+
+ /* BEFORE ROW UPDATE Triggers */
+ if ( resultRelationDesc->trigdesc &&
+ resultRelationDesc->trigdesc->n_before_row[TRIGGER_ACTION_UPDATE] > 0 )
+ {
+ HeapTuple newtuple;
+
+ newtuple = ExecBRUpdateTriggers (resultRelationDesc, tupleid, tuple);
+
+ if ( newtuple == NULL ) /* "do nothing" */
+ return;
+
+ if ( newtuple != tuple ) /* modified by Trigger(s) */
+ {
+ Assert ( slot->ttc_shouldFree );
+ pfree (tuple);
+ slot->val = tuple = newtuple;
+ }
+ }
/* ----------------
* Check the constraints of a tuple
@@ -1122,6 +1183,11 @@ ExecReplace(TupleTableSlot *slot,
if (numIndices > 0) {
ExecInsertIndexTuples(slot, &(tuple->t_ctid), estate, true);
}
+
+ /* AFTER ROW UPDATE Triggers */
+ if ( resultRelationDesc->trigdesc &&
+ resultRelationDesc->trigdesc->n_after_row[TRIGGER_ACTION_UPDATE] > 0 )
+ ExecARUpdateTriggers (resultRelationDesc, tupleid, tuple);
}
static HeapTuple