codekingpro/portable-devtools
114k
1/*-------------------------------------------------------------------------2 *3 * lockoptions.h4 * Common header for some locking-related declarations.5 *6 *7 * Copyright (c) 2014-2023, PostgreSQL Global Development Group8 *9 * src/include/nodes/lockoptions.h10 *11 *-------------------------------------------------------------------------12 */13#ifndef LOCKOPTIONS_H14#define LOCKOPTIONS_H15 16/*17 * This enum represents the different strengths of FOR UPDATE/SHARE clauses.18 * The ordering here is important, because the highest numerical value takes19 * precedence when a RTE is specified multiple ways. See applyLockingClause.20 */21typedef enum LockClauseStrength22{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/SHARE32 * clauses (i.e., it represents the NOWAIT and SKIP LOCKED options).33 * The ordering here is important, because the highest numerical value takes34 * precedence when a RTE is specified multiple ways. See applyLockingClause.35 */36typedef enum LockWaitPolicy37{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 LockWaitError44} LockWaitPolicy;45 46/*47 * Possible lock modes for a tuple.48 */49typedef enum LockTupleMode50{51 /* SELECT FOR KEY SHARE */52 LockTupleKeyShare,53 /* SELECT FOR SHARE */54 LockTupleShare,55 /* SELECT FOR NO KEY UPDATE, and UPDATEs that don't modify key columns */56 LockTupleNoKeyExclusive,57 /* SELECT FOR UPDATE, UPDATEs that modify key columns, and DELETE */58 LockTupleExclusive59} LockTupleMode;60 61#endif /* LOCKOPTIONS_H */62 