Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
pg_trigger.h154 linesDownload Raw Back to catalog
1/*-------------------------------------------------------------------------2 *3 * pg_trigger.h4 *	  definition of the "trigger" system catalog (pg_trigger)5 *6 *7 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group8 * Portions Copyright (c) 1994, Regents of the University of California9 *10 * src/include/catalog/pg_trigger.h11 *12 * NOTES13 *	  The Catalog.pm module reads this file and derives schema14 *	  information.15 *16 *-------------------------------------------------------------------------17 */18#ifndef PG_TRIGGER_H19#define PG_TRIGGER_H20 21#include "catalog/genbki.h"22#include "catalog/pg_trigger_d.h"23 24/* ----------------25 *		pg_trigger definition.  cpp turns this into26 *		typedef struct FormData_pg_trigger27 *28 * Note: when tgconstraint is nonzero, tgconstrrelid, tgconstrindid,29 * tgdeferrable, and tginitdeferred are largely redundant with the referenced30 * pg_constraint entry.  However, it is possible for a non-deferrable trigger31 * to be associated with a deferrable constraint.32 * ----------------33 */34CATALOG(pg_trigger,2620,TriggerRelationId)35{36	Oid			oid;			/* oid */37	Oid			tgrelid BKI_LOOKUP(pg_class);	/* relation trigger is38												 * attached to */39	Oid			tgparentid BKI_LOOKUP_OPT(pg_trigger);	/* OID of parent40														 * trigger, if any */41	NameData	tgname;			/* trigger's name */42	Oid			tgfoid BKI_LOOKUP(pg_proc); /* OID of function to be called */43	int16		tgtype;			/* BEFORE/AFTER/INSTEAD, UPDATE/DELETE/INSERT,44								 * ROW/STATEMENT; see below */45	char		tgenabled;		/* trigger's firing configuration WRT46								 * session_replication_role */47	bool		tgisinternal;	/* trigger is system-generated */48	Oid			tgconstrrelid BKI_LOOKUP_OPT(pg_class); /* constraint's FROM49														 * table, if any */50	Oid			tgconstrindid BKI_LOOKUP_OPT(pg_class); /* constraint's51														 * supporting index, if52														 * any */53	Oid			tgconstraint BKI_LOOKUP_OPT(pg_constraint); /* associated54															 * pg_constraint entry,55															 * if any */56	bool		tgdeferrable;	/* constraint trigger is deferrable */57	bool		tginitdeferred; /* constraint trigger is deferred initially */58	int16		tgnargs;		/* # of extra arguments in tgargs */59 60	/*61	 * Variable-length fields start here, but we allow direct access to62	 * tgattr. Note: tgattr and tgargs must not be null.63	 */64	int2vector	tgattr BKI_FORCE_NOT_NULL;	/* column numbers, if trigger is65											 * on columns */66 67#ifdef CATALOG_VARLEN68	bytea		tgargs BKI_FORCE_NOT_NULL;	/* first\000second\000tgnargs\000 */69	pg_node_tree tgqual;		/* WHEN expression, or NULL if none */70	NameData	tgoldtable;		/* old transition table, or NULL if none */71	NameData	tgnewtable;		/* new transition table, or NULL if none */72#endif73} FormData_pg_trigger;74 75/* ----------------76 *		Form_pg_trigger corresponds to a pointer to a tuple with77 *		the format of pg_trigger relation.78 * ----------------79 */80typedef FormData_pg_trigger *Form_pg_trigger;81 82DECLARE_TOAST(pg_trigger, 2336, 2337);83 84DECLARE_INDEX(pg_trigger_tgconstraint_index, 2699, TriggerConstraintIndexId, on pg_trigger using btree(tgconstraint oid_ops));85DECLARE_UNIQUE_INDEX(pg_trigger_tgrelid_tgname_index, 2701, TriggerRelidNameIndexId, on pg_trigger using btree(tgrelid oid_ops, tgname name_ops));86DECLARE_UNIQUE_INDEX_PKEY(pg_trigger_oid_index, 2702, TriggerOidIndexId, on pg_trigger using btree(oid oid_ops));87 88DECLARE_ARRAY_FOREIGN_KEY((tgrelid, tgattr), pg_attribute, (attrelid, attnum));89 90#ifdef EXPOSE_TO_CLIENT_CODE91 92/* Bits within tgtype */93#define TRIGGER_TYPE_ROW				(1 << 0)94#define TRIGGER_TYPE_BEFORE				(1 << 1)95#define TRIGGER_TYPE_INSERT				(1 << 2)96#define TRIGGER_TYPE_DELETE				(1 << 3)97#define TRIGGER_TYPE_UPDATE				(1 << 4)98#define TRIGGER_TYPE_TRUNCATE			(1 << 5)99#define TRIGGER_TYPE_INSTEAD			(1 << 6)100 101#define TRIGGER_TYPE_LEVEL_MASK			(TRIGGER_TYPE_ROW)102#define TRIGGER_TYPE_STATEMENT			0103 104/* Note bits within TRIGGER_TYPE_TIMING_MASK aren't adjacent */105#define TRIGGER_TYPE_TIMING_MASK \106	(TRIGGER_TYPE_BEFORE | TRIGGER_TYPE_INSTEAD)107#define TRIGGER_TYPE_AFTER				0108 109#define TRIGGER_TYPE_EVENT_MASK \110	(TRIGGER_TYPE_INSERT | TRIGGER_TYPE_DELETE | TRIGGER_TYPE_UPDATE | TRIGGER_TYPE_TRUNCATE)111 112/* Macros for manipulating tgtype */113#define TRIGGER_CLEAR_TYPE(type)		((type) = 0)114 115#define TRIGGER_SETT_ROW(type)			((type) |= TRIGGER_TYPE_ROW)116#define TRIGGER_SETT_STATEMENT(type)	((type) |= TRIGGER_TYPE_STATEMENT)117#define TRIGGER_SETT_BEFORE(type)		((type) |= TRIGGER_TYPE_BEFORE)118#define TRIGGER_SETT_AFTER(type)		((type) |= TRIGGER_TYPE_AFTER)119#define TRIGGER_SETT_INSTEAD(type)		((type) |= TRIGGER_TYPE_INSTEAD)120#define TRIGGER_SETT_INSERT(type)		((type) |= TRIGGER_TYPE_INSERT)121#define TRIGGER_SETT_DELETE(type)		((type) |= TRIGGER_TYPE_DELETE)122#define TRIGGER_SETT_UPDATE(type)		((type) |= TRIGGER_TYPE_UPDATE)123#define TRIGGER_SETT_TRUNCATE(type)		((type) |= TRIGGER_TYPE_TRUNCATE)124 125#define TRIGGER_FOR_ROW(type)			((type) & TRIGGER_TYPE_ROW)126#define TRIGGER_FOR_BEFORE(type)		(((type) & TRIGGER_TYPE_TIMING_MASK) == TRIGGER_TYPE_BEFORE)127#define TRIGGER_FOR_AFTER(type)			(((type) & TRIGGER_TYPE_TIMING_MASK) == TRIGGER_TYPE_AFTER)128#define TRIGGER_FOR_INSTEAD(type)		(((type) & TRIGGER_TYPE_TIMING_MASK) == TRIGGER_TYPE_INSTEAD)129#define TRIGGER_FOR_INSERT(type)		((type) & TRIGGER_TYPE_INSERT)130#define TRIGGER_FOR_DELETE(type)		((type) & TRIGGER_TYPE_DELETE)131#define TRIGGER_FOR_UPDATE(type)		((type) & TRIGGER_TYPE_UPDATE)132#define TRIGGER_FOR_TRUNCATE(type)		((type) & TRIGGER_TYPE_TRUNCATE)133 134/*135 * Efficient macro for checking if tgtype matches a particular level136 * (TRIGGER_TYPE_ROW or TRIGGER_TYPE_STATEMENT), timing (TRIGGER_TYPE_BEFORE,137 * TRIGGER_TYPE_AFTER or TRIGGER_TYPE_INSTEAD), and event (TRIGGER_TYPE_INSERT,138 * TRIGGER_TYPE_DELETE, TRIGGER_TYPE_UPDATE, or TRIGGER_TYPE_TRUNCATE).  Note139 * that a tgtype can match more than one event, but only one level or timing.140 */141#define TRIGGER_TYPE_MATCHES(type, level, timing, event) \142	(((type) & (TRIGGER_TYPE_LEVEL_MASK | TRIGGER_TYPE_TIMING_MASK | (event))) == ((level) | (timing) | (event)))143 144/*145 * Macro to determine whether tgnewtable or tgoldtable has been specified for146 * a trigger.147 */148#define TRIGGER_USES_TRANSITION_TABLE(namepointer) \149	((namepointer) != (char *) NULL)150 151#endif							/* EXPOSE_TO_CLIENT_CODE */152 153#endif							/* PG_TRIGGER_H */154 
codekingpro/portable-devtools · Team Ai