postgresql/src/include/nodes/lockoptions.h
Bruce Momjian 29275b1d17 Update copyright for 2024
Reported-by: Michael Paquier

Discussion: https://postgr.es/m/ZZKTDPxBBMt3C0J9@paquier.xyz

Backpatch-through: 12
2024-01-03 20:49:05 -05:00

61 lines
1.8 KiB
C

/*-------------------------------------------------------------------------
*
* lockoptions.h
* Common header for some locking-related declarations.
*
*
* Copyright (c) 2014-2024, PostgreSQL Global Development Group
*
* src/include/nodes/lockoptions.h
*
*-------------------------------------------------------------------------
*/
#ifndef LOCKOPTIONS_H
#define LOCKOPTIONS_H
/*
* This enum represents the different strengths of FOR UPDATE/SHARE clauses.
* The ordering here is important, because the highest numerical value takes
* precedence when a RTE is specified multiple ways. See applyLockingClause.
*/
typedef enum LockClauseStrength
{
LCS_NONE, /* no such clause - only used in PlanRowMark */
LCS_FORKEYSHARE, /* FOR KEY SHARE */
LCS_FORSHARE, /* FOR SHARE */
LCS_FORNOKEYUPDATE, /* FOR NO KEY UPDATE */
LCS_FORUPDATE, /* FOR UPDATE */
} LockClauseStrength;
/*
* This enum controls how to deal with rows being locked by FOR UPDATE/SHARE
* clauses (i.e., it represents the NOWAIT and SKIP LOCKED options).
* The ordering here is important, because the highest numerical value takes
* precedence when a RTE is specified multiple ways. See applyLockingClause.
*/
typedef enum LockWaitPolicy
{
/* Wait for the lock to become available (default behavior) */
LockWaitBlock,
/* Skip rows that can't be locked (SKIP LOCKED) */
LockWaitSkip,
/* Raise an error if a row cannot be locked (NOWAIT) */
LockWaitError,
} LockWaitPolicy;
/*
* Possible lock modes for a tuple.
*/
typedef enum LockTupleMode
{
/* SELECT FOR KEY SHARE */
LockTupleKeyShare,
/* SELECT FOR SHARE */
LockTupleShare,
/* SELECT FOR NO KEY UPDATE, and UPDATEs that don't modify key columns */
LockTupleNoKeyExclusive,
/* SELECT FOR UPDATE, UPDATEs that modify key columns, and DELETE */
LockTupleExclusive,
} LockTupleMode;
#endif /* LOCKOPTIONS_H */