diff options
-rw-r--r-- | doc/src/sgml/libpq.sgml | 38 | ||||
-rw-r--r-- | src/include/libpq/pqcomm.h | 1 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-connect.c | 10 | ||||
-rw-r--r-- | src/interfaces/libpq/libpq-fe.h | 5 |
4 files changed, 46 insertions, 8 deletions
diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 25646f6f8e0..783e8e750bb 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -2678,22 +2678,44 @@ const char *PQparameterStatus(const PGconn *conn, const char *paramName); </listitem> </varlistentry> + <varlistentry id="libpq-PQfullProtocolVersion"> + <term><function>PQfullProtocolVersion</function><indexterm><primary>PQfullProtocolVersion</primary></indexterm></term> + + <listitem> + <para> + Interrogates the frontend/backend protocol being used. +<synopsis> +int PQfullProtocolVersion(const PGconn *conn); +</synopsis> + Applications might wish to use this function to determine whether certain + features are supported. The result is formed by multiplying the server's + major version number by 10000 and adding the minor version number. For + example, version 3.2 would be returned as 30002, and version 4.0 would + be returned as 40000. Zero is returned if the connection is bad. The 3.0 + protocol is supported by <productname>PostgreSQL</productname> server + versions 7.4 and above. + </para> + <para> + The protocol version will not change after connection startup is + complete, but it could theoretically change during a connection reset. + </para> + </listitem> + </varlistentry> + <varlistentry id="libpq-PQprotocolVersion"> <term><function>PQprotocolVersion</function><indexterm><primary>PQprotocolVersion</primary></indexterm></term> <listitem> <para> - Interrogates the frontend/backend protocol being used. + Interrogates the frontend/backend protocol major version. <synopsis> int PQprotocolVersion(const PGconn *conn); </synopsis> - Applications might wish to use this function to determine whether certain - features are supported. Currently, the possible values are 3 - (3.0 protocol), or zero (connection bad). The protocol version will - not change after connection startup is complete, but it could - theoretically change during a connection reset. The 3.0 protocol is - supported by <productname>PostgreSQL</productname> server versions 7.4 - and above. + Unlike <xref linkend="libpq-PQfullProtocolVersion"/>, this returns only + the major protocol version in use, but it is supported by a wider range + of libpq releases back to version 7.4. Currently, the possible values are + 3 (3.0 protocol), or zero (connection bad). Prior to release version + 14.0, libpq could additionally return 2 (2.0 protocol). </para> </listitem> </varlistentry> diff --git a/src/include/libpq/pqcomm.h b/src/include/libpq/pqcomm.h index 527735e3dba..6925f10602b 100644 --- a/src/include/libpq/pqcomm.h +++ b/src/include/libpq/pqcomm.h @@ -86,6 +86,7 @@ is_unixsock_path(const char *path) #define PG_PROTOCOL_MAJOR(v) ((v) >> 16) #define PG_PROTOCOL_MINOR(v) ((v) & 0x0000ffff) +#define PG_PROTOCOL_FULL(v) (PG_PROTOCOL_MAJOR(v) * 10000 + PG_PROTOCOL_MINOR(v)) #define PG_PROTOCOL(m,n) (((m) << 16) | (n)) /* diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 9febdaa2885..d5a72587d24 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -7159,6 +7159,16 @@ PQprotocolVersion(const PGconn *conn) } int +PQfullProtocolVersion(const PGconn *conn) +{ + if (!conn) + return 0; + if (conn->status == CONNECTION_BAD) + return 0; + return PG_PROTOCOL_FULL(conn->pversion); +} + +int PQserverVersion(const PGconn *conn) { if (!conn) diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index ca3e028a512..15012c770c4 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -56,6 +56,10 @@ extern "C" /* Indicates presence of PQsocketPoll, PQgetCurrentTimeUSec */ #define LIBPQ_HAS_SOCKET_POLL 1 +/* Features added in PostgreSQL v18: */ +/* Indicates presence of PQfullProtocolVersion */ +#define LIBPQ_HAS_FULL_PROTOCOL_VERSION 1 + /* * Option flags for PQcopyResult */ @@ -393,6 +397,7 @@ extern PGTransactionStatusType PQtransactionStatus(const PGconn *conn); extern const char *PQparameterStatus(const PGconn *conn, const char *paramName); extern int PQprotocolVersion(const PGconn *conn); +extern int PQfullProtocolVersion(const PGconn *conn); extern int PQserverVersion(const PGconn *conn); extern char *PQerrorMessage(const PGconn *conn); extern int PQsocket(const PGconn *conn); |