1 /*-------------------------------------------------------------------------
2  *
3  * lockoptions.h
4  *	  Common header for some locking-related declarations.
5  *
6  *
7  * Copyright (c) 2014-2015, PostgreSQL Global Development Group
8  *
9  * src/include/nodes/lockoptions.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 #ifndef LOCKOPTIONS_H
14 #define LOCKOPTIONS_H
15 
16 /*
17  * This enum represents the different strengths of FOR UPDATE/SHARE clauses.
18  * The ordering here is important, because the highest numerical value takes
19  * precedence when a RTE is specified multiple ways.  See applyLockingClause.
20  */
21 typedef enum LockClauseStrength
22 {
23 	LCS_NONE,					/* no such clause - only used in PlanRowMark */
24 	LCS_FORKEYSHARE,			/* FOR KEY SHARE */
25 	LCS_FORSHARE,				/* FOR SHARE */
26 	LCS_FORNOKEYUPDATE,			/* FOR NO KEY UPDATE */
27 	LCS_FORUPDATE				/* FOR UPDATE */
28 } LockClauseStrength;
29 
30 /*
31  * This enum controls how to deal with rows being locked by FOR UPDATE/SHARE
32  * clauses (i.e., it represents the NOWAIT and SKIP LOCKED options).
33  * The ordering here is important, because the highest numerical value takes
34  * precedence when a RTE is specified multiple ways.  See applyLockingClause.
35  */
36 typedef enum LockWaitPolicy
37 {
38 	/* Wait for the lock to become available (default behavior) */
39 	LockWaitBlock,
40 	/* Skip rows that can't be locked (SKIP LOCKED) */
41 	LockWaitSkip,
42 	/* Raise an error if a row cannot be locked (NOWAIT) */
43 	LockWaitError
44 } LockWaitPolicy;
45 
46 #endif   /* LOCKOPTIONS_H */
47