1 /*-------------------------------------------------------------------------
2  *
3  * event_trigger.h
4  *	  Declarations for command trigger handling.
5  *
6  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * src/include/commands/event_trigger.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 #ifndef EVENT_TRIGGER_H
14 #define EVENT_TRIGGER_H
15 
16 #include "catalog/dependency.h"
17 #include "catalog/objectaddress.h"
18 #include "catalog/pg_event_trigger.h"
19 #include "nodes/parsenodes.h"
20 #include "utils/aclchk_internal.h"
21 #include "tcop/deparse_utility.h"
22 
23 typedef struct EventTriggerData
24 {
25 	NodeTag		type;
26 	const char *event;			/* event name */
27 	Node	   *parsetree;		/* parse tree */
28 	const char *tag;			/* command tag */
29 } EventTriggerData;
30 
31 #define AT_REWRITE_ALTER_PERSISTENCE	0x01
32 #define AT_REWRITE_DEFAULT_VAL			0x02
33 #define AT_REWRITE_COLUMN_REWRITE		0x04
34 #define AT_REWRITE_ALTER_OID			0x08
35 
36 /*
37  * EventTriggerData is the node type that is passed as fmgr "context" info
38  * when a function is called by the event trigger manager.
39  */
40 #define CALLED_AS_EVENT_TRIGGER(fcinfo) \
41 	((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData))
42 
43 extern Oid	CreateEventTrigger(CreateEventTrigStmt *stmt);
44 extern void RemoveEventTriggerById(Oid ctrigOid);
45 extern Oid	get_event_trigger_oid(const char *trigname, bool missing_ok);
46 
47 extern Oid	AlterEventTrigger(AlterEventTrigStmt *stmt);
48 extern ObjectAddress AlterEventTriggerOwner(const char *name, Oid newOwnerId);
49 extern void AlterEventTriggerOwner_oid(Oid, Oid newOwnerId);
50 
51 extern bool EventTriggerSupportsObjectType(ObjectType obtype);
52 extern bool EventTriggerSupportsObjectClass(ObjectClass objclass);
53 extern bool EventTriggerSupportsGrantObjectType(GrantObjectType objtype);
54 extern void EventTriggerDDLCommandStart(Node *parsetree);
55 extern void EventTriggerDDLCommandEnd(Node *parsetree);
56 extern void EventTriggerSQLDrop(Node *parsetree);
57 extern void EventTriggerTableRewrite(Node *parsetree, Oid tableOid, int reason);
58 
59 extern bool EventTriggerBeginCompleteQuery(void);
60 extern void EventTriggerEndCompleteQuery(void);
61 extern bool trackDroppedObjectsNeeded(void);
62 extern void EventTriggerSQLDropAddObject(const ObjectAddress *object,
63 							 bool original, bool normal);
64 
65 extern void EventTriggerInhibitCommandCollection(void);
66 extern void EventTriggerUndoInhibitCommandCollection(void);
67 
68 extern void EventTriggerCollectSimpleCommand(ObjectAddress address,
69 								 ObjectAddress secondaryObject,
70 								 Node *parsetree);
71 
72 extern void EventTriggerAlterTableStart(Node *parsetree);
73 extern void EventTriggerAlterTableRelid(Oid objectId);
74 extern void EventTriggerCollectAlterTableSubcmd(Node *subcmd,
75 									ObjectAddress address);
76 extern void EventTriggerAlterTableEnd(void);
77 
78 extern void EventTriggerCollectGrant(InternalGrant *istmt);
79 extern void EventTriggerCollectAlterOpFam(AlterOpFamilyStmt *stmt,
80 							  Oid opfamoid, List *operators,
81 							  List *procedures);
82 extern void EventTriggerCollectCreateOpClass(CreateOpClassStmt *stmt,
83 								 Oid opcoid, List *operators,
84 								 List *procedures);
85 extern void EventTriggerCollectAlterTSConfig(AlterTSConfigurationStmt *stmt,
86 								 Oid cfgId, Oid *dictIds, int ndicts);
87 extern void EventTriggerCollectAlterDefPrivs(AlterDefaultPrivilegesStmt *stmt);
88 
89 #endif							/* EVENT_TRIGGER_H */
90