01-PQconninfo-v3.patch
text/x-patch
Filename: 01-PQconninfo-v3.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch v3
| File | + | − |
|---|---|---|
| src/interfaces/libpq/exports.txt | 1 | 0 |
| src/interfaces/libpq/fe-connect.c | 83 | 0 |
| src/interfaces/libpq/libpq-fe.h | 3 | 0 |
diff -durpN postgresql/src/interfaces/libpq/exports.txt postgresql.1/src/interfaces/libpq/exports.txt
--- postgresql/src/interfaces/libpq/exports.txt 2012-08-03 09:39:30.118266598 +0200
+++ postgresql.1/src/interfaces/libpq/exports.txt 2012-10-03 17:17:06.344766325 +0200
@@ -161,3 +161,4 @@ PQping 158
PQpingParams 159
PQlibVersion 160
PQsetSingleRowMode 161
+PQconninfo 162
diff -durpN postgresql/src/interfaces/libpq/fe-connect.c postgresql.1/src/interfaces/libpq/fe-connect.c
--- postgresql/src/interfaces/libpq/fe-connect.c 2012-09-09 08:11:09.470401480 +0200
+++ postgresql.1/src/interfaces/libpq/fe-connect.c 2012-10-03 15:46:44.357491440 +0200
@@ -318,6 +318,8 @@ static char *conninfo_uri_decode(const c
static bool get_hexdigit(char digit, int *value);
static const char *conninfo_getval(PQconninfoOption *connOptions,
const char *keyword);
+static void conninfo_setval(PQconninfoOption *connOptions,
+ const char *keyword, const char *val);
static PQconninfoOption *conninfo_storeval(PQconninfoOption *connOptions,
const char *keyword, const char *value,
PQExpBuffer errorMessage, bool ignoreMissing, bool uri_decode);
@@ -4985,6 +4987,24 @@ conninfo_getval(PQconninfoOption *connOp
}
/*
+ * Set an option value corresponding to the keyword in the connOptions array.
+ */
+static void
+conninfo_setval(PQconninfoOption *connOptions, const char *keyword,
+ const char *val)
+{
+ PQconninfoOption *option;
+
+ option = conninfo_find(connOptions, keyword);
+ if (option)
+ {
+ if (option->val)
+ free(option->val);
+ option->val = val ? strdup(val) : NULL;
+ }
+}
+
+/*
* Store a (new) value for an option corresponding to the keyword in
* connOptions array.
*
@@ -5066,6 +5086,69 @@ conninfo_find(PQconninfoOption *connOpti
}
+/*
+ * Return the connection options used for the connections
+ */
+PQconninfoOption *
+PQconninfo(PGconn *conn)
+{
+ PQExpBufferData errorBuf;
+ PQconninfoOption *connOptions;
+
+ if (conn == NULL)
+ return NULL;
+
+ /* We don't actually report any errors here, but callees want a buffer */
+ initPQExpBuffer(&errorBuf);
+ if (PQExpBufferDataBroken(errorBuf))
+ return NULL; /* out of memory already :-( */
+
+ connOptions = conninfo_init(&errorBuf);
+
+ termPQExpBuffer(&errorBuf);
+
+ /*
+ * Move conn values into option structure
+ */
+ conninfo_setval(connOptions, "hostaddr", conn->pghostaddr);
+ conninfo_setval(connOptions, "host", conn->pghost);
+ conninfo_setval(connOptions, "port", conn->pgport);
+ conninfo_setval(connOptions, "tty", conn->pgtty);
+ conninfo_setval(connOptions, "options", conn->pgoptions);
+ conninfo_setval(connOptions, "application_name", conn->appname);
+ conninfo_setval(connOptions, "fallback_application_name", conn->fbappname);
+ conninfo_setval(connOptions, "dbname", conn->dbName);
+ conninfo_setval(connOptions, "user", conn->pguser);
+ conninfo_setval(connOptions, "password", conn->pgpass);
+ conninfo_setval(connOptions, "connect_timeout", conn->connect_timeout);
+ conninfo_setval(connOptions, "client_encoding", conn->client_encoding_initial);
+ conninfo_setval(connOptions, "keepalives", conn->keepalives);
+ conninfo_setval(connOptions, "keepalives_idle", conn->keepalives_idle);
+ conninfo_setval(connOptions, "keepalives_interval", conn->keepalives_interval);
+ conninfo_setval(connOptions, "keepalives_count", conn->keepalives_count);
+ conninfo_setval(connOptions, "sslmode", conn->sslmode);
+ conninfo_setval(connOptions, "sslcompression", conn->sslcompression);
+ conninfo_setval(connOptions, "sslkey", conn->sslkey);
+ conninfo_setval(connOptions, "sslcert", conn->sslcert);
+ conninfo_setval(connOptions, "sslrootcert", conn->sslrootcert);
+ conninfo_setval(connOptions, "sslcrl", conn->sslcrl);
+#ifdef USE_SSL
+ conninfo_setval(connOptions, "requiressl",
+ (conn->sslmode && strcmp(conn->sslmode, "require") == 0 ? "1" : "0"));
+#endif
+ conninfo_setval(connOptions, "requirepeer", conn->requirepeer);
+#if defined(KRB5) || defined(ENABLE_GSS) || defined(ENABLE_SSPI)
+ conninfo_setval(connOptions, "krbsrvname", conn->krbsrvname);
+#endif
+#if defined(ENABLE_GSS) && defined(ENABLE_SSPI)
+ conninfo_setval(connOptions, "gsslib", conn->gsslib);
+#endif
+ conninfo_setval(connOptions, "replication", conn->replication);
+
+ return connOptions;
+}
+
+
void
PQconninfoFree(PQconninfoOption *connOptions)
{
diff -durpN postgresql/src/interfaces/libpq/libpq-fe.h postgresql.1/src/interfaces/libpq/libpq-fe.h
--- postgresql/src/interfaces/libpq/libpq-fe.h 2012-08-03 09:39:30.122266626 +0200
+++ postgresql.1/src/interfaces/libpq/libpq-fe.h 2012-10-03 15:00:45.458355068 +0200
@@ -262,6 +262,9 @@ extern PQconninfoOption *PQconndefaults(
/* parse connection options in same way as PQconnectdb */
extern PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg);
+/* return the connection options used by a live connection */
+extern PQconninfoOption *PQconninfo(PGconn *conn);
+
/* free the data structure returned by PQconndefaults() or PQconninfoParse() */
extern void PQconninfoFree(PQconninfoOption *connOptions);