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 | |