1 /*-------------------------------------------------------------------------
2  *
3  * reltrigger.h
4  *	  POSTGRES relation trigger definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/utils/reltrigger.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef RELTRIGGER_H
15 #define RELTRIGGER_H
16 
17 
18 /*
19  * These struct really belongs to trigger.h, but we put it separately so that
20  * it can be cleanly included in rel.h and other places.
21  */
22 
23 typedef struct Trigger
24 {
25 	Oid			tgoid;			/* OID of trigger (pg_trigger row) */
26 	/* Remaining fields are copied from pg_trigger, see pg_trigger.h */
27 	char	   *tgname;
28 	Oid			tgfoid;
29 	int16		tgtype;
30 	char		tgenabled;
31 	bool		tgisinternal;
32 	Oid			tgconstrrelid;
33 	Oid			tgconstrindid;
34 	Oid			tgconstraint;
35 	bool		tgdeferrable;
36 	bool		tginitdeferred;
37 	int16		tgnargs;
38 	int16		tgnattr;
39 	int16	   *tgattr;
40 	char	  **tgargs;
41 	char	   *tgqual;
42 	char	   *tgoldtable;
43 	char	   *tgnewtable;
44 } Trigger;
45 
46 typedef struct TriggerDesc
47 {
48 	Trigger    *triggers;		/* array of Trigger structs */
49 	int			numtriggers;	/* number of array entries */
50 
51 	/*
52 	 * These flags indicate whether the array contains at least one of each
53 	 * type of trigger.  We use these to skip searching the array if not.
54 	 */
55 	bool		trig_insert_before_row;
56 	bool		trig_insert_after_row;
57 	bool		trig_insert_instead_row;
58 	bool		trig_insert_before_statement;
59 	bool		trig_insert_after_statement;
60 	bool		trig_update_before_row;
61 	bool		trig_update_after_row;
62 	bool		trig_update_instead_row;
63 	bool		trig_update_before_statement;
64 	bool		trig_update_after_statement;
65 	bool		trig_delete_before_row;
66 	bool		trig_delete_after_row;
67 	bool		trig_delete_instead_row;
68 	bool		trig_delete_before_statement;
69 	bool		trig_delete_after_statement;
70 	/* there are no row-level truncate triggers */
71 	bool		trig_truncate_before_statement;
72 	bool		trig_truncate_after_statement;
73 	/* Is there at least one trigger specifying each transition relation? */
74 	bool		trig_insert_new_table;
75 	bool		trig_update_old_table;
76 	bool		trig_update_new_table;
77 	bool		trig_delete_old_table;
78 } TriggerDesc;
79 
80 #endif							/* RELTRIGGER_H */
81