Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit283e18a

Browse files
committed
BEFORE/AFTER ROW INSERT/DELETE/UPDATE triggers startup.
1 parent8c79853 commit283e18a

File tree

1 file changed

+69
-3
lines changed

1 file changed

+69
-3
lines changed

‎src/backend/executor/execMain.c

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*
2727
*
2828
* IDENTIFICATION
29-
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.20 1997/08/27 09:02:24 vadim Exp $
29+
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.21 1997/09/01 08:01:46 vadim Exp $
3030
*
3131
*-------------------------------------------------------------------------
3232
*/
@@ -51,6 +51,7 @@
5151
#include"optimizer/var.h"
5252
#include"access/heapam.h"
5353
#include"catalog/heap.h"
54+
#include"commands/trigger.h"
5455

5556

5657

@@ -917,7 +918,26 @@ ExecAppend(TupleTableSlot *slot,
917918
* cim -12/1/89
918919
* ----------------
919920
*/
920-
921+
922+
/* BEFORE ROW INSERT Triggers */
923+
if (resultRelationDesc->trigdesc&&
924+
resultRelationDesc->trigdesc->n_before_row[TRIGGER_ACTION_INSERT]>0 )
925+
{
926+
HeapTuplenewtuple;
927+
928+
newtuple=ExecBRInsertTriggers (resultRelationDesc,tuple);
929+
930+
if (newtuple==NULL )/* "do nothing" */
931+
return;
932+
933+
if (newtuple!=tuple )/* modified by Trigger(s) */
934+
{
935+
Assert (slot->ttc_shouldFree );
936+
pfree (tuple);
937+
slot->val=tuple=newtuple;
938+
}
939+
}
940+
921941
/* ----------------
922942
* Check the constraints of a tuple
923943
* ----------------
@@ -959,6 +979,11 @@ ExecAppend(TupleTableSlot *slot,
959979
}
960980
(estate->es_processed)++;
961981
estate->es_lastoid=newId;
982+
983+
/* AFTER ROW INSERT Triggers */
984+
if (resultRelationDesc->trigdesc&&
985+
resultRelationDesc->trigdesc->n_after_row[TRIGGER_ACTION_INSERT]>0 )
986+
ExecARInsertTriggers (resultRelationDesc,tuple);
962987
}
963988

964989
/* ----------------------------------------------------------------
@@ -982,7 +1007,19 @@ ExecDelete(TupleTableSlot *slot,
9821007
*/
9831008
resultRelationInfo=estate->es_result_relation_info;
9841009
resultRelationDesc=resultRelationInfo->ri_RelationDesc;
985-
1010+
1011+
/* BEFORE ROW DELETE Triggers */
1012+
if (resultRelationDesc->trigdesc&&
1013+
resultRelationDesc->trigdesc->n_before_row[TRIGGER_ACTION_DELETE]>0 )
1014+
{
1015+
booldodelete;
1016+
1017+
dodelete=ExecBRDeleteTriggers (resultRelationDesc,tupleid);
1018+
1019+
if ( !dodelete )/* "do nothing" */
1020+
return;
1021+
}
1022+
9861023
/* ----------------
9871024
*delete the tuple
9881025
* ----------------
@@ -1005,6 +1042,11 @@ ExecDelete(TupleTableSlot *slot,
10051042
* when it finds deleted heap tuples. -cim 9/27/89
10061043
* ----------------
10071044
*/
1045+
1046+
/* AFTER ROW DELETE Triggers */
1047+
if (resultRelationDesc->trigdesc&&
1048+
resultRelationDesc->trigdesc->n_after_row[TRIGGER_ACTION_DELETE]>0 )
1049+
ExecARDeleteTriggers (resultRelationDesc,tupleid);
10081050

10091051
}
10101052

@@ -1059,6 +1101,25 @@ ExecReplace(TupleTableSlot *slot,
10591101
* cim -12/1/89
10601102
* ----------------
10611103
*/
1104+
1105+
/* BEFORE ROW UPDATE Triggers */
1106+
if (resultRelationDesc->trigdesc&&
1107+
resultRelationDesc->trigdesc->n_before_row[TRIGGER_ACTION_UPDATE]>0 )
1108+
{
1109+
HeapTuplenewtuple;
1110+
1111+
newtuple=ExecBRUpdateTriggers (resultRelationDesc,tupleid,tuple);
1112+
1113+
if (newtuple==NULL )/* "do nothing" */
1114+
return;
1115+
1116+
if (newtuple!=tuple )/* modified by Trigger(s) */
1117+
{
1118+
Assert (slot->ttc_shouldFree );
1119+
pfree (tuple);
1120+
slot->val=tuple=newtuple;
1121+
}
1122+
}
10621123

10631124
/* ----------------
10641125
* Check the constraints of a tuple
@@ -1122,6 +1183,11 @@ ExecReplace(TupleTableSlot *slot,
11221183
if (numIndices>0) {
11231184
ExecInsertIndexTuples(slot,&(tuple->t_ctid),estate, true);
11241185
}
1186+
1187+
/* AFTER ROW UPDATE Triggers */
1188+
if (resultRelationDesc->trigdesc&&
1189+
resultRelationDesc->trigdesc->n_after_row[TRIGGER_ACTION_UPDATE]>0 )
1190+
ExecARUpdateTriggers (resultRelationDesc,tupleid,tuple);
11251191
}
11261192

11271193
staticHeapTuple

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp