On Tue, Dec 14, 2010 at 17:56, Massa, Harald Armin <[email protected]> wrote:
>>> My question: Which way is available to query the linked libpq version?
>
>> But it does outline that fact that it wouldn't suck to have a >function in
>> libpq returning the version so that application can >check this at runtime
>> - clearly it would also be useful when >being linked "through" something
>> like psycopg2.
>
> did there something happen?
Stuck in a local git branch. I've rebased on current and added docs,
see attachment.
(moving to hackers as well)
--
Magnus Hagander
Me: http://www.hagander.net/
Work: http://www.redpill-linpro.com/
*** a/doc/src/sgml/libpq.sgml
--- b/doc/src/sgml/libpq.sgml
***************
*** 5359,5364 **** void *PQresultAlloc(PGresult *res, size_t nBytes);
--- 5359,5399 ----
</listitem>
</varlistentry>
+ <varlistentry id="libpq-pqlibversion">
+ <term>
+ <function>PQlibVersion</function>
+ <indexterm>
+ <primary>PQlibVersion</primary>
+ <seealso>PQserverVersion</seealso>
+ </indexterm>
+ </term>
+
+ <listitem>
+ <para>
+ Return the version of <productname>libpq</> that is being used.
+ <synopsis>
+ int PQlibVersion(void);
+ </synopsis>
+ </para>
+
+ <para>
+ The result value of this function can be used to determine if
+ a specific function is available in the currently used version
+ of libpq.
+ </para>
+
+ <note>
+ <para>
+ This function appeared in <productname>PostgreSQL</> version 9.1, so
+ it cannot be used to detect required functions in earlier version.
+ Usage of this function will make the application require version
+ 9.1 or newer even if no actual funcionality from this version
+ is required.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect1>
*** a/src/interfaces/libpq/exports.txt
--- b/src/interfaces/libpq/exports.txt
***************
*** 159,161 **** PQconnectdbParams 156
--- 159,162 ----
PQconnectStartParams 157
PQping 158
PQpingParams 159
+ PQlibVersion 160
*** a/src/interfaces/libpq/fe-misc.c
--- b/src/interfaces/libpq/fe-misc.c
***************
*** 66,71 **** static int pqSocketCheck(PGconn *conn, int forRead, int forWrite,
--- 66,85 ----
time_t end_time);
static int pqSocketPoll(int sock, int forRead, int forWrite, time_t end_time);
+ /*
+ * PQlibVersion: return the libpq version number
+ */
+ int
+ PQlibVersion(void)
+ {
+ /*
+ * This number is updated by tools/version_stamp.pl, do not
+ * edit manually.
+ */
+ #define LOCAL_PG_VERSION_NUM 90100
+ return LOCAL_PG_VERSION_NUM;
+ #undef LOCAL_PG_VERSION_NUM
+ }
/*
* fputnbytes: print exactly N bytes to a file
*** a/src/interfaces/libpq/libpq-fe.h
--- b/src/interfaces/libpq/libpq-fe.h
***************
*** 547,552 **** extern int lo_export(PGconn *conn, Oid lobjId, const char *filename);
--- 547,555 ----
/* === in fe-misc.c === */
+ /* Get the version of the libpq library in use */
+ extern int PQlibVersion(void);
+
/* Determine length of multibyte encoded char at *s */
extern int PQmblen(const char *s, int encoding);
*** a/src/tools/version_stamp.pl
--- b/src/tools/version_stamp.pl
***************
*** 88,93 **** sed_file("src/include/pg_config.h.win32",
--- 88,96 ----
"-e 's/#define PG_VERSION \".*\"/#define PG_VERSION \"$fullversion\"/' " .
"-e 's/#define PG_VERSION_NUM .*/#define PG_VERSION_NUM $padnumericversion/'");
+ sed_file("src/interfaces/libpq/fe-misc.c",
+ "-e 's/#define LOCAL_PG_VERSION_NUM .*/#define LOCAL_PG_VERSION_NUM $padnumericversion/'");
+
sed_file("src/interfaces/libpq/libpq.rc.in",
"-e 's/FILEVERSION [0-9]*,[0-9]*,[0-9]*,0/FILEVERSION $major1,$major2,$numericminor,0/' " .
"-e 's/PRODUCTVERSION [0-9]*,[0-9]*,[0-9]*,0/PRODUCTVERSION $major1,$major2,$numericminor,0/' " .
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers