From 9fac5fd741ec17ae24dde6b8e82064f13c148ddf Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 15 Mar 2015 15:19:04 -0400
Subject: [PATCH] Move LockClauseStrength, LockWaitPolicy into new file
 nodes/lockoptions.h.

Commit df630b0dd5ea2de52972d456f5978a012436115e 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.
---
 src/include/access/heapam.h        |  2 +-
 src/include/executor/executor.h    |  1 -
 src/include/nodes/lockoptions.h    | 45 ++++++++++++++++++++++++++++++
 src/include/nodes/parsenodes.h     | 11 +-------
 src/include/nodes/plannodes.h      |  2 +-
 src/include/utils/lockwaitpolicy.h | 31 --------------------
 6 files changed, 48 insertions(+), 44 deletions(-)
 create mode 100644 src/include/nodes/lockoptions.h
 delete mode 100644 src/include/utils/lockwaitpolicy.h

diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h
index 939d93d66be..888cce7a2d8 100644
--- a/src/include/access/heapam.h
+++ b/src/include/access/heapam.h
@@ -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"
 
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index 40fde83a20b..c1e74779561 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -16,7 +16,6 @@
 
 #include "executor/execdesc.h"
 #include "nodes/parsenodes.h"
-#include "utils/lockwaitpolicy.h"
 
 
 /*
diff --git a/src/include/nodes/lockoptions.h b/src/include/nodes/lockoptions.h
new file mode 100644
index 00000000000..55324baf40f
--- /dev/null
+++ b/src/include/nodes/lockoptions.h
@@ -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 */
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index 38ed661122d..50e98291bda 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -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;
diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h
index f6683f05e30..af44ddf5dc5 100644
--- a/src/include/nodes/plannodes.h
+++ b/src/include/nodes/plannodes.h
@@ -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"
 
 
 /* ----------------------------------------------------------------
diff --git a/src/include/utils/lockwaitpolicy.h b/src/include/utils/lockwaitpolicy.h
deleted file mode 100644
index 92fc20fbfa8..00000000000
--- a/src/include/utils/lockwaitpolicy.h
+++ /dev/null
@@ -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 */
-- 
GitLab