Move LockClauseStrength, LockWaitPolicy into new file nodes/lockoptions.h.

Commit df630b0dd5 moved enum LockWaitPolicy
into its very own header file utils/lockwaitpolicy.h, which does not seem
like a great idea from here.  First, it's still a node-related declaration,
and second, a file named like that can never sensibly be used for anything
else.  I do not think we want to encourage a one-typedef-per-header-file
approach.  The upcoming foreign table inheritance patch was doubling down
on this bad idea by moving enum LockClauseStrength into its *own*
can-never-be-used-for-anything-else file.  Instead, let's put them both in
a file named nodes/lockoptions.h.  (They do seem to need a separate header
file because we need them in both parsenodes.h and plannodes.h, and we
don't want either of those including the other.  Past practice might
suggest adding them to nodes/nodes.h, but they don't seem sufficiently
globally useful to justify that.)

Committed separately since there's no functional change here, just some
header-file refactoring.
This commit is contained in:
Tom Lane 2015-03-15 15:19:04 -04:00
parent 8008959773
commit 9fac5fd741
6 changed files with 48 additions and 44 deletions

View File

@ -16,10 +16,10 @@
#include "access/sdir.h"
#include "access/skey.h"
#include "nodes/lockoptions.h"
#include "nodes/primnodes.h"
#include "storage/bufpage.h"
#include "storage/lock.h"
#include "utils/lockwaitpolicy.h"
#include "utils/relcache.h"
#include "utils/snapshot.h"

View File

@ -16,7 +16,6 @@
#include "executor/execdesc.h"
#include "nodes/parsenodes.h"
#include "utils/lockwaitpolicy.h"
/*

View File

@ -0,0 +1,45 @@
/*-------------------------------------------------------------------------
*
* lockoptions.h
* Common header for some locking-related declarations.
*
*
* Copyright (c) 2014-2015, 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_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;
#endif /* LOCKOPTIONS_H */

View File

@ -21,9 +21,9 @@
#define PARSENODES_H
#include "nodes/bitmapset.h"
#include "nodes/lockoptions.h"
#include "nodes/primnodes.h"
#include "nodes/value.h"
#include "utils/lockwaitpolicy.h"
/* Possible sources of a Query */
typedef enum QuerySource
@ -645,15 +645,6 @@ typedef struct DefElem
* a location field --- currently, parse analysis insists on unqualified
* names in LockingClause.)
*/
typedef enum LockClauseStrength
{
/* order is important -- see applyLockingClause */
LCS_FORKEYSHARE,
LCS_FORSHARE,
LCS_FORNOKEYUPDATE,
LCS_FORUPDATE
} LockClauseStrength;
typedef struct LockingClause
{
NodeTag type;

View File

@ -17,8 +17,8 @@
#include "access/sdir.h"
#include "lib/stringinfo.h"
#include "nodes/bitmapset.h"
#include "nodes/lockoptions.h"
#include "nodes/primnodes.h"
#include "utils/lockwaitpolicy.h"
/* ----------------------------------------------------------------

View File

@ -1,31 +0,0 @@
/*-------------------------------------------------------------------------
* lockwaitpolicy.h
* Header file for LockWaitPolicy enum.
*
* Copyright (c) 2014-2015, PostgreSQL Global Development Group
*
* src/include/utils/lockwaitpolicy.h
*-------------------------------------------------------------------------
*/
#ifndef LOCKWAITPOLICY_H
#define LOCKWAITPOLICY_H
/*
* This enum controls how to deal with rows being locked by FOR UPDATE/SHARE
* clauses (i.e., NOWAIT and SKIP LOCKED clauses). The ordering here is
* important, because the highest numerical value takes precedence when a
* RTE is specified multiple ways. See applyLockingClause.
*/
typedef enum
{
/* 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;
#endif /* LOCKWAITPOLICY_H */