aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/libpq/fe-exec.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-03-05 01:53:59 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-03-05 01:53:59 +0000
commit44611f6e6d2cd11ac2c6dc1f41c13a98ec633f08 (patch)
treea6386e8e5b42fba514d25f786c6b1a5e4e93764a /src/interfaces/libpq/fe-exec.c
parentd91acf840136f751898378c0ff41d317e993d1a6 (diff)
downloadpostgresql-44611f6e6d2cd11ac2c6dc1f41c13a98ec633f08.tar.gz
postgresql-44611f6e6d2cd11ac2c6dc1f41c13a98ec633f08.zip
libpq's query to get the OIDs of large-object support functions was not
schema-safe. Make it so, and improve the internal support for knowledge of server version.
Diffstat (limited to 'src/interfaces/libpq/fe-exec.c')
-rw-r--r--src/interfaces/libpq/fe-exec.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index eae1b764abb..d2ad75bb23b 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.156 2003/12/28 17:29:41 tgl Exp $
+ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.157 2004/03/05 01:53:59 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -609,12 +609,28 @@ pqSaveParameterStatus(PGconn *conn, const char *name, const char *value)
/*
* Special hacks: remember client_encoding as a numeric value, and
- * remember at least the first few bytes of server version.
+ * convert server version to a numeric form as well.
*/
if (strcmp(name, "client_encoding") == 0)
conn->client_encoding = pg_char_to_encoding(value);
- if (strcmp(name, "server_version") == 0)
- StrNCpy(conn->sversion, value, sizeof(conn->sversion));
+ else if (strcmp(name, "server_version") == 0)
+ {
+ int cnt;
+ int vmaj,
+ vmin,
+ vrev;
+
+ cnt = sscanf(value, "%d.%d.%d", &vmaj, &vmin, &vrev);
+
+ if (cnt < 2)
+ conn->sversion = 0; /* unknown */
+ else
+ {
+ if (cnt == 2)
+ vrev = 0;
+ conn->sversion = (100 * vmaj + vmin) * 100 + vrev;
+ }
+ }
}