| 1 | /*------------------------------------------------------------------------- | 
|---|
| 2 | * | 
|---|
| 3 | * pg_trigger_d.h | 
|---|
| 4 | *    Macro definitions for pg_trigger | 
|---|
| 5 | * | 
|---|
| 6 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group | 
|---|
| 7 | * Portions Copyright (c) 1994, Regents of the University of California | 
|---|
| 8 | * | 
|---|
| 9 | * NOTES | 
|---|
| 10 | *  ****************************** | 
|---|
| 11 | *  *** DO NOT EDIT THIS FILE! *** | 
|---|
| 12 | *  ****************************** | 
|---|
| 13 | * | 
|---|
| 14 | *  It has been GENERATED by src/backend/catalog/genbki.pl | 
|---|
| 15 | * | 
|---|
| 16 | *------------------------------------------------------------------------- | 
|---|
| 17 | */ | 
|---|
| 18 | #ifndef PG_TRIGGER_D_H | 
|---|
| 19 | #define PG_TRIGGER_D_H | 
|---|
| 20 |  | 
|---|
| 21 | #define TriggerRelationId 2620 | 
|---|
| 22 |  | 
|---|
| 23 | #define Anum_pg_trigger_oid 1 | 
|---|
| 24 | #define Anum_pg_trigger_tgrelid 2 | 
|---|
| 25 | #define Anum_pg_trigger_tgname 3 | 
|---|
| 26 | #define Anum_pg_trigger_tgfoid 4 | 
|---|
| 27 | #define Anum_pg_trigger_tgtype 5 | 
|---|
| 28 | #define Anum_pg_trigger_tgenabled 6 | 
|---|
| 29 | #define Anum_pg_trigger_tgisinternal 7 | 
|---|
| 30 | #define Anum_pg_trigger_tgconstrrelid 8 | 
|---|
| 31 | #define Anum_pg_trigger_tgconstrindid 9 | 
|---|
| 32 | #define Anum_pg_trigger_tgconstraint 10 | 
|---|
| 33 | #define Anum_pg_trigger_tgdeferrable 11 | 
|---|
| 34 | #define Anum_pg_trigger_tginitdeferred 12 | 
|---|
| 35 | #define Anum_pg_trigger_tgnargs 13 | 
|---|
| 36 | #define Anum_pg_trigger_tgattr 14 | 
|---|
| 37 | #define Anum_pg_trigger_tgargs 15 | 
|---|
| 38 | #define Anum_pg_trigger_tgqual 16 | 
|---|
| 39 | #define Anum_pg_trigger_tgoldtable 17 | 
|---|
| 40 | #define Anum_pg_trigger_tgnewtable 18 | 
|---|
| 41 |  | 
|---|
| 42 | #define Natts_pg_trigger 18 | 
|---|
| 43 |  | 
|---|
| 44 |  | 
|---|
| 45 | /* Bits within tgtype */ | 
|---|
| 46 | #define TRIGGER_TYPE_ROW				(1 << 0) | 
|---|
| 47 | #define TRIGGER_TYPE_BEFORE				(1 << 1) | 
|---|
| 48 | #define TRIGGER_TYPE_INSERT				(1 << 2) | 
|---|
| 49 | #define TRIGGER_TYPE_DELETE				(1 << 3) | 
|---|
| 50 | #define TRIGGER_TYPE_UPDATE				(1 << 4) | 
|---|
| 51 | #define TRIGGER_TYPE_TRUNCATE			(1 << 5) | 
|---|
| 52 | #define TRIGGER_TYPE_INSTEAD			(1 << 6) | 
|---|
| 53 |  | 
|---|
| 54 | #define TRIGGER_TYPE_LEVEL_MASK			(TRIGGER_TYPE_ROW) | 
|---|
| 55 | #define TRIGGER_TYPE_STATEMENT			0 | 
|---|
| 56 |  | 
|---|
| 57 | /* Note bits within TRIGGER_TYPE_TIMING_MASK aren't adjacent */ | 
|---|
| 58 | #define TRIGGER_TYPE_TIMING_MASK \ | 
|---|
| 59 | (TRIGGER_TYPE_BEFORE | TRIGGER_TYPE_INSTEAD) | 
|---|
| 60 | #define TRIGGER_TYPE_AFTER				0 | 
|---|
| 61 |  | 
|---|
| 62 | #define TRIGGER_TYPE_EVENT_MASK \ | 
|---|
| 63 | (TRIGGER_TYPE_INSERT | TRIGGER_TYPE_DELETE | TRIGGER_TYPE_UPDATE | TRIGGER_TYPE_TRUNCATE) | 
|---|
| 64 |  | 
|---|
| 65 | /* Macros for manipulating tgtype */ | 
|---|
| 66 | #define TRIGGER_CLEAR_TYPE(type)		((type) = 0) | 
|---|
| 67 |  | 
|---|
| 68 | #define TRIGGER_SETT_ROW(type)			((type) |= TRIGGER_TYPE_ROW) | 
|---|
| 69 | #define TRIGGER_SETT_STATEMENT(type)	((type) |= TRIGGER_TYPE_STATEMENT) | 
|---|
| 70 | #define TRIGGER_SETT_BEFORE(type)		((type) |= TRIGGER_TYPE_BEFORE) | 
|---|
| 71 | #define TRIGGER_SETT_AFTER(type)		((type) |= TRIGGER_TYPE_AFTER) | 
|---|
| 72 | #define TRIGGER_SETT_INSTEAD(type)		((type) |= TRIGGER_TYPE_INSTEAD) | 
|---|
| 73 | #define TRIGGER_SETT_INSERT(type)		((type) |= TRIGGER_TYPE_INSERT) | 
|---|
| 74 | #define TRIGGER_SETT_DELETE(type)		((type) |= TRIGGER_TYPE_DELETE) | 
|---|
| 75 | #define TRIGGER_SETT_UPDATE(type)		((type) |= TRIGGER_TYPE_UPDATE) | 
|---|
| 76 | #define TRIGGER_SETT_TRUNCATE(type)		((type) |= TRIGGER_TYPE_TRUNCATE) | 
|---|
| 77 |  | 
|---|
| 78 | #define TRIGGER_FOR_ROW(type)			((type) & TRIGGER_TYPE_ROW) | 
|---|
| 79 | #define TRIGGER_FOR_BEFORE(type)		(((type) & TRIGGER_TYPE_TIMING_MASK) == TRIGGER_TYPE_BEFORE) | 
|---|
| 80 | #define TRIGGER_FOR_AFTER(type)			(((type) & TRIGGER_TYPE_TIMING_MASK) == TRIGGER_TYPE_AFTER) | 
|---|
| 81 | #define TRIGGER_FOR_INSTEAD(type)		(((type) & TRIGGER_TYPE_TIMING_MASK) == TRIGGER_TYPE_INSTEAD) | 
|---|
| 82 | #define TRIGGER_FOR_INSERT(type)		((type) & TRIGGER_TYPE_INSERT) | 
|---|
| 83 | #define TRIGGER_FOR_DELETE(type)		((type) & TRIGGER_TYPE_DELETE) | 
|---|
| 84 | #define TRIGGER_FOR_UPDATE(type)		((type) & TRIGGER_TYPE_UPDATE) | 
|---|
| 85 | #define TRIGGER_FOR_TRUNCATE(type)		((type) & TRIGGER_TYPE_TRUNCATE) | 
|---|
| 86 |  | 
|---|
| 87 | /* | 
|---|
| 88 | * Efficient macro for checking if tgtype matches a particular level | 
|---|
| 89 | * (TRIGGER_TYPE_ROW or TRIGGER_TYPE_STATEMENT), timing (TRIGGER_TYPE_BEFORE, | 
|---|
| 90 | * TRIGGER_TYPE_AFTER or TRIGGER_TYPE_INSTEAD), and event (TRIGGER_TYPE_INSERT, | 
|---|
| 91 | * TRIGGER_TYPE_DELETE, TRIGGER_TYPE_UPDATE, or TRIGGER_TYPE_TRUNCATE).  Note | 
|---|
| 92 | * that a tgtype can match more than one event, but only one level or timing. | 
|---|
| 93 | */ | 
|---|
| 94 | #define TRIGGER_TYPE_MATCHES(type, level, timing, event) \ | 
|---|
| 95 | (((type) & (TRIGGER_TYPE_LEVEL_MASK | TRIGGER_TYPE_TIMING_MASK | (event))) == ((level) | (timing) | (event))) | 
|---|
| 96 |  | 
|---|
| 97 | /* | 
|---|
| 98 | * Macro to determine whether tgnewtable or tgoldtable has been specified for | 
|---|
| 99 | * a trigger. | 
|---|
| 100 | */ | 
|---|
| 101 | #define TRIGGER_USES_TRANSITION_TABLE(namepointer) \ | 
|---|
| 102 | ((namepointer) != (char *) NULL) | 
|---|
| 103 |  | 
|---|
| 104 |  | 
|---|
| 105 | #endif							/* PG_TRIGGER_D_H */ | 
|---|
| 106 |  | 
|---|