agora inbox for [email protected]  
help / color / mirror / Atom feed
[PATCH v14 8/8] Allow to print raw parse tree.
59+ messages / 2 participants
[nested] [flat]

* [PATCH v14 8/8] Allow to print raw parse tree.
@ 2024-02-28 13:59  Tatsuo Ishii <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Tatsuo Ishii @ 2024-02-28 13:59 UTC (permalink / raw)

---
 src/backend/tcop/postgres.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 59ab812d2e..e433ddafe0 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -652,6 +652,10 @@ pg_parse_query(const char *query_string)
 	}
 #endif
 
+	if (Debug_print_parse)
+		elog_node_display(LOG, "raw parse tree", raw_parsetree_list,
+						  Debug_pretty_print);
+
 	TRACE_POSTGRESQL_QUERY_PARSE_DONE(query_string);
 
 	return raw_parsetree_list;
-- 
2.25.1


----Next_Part(Thu_Feb_29_09_19_54_2024_640)----





^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread

* [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition
@ 2026-07-01 10:31  Jonathan Gonzalez V. <[email protected]>
  0 siblings, 0 replies; 59+ messages in thread

From: Jonathan Gonzalez V. @ 2026-07-01 10:31 UTC (permalink / raw)

There was three separated definition of the function making lcov v2.x fail
with an error.
---
 src/interfaces/libpq/fe-auth-oauth.c | 61 +++++++++++-----------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth-oauth.c b/src/interfaces/libpq/fe-auth-oauth.c
index 826f7461cb3..7a35647feb8 100644
--- a/src/interfaces/libpq/fe-auth-oauth.c
+++ b/src/interfaces/libpq/fe-auth-oauth.c
@@ -833,41 +833,42 @@ cleanup_oauth_flow(PGconn *conn)
  * failure, and positive indicates success.
  */
 
-#if !defined(USE_LIBCURL)
+#if defined(USE_LIBCURL) && defined(USE_DYNAMIC_OAUTH)
 
 /*
- * This configuration doesn't support the builtin flow.
+ * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
  */
 
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
-	return 0;
-}
+typedef char *(*libpq_gettext_func) (const char *msgid);
 
-#elif defined(USE_DYNAMIC_OAUTH)
+#elif defined(USE_LIBCURL)
 
 /*
- * Use the builtin flow in the libpq-oauth plugin, which is loaded at runtime.
+ * For static builds, we can just call pg_start_oauthbearer() directly. It's
+ * provided by libpq-oauth.a.
  */
+extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
 
-typedef char *(*libpq_gettext_func) (const char *msgid);
+#endif
 
-/*
- * Loads the libpq-oauth plugin via dlopen(), initializes it, and plugs its
- * callbacks into the connection's async auth handlers.
- *
- * Failure to load here results in a relatively quiet connection error, to
- * handle the use case where the build supports loading a flow but a user does
- * not want to install it. Troubleshooting of linker/loader failures can be done
- * via PGOAUTHDEBUG.
- *
- * The lifetime of *request ends shortly after this call, so it must be copied
- * to longer-lived storage.
- */
 static int
 use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
 {
+#if !defined(USE_LIBCURL)
+	return 0;
+#elif defined(USE_DYNAMIC_OAUTH)
+	/*
+	 * Load the libpq-oauth plugin via dlopen(), initialize it, and plug its
+	 * callbacks into the connection's async auth handlers.
+	 *
+	 * Failure to load here results in a relatively quiet connection error, to
+	 * handle the use case where the build supports loading a flow but a user
+	 * does not want to install it. Troubleshooting of linker/loader failures
+	 * can be done via PGOAUTHDEBUG.
+	 *
+	 * The lifetime of *request ends shortly after this call, so it must be
+	 * copied to longer-lived storage.
+	 */
 	static bool initialized = false;
 	static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
 	int			lockerr;
@@ -976,24 +977,10 @@ use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *re
 	}
 
 	return (start_flow(conn, request) == 0) ? 1 : -1;
-}
-
 #else
-
-/*
- * For static builds, we can just call pg_start_oauthbearer() directly. It's
- * provided by libpq-oauth.a.
- */
-
-extern int	pg_start_oauthbearer(PGconn *conn, PGoauthBearerRequestV2 *request);
-
-static int
-use_builtin_flow(PGconn *conn, fe_oauth_state *state, PGoauthBearerRequestV2 *request)
-{
 	return (pg_start_oauthbearer(conn, request) == 0) ? 1 : -1;
-}
-
 #endif							/* USE_LIBCURL */
+}
 
 
 /*
-- 
2.53.0


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=v1-0002-Collapse-SH_CREATE-into-a-single-definition.patch



^ permalink  raw  reply  [nested|flat] 59+ messages in thread


end of thread, other threads:[~2026-07-01 10:31 UTC | newest]

Thread overview: 59+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2024-02-28 13:59 [PATCH v14 8/8] Allow to print raw parse tree. Tatsuo Ishii <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>
2026-07-01 10:31 [PATCH v1 1/2] libpq-oauth: collapse use_builtin_flow() into a single definition Jonathan Gonzalez V. <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox