1 /*------------------------------------------------------------------------- 2 * 3 * event_trigger.h 4 * Declarations for command trigger handling. 5 * 6 * Portions Copyright (c) 1996-2020, 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 "tcop/cmdtag.h" 21 #include "tcop/deparse_utility.h" 22 #include "utils/aclchk_internal.h" 23 24 typedef struct EventTriggerData 25 { 26 NodeTag type; 27 const char *event; /* event name */ 28 Node *parsetree; /* parse tree */ 29 CommandTag tag; 30 } EventTriggerData; 31 32 #define AT_REWRITE_ALTER_PERSISTENCE 0x01 33 #define AT_REWRITE_DEFAULT_VAL 0x02 34 #define AT_REWRITE_COLUMN_REWRITE 0x04 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 trigOid); 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 void EventTriggerDDLCommandStart(Node *parsetree); 54 extern void EventTriggerDDLCommandEnd(Node *parsetree); 55 extern void EventTriggerSQLDrop(Node *parsetree); 56 extern void EventTriggerTableRewrite(Node *parsetree, Oid tableOid, int reason); 57 58 extern bool EventTriggerBeginCompleteQuery(void); 59 extern void EventTriggerEndCompleteQuery(void); 60 extern bool trackDroppedObjectsNeeded(void); 61 extern void EventTriggerSQLDropAddObject(const ObjectAddress *object, 62 bool original, bool normal); 63 64 extern void EventTriggerInhibitCommandCollection(void); 65 extern void EventTriggerUndoInhibitCommandCollection(void); 66 67 extern void EventTriggerCollectSimpleCommand(ObjectAddress address, 68 ObjectAddress secondaryObject, 69 Node *parsetree); 70 71 extern void EventTriggerAlterTableStart(Node *parsetree); 72 extern void EventTriggerAlterTableRelid(Oid objectId); 73 extern void EventTriggerCollectAlterTableSubcmd(Node *subcmd, 74 ObjectAddress address); 75 extern void EventTriggerAlterTableEnd(void); 76 77 extern void EventTriggerCollectGrant(InternalGrant *istmt); 78 extern void EventTriggerCollectAlterOpFam(AlterOpFamilyStmt *stmt, 79 Oid opfamoid, List *operators, 80 List *procedures); 81 extern void EventTriggerCollectCreateOpClass(CreateOpClassStmt *stmt, 82 Oid opcoid, List *operators, 83 List *procedures); 84 extern void EventTriggerCollectAlterTSConfig(AlterTSConfigurationStmt *stmt, 85 Oid cfgId, Oid *dictIds, int ndicts); 86 extern void EventTriggerCollectAlterDefPrivs(AlterDefaultPrivilegesStmt *stmt); 87 88 #endif /* EVENT_TRIGGER_H */ 89