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