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