diff options
author | Jan Wieck <JanWieck@Yahoo.com> | 1999-09-29 16:06:40 +0000 |
---|---|---|
committer | Jan Wieck <JanWieck@Yahoo.com> | 1999-09-29 16:06:40 +0000 |
commit | 1547ee017c897725221d0752af4477121524c05b (patch) | |
tree | 775616278865cba3e01e521812d045489e40fd9b /src/include/commands/trigger.h | |
parent | d810338d29bff178101e72c810c9dcfa3223c6c0 (diff) | |
download | postgresql-1547ee017c897725221d0752af4477121524c05b.tar.gz postgresql-1547ee017c897725221d0752af4477121524c05b.zip |
This is part #1 for of the DEFERRED CONSTRAINT TRIGGER support.
Implements the CREATE CONSTRAINT TRIGGER and SET CONSTRAINTS commands.
TODO:
Generic builtin trigger procedures
Automatic execution of appropriate CREATE CONSTRAINT... at CREATE TABLE
Support of new trigger type in pg_dump
Swapping of huge # of events to disk
Jan
Diffstat (limited to 'src/include/commands/trigger.h')
-rw-r--r-- | src/include/commands/trigger.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/include/commands/trigger.h b/src/include/commands/trigger.h index 99350d55d13..8ab4342fa7a 100644 --- a/src/include/commands/trigger.h +++ b/src/include/commands/trigger.h @@ -32,6 +32,13 @@ extern DLLIMPORT TriggerData *CurrentTriggerData; #define TRIGGER_EVENT_ROW 0x00000004 #define TRIGGER_EVENT_BEFORE 0x00000008 +#define TRIGGER_DEFERRED_DONE 0x00000010 +#define TRIGGER_DEFERRED_CANCELED 0x00000020 +#define TRIGGER_DEFERRED_DEFERRABLE 0x00000040 +#define TRIGGER_DEFERRED_INITDEFERRED 0x00000080 +#define TRIGGER_DEFERRED_HAS_BEFORE 0x00000100 +#define TRIGGER_DEFERRED_MASK 0x000001F0 + #define TRIGGER_FIRED_BY_INSERT(event) \ (((TriggerEvent) (event) & TRIGGER_EVENT_OPMASK) == \ TRIGGER_EVENT_INSERT) @@ -68,4 +75,46 @@ extern void ExecARDeleteTriggers(EState *estate, ItemPointer tupleid); extern HeapTuple ExecBRUpdateTriggers(EState *estate, ItemPointer tupleid, HeapTuple tuple); extern void ExecARUpdateTriggers(EState *estate, ItemPointer tupleid, HeapTuple tuple); + + +/* ---------- + * Deferred trigger stuff + * ---------- + */ +typedef struct DeferredTriggerStatusData { + Oid dts_tgoid; + bool dts_tgisdeferred; +} DeferredTriggerStatusData; +typedef struct DeferredTriggerStatusData *DeferredTriggerStatus; + + +typedef struct DeferredTriggerEventItem { + Oid dti_tgoid; + int32 dti_state; +} DeferredTriggerEventItem; + + +typedef struct DeferredTriggerEventData { + int32 dte_event; + Oid dte_relid; + ItemPointerData dte_oldctid; + ItemPointerData dte_newctid; + int32 dte_n_items; + DeferredTriggerEventItem dte_item[1]; +} DeferredTriggerEventData; +typedef struct DeferredTriggerEventData *DeferredTriggerEvent; + + +extern int DeferredTriggerInit(void); +extern void DeferredTriggerBeginXact(void); +extern void DeferredTriggerEndQuery(void); +extern void DeferredTriggerEndXact(void); +extern void DeferredTriggerAbortXact(void); + +extern void DeferredTriggerSetState(ConstraintsSetStmt *stmt); + +extern void DeferredTriggerSaveEvent(Relation rel, int event, + HeapTuple oldtup, HeapTuple newtup); + + #endif /* TRIGGER_H */ |