| 1 | /*------------------------------------------------------------------------- | 
| 2 |  * | 
| 3 |  * lockdefs.h | 
| 4 |  *	   Frontend exposed parts of postgres' low level lock mechanism | 
| 5 |  * | 
| 6 |  * The split between lockdefs.h and lock.h is not very principled. This file | 
| 7 |  * contains definition that have to (indirectly) be available when included by | 
| 8 |  * FRONTEND code. | 
| 9 |  * | 
| 10 |  * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group | 
| 11 |  * Portions Copyright (c) 1994, Regents of the University of California | 
| 12 |  * | 
| 13 |  * src/include/storage/lockdefs.h | 
| 14 |  * | 
| 15 |  *------------------------------------------------------------------------- | 
| 16 |  */ | 
| 17 | #ifndef LOCKDEFS_H_ | 
| 18 | #define LOCKDEFS_H_ | 
| 19 |  | 
| 20 | /* | 
| 21 |  * LOCKMODE is an integer (1..N) indicating a lock type.  LOCKMASK is a bit | 
| 22 |  * mask indicating a set of held or requested lock types (the bit 1<<mode | 
| 23 |  * corresponds to a particular lock mode). | 
| 24 |  */ | 
| 25 | typedef int LOCKMASK; | 
| 26 | typedef int LOCKMODE; | 
| 27 |  | 
| 28 | /* | 
| 29 |  * These are the valid values of type LOCKMODE for all the standard lock | 
| 30 |  * methods (both DEFAULT and USER). | 
| 31 |  */ | 
| 32 |  | 
| 33 | /* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */ | 
| 34 | #define NoLock					0 | 
| 35 |  | 
| 36 | #define AccessShareLock			1	/* SELECT */ | 
| 37 | #define RowShareLock			2	/* SELECT FOR UPDATE/FOR SHARE */ | 
| 38 | #define RowExclusiveLock		3	/* INSERT, UPDATE, DELETE */ | 
| 39 | #define ShareUpdateExclusiveLock 4	/* VACUUM (non-FULL),ANALYZE, CREATE INDEX | 
| 40 | 									 * CONCURRENTLY */ | 
| 41 | #define ShareLock				5	/* CREATE INDEX (WITHOUT CONCURRENTLY) */ | 
| 42 | #define ShareRowExclusiveLock	6	/* like EXCLUSIVE MODE, but allows ROW | 
| 43 | 									 * SHARE */ | 
| 44 | #define ExclusiveLock			7	/* blocks ROW SHARE/SELECT...FOR UPDATE */ | 
| 45 | #define AccessExclusiveLock		8	/* ALTER TABLE, DROP TABLE, VACUUM FULL, | 
| 46 | 									 * and unqualified LOCK TABLE */ | 
| 47 |  | 
| 48 | #define MaxLockMode				8 | 
| 49 |  | 
| 50 |  | 
| 51 | /* WAL representation of an AccessExclusiveLock on a table */ | 
| 52 | typedef struct xl_standby_lock | 
| 53 | { | 
| 54 | 	TransactionId xid;			/* xid of holder of AccessExclusiveLock */ | 
| 55 | 	Oid			dbOid;			/* DB containing table */ | 
| 56 | 	Oid			relOid;			/* OID of table */ | 
| 57 | } xl_standby_lock; | 
| 58 |  | 
| 59 | #endif							/* LOCKDEF_H_ */ | 
| 60 |  |