25 #define CALLED_AS_TRIGGER(fcinfo) \
26 ((fcinfo)->context != NULL && IsA((fcinfo)->context, TriggerData))
50 #define TRIGGER_EVENT_INSERT 0x00000000
51 #define TRIGGER_EVENT_DELETE 0x00000001
52 #define TRIGGER_EVENT_UPDATE 0x00000002
53 #define TRIGGER_EVENT_TRUNCATE 0x00000003
54 #define TRIGGER_EVENT_OPMASK 0x00000003
56 #define TRIGGER_EVENT_ROW 0x00000004
58 #define TRIGGER_EVENT_BEFORE 0x00000008
59 #define TRIGGER_EVENT_AFTER 0x00000000
60 #define TRIGGER_EVENT_INSTEAD 0x00000010
61 #define TRIGGER_EVENT_TIMINGMASK 0x00000018
65 #define AFTER_TRIGGER_DEFERRABLE 0x00000020
66 #define AFTER_TRIGGER_INITDEFERRED 0x00000040
68 #define TRIGGER_FIRED_BY_INSERT(event) \
69 (((event) & TRIGGER_EVENT_OPMASK) == TRIGGER_EVENT_INSERT)
71 #define TRIGGER_FIRED_BY_DELETE(event) \
72 (((event) & TRIGGER_EVENT_OPMASK) == TRIGGER_EVENT_DELETE)
74 #define TRIGGER_FIRED_BY_UPDATE(event) \
75 (((event) & TRIGGER_EVENT_OPMASK) == TRIGGER_EVENT_UPDATE)
77 #define TRIGGER_FIRED_BY_TRUNCATE(event) \
78 (((event) & TRIGGER_EVENT_OPMASK) == TRIGGER_EVENT_TRUNCATE)
80 #define TRIGGER_FIRED_FOR_ROW(event) \
81 ((event) & TRIGGER_EVENT_ROW)
83 #define TRIGGER_FIRED_FOR_STATEMENT(event) \
84 (!TRIGGER_FIRED_FOR_ROW(event))
86 #define TRIGGER_FIRED_BEFORE(event) \
87 (((event) & TRIGGER_EVENT_TIMINGMASK) == TRIGGER_EVENT_BEFORE)
89 #define TRIGGER_FIRED_AFTER(event) \
90 (((event) & TRIGGER_EVENT_TIMINGMASK) == TRIGGER_EVENT_AFTER)
92 #define TRIGGER_FIRED_INSTEAD(event) \
93 (((event) & TRIGGER_EVENT_TIMINGMASK) == TRIGGER_EVENT_INSTEAD)
98 #define SESSION_REPLICATION_ROLE_ORIGIN 0
99 #define SESSION_REPLICATION_ROLE_REPLICA 1
100 #define SESSION_REPLICATION_ROLE_LOCAL 2
107 #define TRIGGER_FIRES_ON_ORIGIN 'O'
108 #define TRIGGER_FIRES_ALWAYS 'A'
109 #define TRIGGER_FIRES_ON_REPLICA 'R'
110 #define TRIGGER_DISABLED 'D'
113 Oid relOid,
Oid refRelOid,
Oid constraintOid,
Oid indexOid,
122 char fires_when,
bool skip_system);
140 List *recheckIndexes);
175 List *recheckIndexes);
207 #define RI_TRIGGER_PK 1
208 #define RI_TRIGGER_FK 2
209 #define RI_TRIGGER_NONE 0
void ExecARInsertTriggers(EState *estate, ResultRelInfo *relinfo, HeapTuple trigtuple, List *recheckIndexes)
void ExecBSDeleteTriggers(EState *estate, ResultRelInfo *relinfo)
void AfterTriggerBeginSubXact(void)
bool RI_Initial_Check(Trigger *trigger, Relation fk_rel, Relation pk_rel)
void ExecASUpdateTriggers(EState *estate, ResultRelInfo *relinfo)
TupleTableSlot * ExecIRUpdateTriggers(EState *estate, ResultRelInfo *relinfo, HeapTuple trigtuple, TupleTableSlot *slot)
void ExecASDeleteTriggers(EState *estate, ResultRelInfo *relinfo)
void ExecASInsertTriggers(EState *estate, ResultRelInfo *relinfo)
TupleTableSlot * ExecIRInsertTriggers(EState *estate, ResultRelInfo *relinfo, TupleTableSlot *slot)
void ExecBSInsertTriggers(EState *estate, ResultRelInfo *relinfo)
Oid get_trigger_oid(Oid relid, const char *name, bool missing_ok)
void AfterTriggerEndXact(bool isCommit)
bool AfterTriggerPendingOnRel(Oid relid)
void ExecARDeleteTriggers(EState *estate, ResultRelInfo *relinfo, ItemPointer tupleid, HeapTuple fdw_trigtuple)
Datum pg_trigger_depth(PG_FUNCTION_ARGS)
void RelationBuildTriggers(Relation relation)
void ExecBSTruncateTriggers(EState *estate, ResultRelInfo *relinfo)
void EnableDisableTrigger(Relation rel, const char *tgname, char fires_when, bool skip_system)
void ExecASTruncateTriggers(EState *estate, ResultRelInfo *relinfo)
void AfterTriggerBeginQuery(void)
PGDLLIMPORT int SessionReplicationRole
int RI_FKey_trigger_type(Oid tgfoid)
void AfterTriggerEndSubXact(bool isCommit)
TriggerDesc * CopyTriggerDesc(TriggerDesc *trigdesc)
ObjectAddress CreateTrigger(CreateTrigStmt *stmt, const char *queryString, Oid relOid, Oid refRelOid, Oid constraintOid, Oid indexOid, bool isInternal)
void RemoveTriggerById(Oid trigOid)
void AfterTriggerEndQuery(EState *estate)
void FreeTriggerDesc(TriggerDesc *trigdesc)
ObjectAddress renametrig(RenameStmt *stmt)
void ExecBSUpdateTriggers(EState *estate, ResultRelInfo *relinfo)
TupleTableSlot * ExecBRUpdateTriggers(EState *estate, EPQState *epqstate, ResultRelInfo *relinfo, ItemPointer tupleid, HeapTuple fdw_trigtuple, TupleTableSlot *slot)
struct TriggerData TriggerData
void AfterTriggerFireDeferred(void)
bool ExecBRDeleteTriggers(EState *estate, EPQState *epqstate, ResultRelInfo *relinfo, ItemPointer tupleid, HeapTuple fdw_trigtuple)
void ExecARUpdateTriggers(EState *estate, ResultRelInfo *relinfo, ItemPointer tupleid, HeapTuple fdw_trigtuple, HeapTuple newtuple, List *recheckIndexes)
bool RI_FKey_fk_upd_check_required(Trigger *trigger, Relation fk_rel, HeapTuple old_row, HeapTuple new_row)
bool ExecIRDeleteTriggers(EState *estate, ResultRelInfo *relinfo, HeapTuple trigtuple)
void AfterTriggerBeginXact(void)
TupleTableSlot * ExecBRInsertTriggers(EState *estate, ResultRelInfo *relinfo, TupleTableSlot *slot)
bool RI_FKey_pk_upd_check_required(Trigger *trigger, Relation pk_rel, HeapTuple old_row, HeapTuple new_row)
void AfterTriggerSetState(ConstraintsSetStmt *stmt)