From e3cb455a42c12f090eb284c174c0bd345434966c Mon Sep 17 00:00:00 2001
From: David Steele <david@pgmasters.net>
Date: Thu, 1 Aug 2024 15:00:25 +0700
Subject: [PATCH 1/2] Remove support for PG <= 11.

---
 README.md           |  15 +++---
 src/compatibility.h | 123 ++++++++++----------------------------------
 2 files changed, 36 insertions(+), 102 deletions(-)

diff --git a/README.md b/README.md
index b52522c..9138b3f 100644
--- a/README.md
+++ b/README.md
@@ -270,7 +270,8 @@ variety of nefarious or otherwise undesireable actions. However, these actions
 will be logged providing an audit trail, which could also be used to trigger
 alerts.
 
-This extension supports PostgreSQL versions 9.4 and higher.
+This extension supports PostgreSQL versions 12 and higher. Prior versions of
+PostgreSQL are supported by prior versions of set_user.
 
 ##  Post-Execution Hooks
 
@@ -744,19 +745,19 @@ psql (15.4)
 Type "help" for help.
 
 test=> select session_user, current_user, user, current_role;
- session_user | current_user |   user   | current_role 
+ session_user | current_user |   user   | current_role
 --------------+--------------+----------+--------------
  dbclient     | dbclient     | dbclient | dbclient
 (1 row)
 
 test=> select set_session_auth('jeff');
- set_session_auth 
+ set_session_auth
 ------------------
  OK
 (1 row)
 
 test=> select session_user, current_user, user, current_role;
- session_user | current_user | user | current_role 
+ session_user | current_user | user | current_role
 --------------+--------------+------+--------------
  jeff         | jeff         | jeff | jeff
 (1 row)
@@ -765,7 +766,7 @@ test=> -- the role switch is irrevocable
 test=> reset role;
 RESET
 test=> select session_user, current_user, user, current_role;
- session_user | current_user | user | current_role 
+ session_user | current_user | user | current_role
 --------------+--------------+------+--------------
  jeff         | jeff         | jeff | jeff
 (1 row)
@@ -773,7 +774,7 @@ test=> select session_user, current_user, user, current_role;
 test=> reset session authorization;
 RESET
 test=> select session_user, current_user, user, current_role;
- session_user | current_user | user | current_role 
+ session_user | current_user | user | current_role
 --------------+--------------+------+--------------
  jeff         | jeff         | jeff | jeff
 (1 row)
@@ -781,7 +782,7 @@ test=> select session_user, current_user, user, current_role;
 test=> set role none;
 SET
 test=> select session_user, current_user, user, current_role;
- session_user | current_user | user | current_role 
+ session_user | current_user | user | current_role
 --------------+--------------+------+--------------
  jeff         | jeff         | jeff | jeff
 (1 row)
diff --git a/src/compatibility.h b/src/compatibility.h
index 0b5a6c2..fa50f8c 100644
--- a/src/compatibility.h
+++ b/src/compatibility.h
@@ -83,6 +83,25 @@
  * - Removes OID column
  */
 #if PG_VERSION_NUM >= 120000
+
+#ifndef _PU_HOOK
+#define _PU_HOOK \
+	static void PU_hook(PlannedStmt *pstmt, const char *queryString, \
+						ProcessUtilityContext context, ParamListInfo params, \
+						QueryEnvironment *queryEnv, \
+						DestReceiver *dest, char *completionTag)
+
+#define _prev_hook \
+	prev_hook(pstmt, queryString, context, params, queryEnv, dest, completionTag)
+
+#define _standard_ProcessUtility \
+	standard_ProcessUtility(pstmt, queryString, context, params, queryEnv, dest, completionTag)
+
+#endif
+
+#include "utils/varlena.h"
+#define parsetree ((Node *) pstmt->utilityStmt)
+
 #define HEAP_TUPLE_GET_OID
 
 /*
@@ -112,97 +131,6 @@ _heap_tuple_get_oid(HeapTuple tuple, Oid catalogID)
 
 #include "access/table.h"
 #define OBJECTADDRESS
-#endif /* 12+ */
-
-/*
- * PostgreSQL version 10+
- *
- * - Introduces PlannedStmt struct
- * - Introduces varlena.h
- */
-#if PG_VERSION_NUM >= 100000
-#ifndef _PU_HOOK
-#define _PU_HOOK \
-	static void PU_hook(PlannedStmt *pstmt, const char *queryString, \
-						ProcessUtilityContext context, ParamListInfo params, \
-						QueryEnvironment *queryEnv, \
-						DestReceiver *dest, char *completionTag)
-
-#define _prev_hook \
-	prev_hook(pstmt, queryString, context, params, queryEnv, dest, completionTag)
-
-#define _standard_ProcessUtility \
-	standard_ProcessUtility(pstmt, queryString, context, params, queryEnv, dest, completionTag)
-
-#endif
-
-#include "utils/varlena.h"
-#define parsetree ((Node *) pstmt->utilityStmt)
-
-#endif /* 10+ */
-
-/*
- * PostgreSQL version 9.5+
- *
- * - Introduces two-argument GetUserNameFromId
- */
-#if PG_VERSION_NUM >= 90500
-#define GETUSERNAMEFROMID(ouserid) GetUserNameFromId(ouserid, false)
-
-#ifndef INITSESSIONUSER
-#define INITSESSIONUSER
-#define _InitializeSessionUserId(name,ouserid) InitializeSessionUserId(name,ouserid)
-#endif
-
-#endif /* 9.5+ */
-
-/*
- * PostgreSQL version 9.4+
- *
- * Lowest supported version.
- */
-#if PG_VERSION_NUM >= 90400
-#ifndef _PU_HOOK
-#define _PU_HOOK \
-	static void PU_hook(Node *parsetree, const char *queryString, \
-						ProcessUtilityContext context, ParamListInfo params, \
-						DestReceiver *dest, char *completionTag)
-
-#define _prev_hook \
-	prev_hook(parsetree, queryString, context, params, dest, completionTag)
-
-#define _standard_ProcessUtility \
-	standard_ProcessUtility(parsetree, queryString, context, params, dest, completionTag)
-#endif
-
-#ifndef GETUSERNAMEFROMID
-#define GETUSERNAMEFROMID(ouserid) GetUserNameFromId(ouserid)
-#endif
-
-# ifndef HEAP_TUPLE_GET_OID
-static inline Oid
-_heap_tuple_get_oid(HeapTuple tup, Oid catalogId)
-{
-	return HeapTupleGetOid(tup);
-}
-# endif
-
-#ifndef TABLEOPEN
-#define table_open(r, l)	heap_open(r, l)
-#define table_close(r, l)	heap_close(r, l)
-#endif
-
-#include "access/heapam.h"
-
-#ifndef OBJECTADDRESS
-#include "utils/tqual.h"
-#endif
-
-#ifndef Anum_pg_proc_oid
-#include "access/sysattr.h"
-#define Anum_pg_proc_oid ObjectIdAttributeNumber
-#define Anum_pg_authid_oid ObjectIdAttributeNumber
-#endif
 
 /*
  * _scan_key_init
@@ -228,14 +156,19 @@ _scan_key_init(ScanKey entry,
         }
 }
 
+// Introduces two-argument GetUserNameFromId
+#define GETUSERNAMEFROMID(ouserid) GetUserNameFromId(ouserid, false)
+
 #ifndef INITSESSIONUSER
-#define _InitializeSessionUserId(name,ouserid) InitializeSessionUserId(name)
+#define INITSESSIONUSER
+#define _InitializeSessionUserId(name,ouserid) InitializeSessionUserId(name,ouserid)
+
 #endif
 
-#endif /* 9.4 */
+#endif /* 12+ */
 
-#if !defined(PG_VERSION_NUM) || PG_VERSION_NUM < 90400
-#error "This extension only builds with PostgreSQL 9.4 or later"
+#if !defined(PG_VERSION_NUM) || PG_VERSION_NUM < 120000
+#error "This extension only builds with PostgreSQL 12 or later"
 #endif
 
 /* Use our version-specific static declaration here */

From 90ba7a0d1e5ecc1edb7d7a87bd5a7bddebbeea17 Mon Sep 17 00:00:00 2001
From: David Steele <david@pgmasters.net>
Date: Thu, 1 Aug 2024 15:21:49 +0700
Subject: [PATCH 2/2] Revert whitespace noise.

---
 README.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 9138b3f..03f2990 100644
--- a/README.md
+++ b/README.md
@@ -745,19 +745,19 @@ psql (15.4)
 Type "help" for help.
 
 test=> select session_user, current_user, user, current_role;
- session_user | current_user |   user   | current_role
+ session_user | current_user |   user   | current_role 
 --------------+--------------+----------+--------------
  dbclient     | dbclient     | dbclient | dbclient
 (1 row)
 
 test=> select set_session_auth('jeff');
- set_session_auth
+ set_session_auth 
 ------------------
  OK
 (1 row)
 
 test=> select session_user, current_user, user, current_role;
- session_user | current_user | user | current_role
+ session_user | current_user | user | current_role 
 --------------+--------------+------+--------------
  jeff         | jeff         | jeff | jeff
 (1 row)
@@ -766,7 +766,7 @@ test=> -- the role switch is irrevocable
 test=> reset role;
 RESET
 test=> select session_user, current_user, user, current_role;
- session_user | current_user | user | current_role
+ session_user | current_user | user | current_role 
 --------------+--------------+------+--------------
  jeff         | jeff         | jeff | jeff
 (1 row)
@@ -774,7 +774,7 @@ test=> select session_user, current_user, user, current_role;
 test=> reset session authorization;
 RESET
 test=> select session_user, current_user, user, current_role;
- session_user | current_user | user | current_role
+ session_user | current_user | user | current_role 
 --------------+--------------+------+--------------
  jeff         | jeff         | jeff | jeff
 (1 row)
@@ -782,7 +782,7 @@ test=> select session_user, current_user, user, current_role;
 test=> set role none;
 SET
 test=> select session_user, current_user, user, current_role;
- session_user | current_user | user | current_role
+ session_user | current_user | user | current_role 
 --------------+--------------+------+--------------
  jeff         | jeff         | jeff | jeff
 (1 row)