summaryrefslogtreecommitdiff
path: root/src/interfaces/libpq/fe-lobj.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-lobj.c
parentd91acf840136f751898378c0ff41d317e993d1a6 (diff)
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-lobj.c')
-rw-r--r--src/interfaces/libpq/fe-lobj.c40
1 files changed, 29 insertions, 11 deletions
diff --git a/src/interfaces/libpq/fe-lobj.c b/src/interfaces/libpq/fe-lobj.c
index 16d4970d9eb..e9ef61358ac 100644
--- a/src/interfaces/libpq/fe-lobj.c
+++ b/src/interfaces/libpq/fe-lobj.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/interfaces/libpq/fe-lobj.c,v 1.47 2004/01/26 22:35:32 tgl Exp $
+ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-lobj.c,v 1.48 2004/03/05 01:53:59 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -534,6 +534,7 @@ lo_initialize(PGconn *conn)
PGresult *res;
PGlobjfuncs *lobjfuncs;
int n;
+ const char *query;
const char *fname;
Oid foid;
@@ -550,17 +551,34 @@ lo_initialize(PGconn *conn)
MemSet((char *) lobjfuncs, 0, sizeof(PGlobjfuncs));
/*
- * Execute the query to get all the functions at once
+ * Execute the query to get all the functions at once. In 7.3 and later
+ * we need to be schema-safe.
*/
- res = PQexec(conn, "select proname, oid from pg_proc \
- where proname = 'lo_open' \
- or proname = 'lo_close' \
- or proname = 'lo_creat' \
- or proname = 'lo_unlink' \
- or proname = 'lo_lseek' \
- or proname = 'lo_tell' \
- or proname = 'loread' \
- or proname = 'lowrite'");
+ if (conn->sversion >= 70300)
+ query = "select proname, oid from pg_catalog.pg_proc "
+ "where proname in ("
+ "'lo_open', "
+ "'lo_close', "
+ "'lo_creat', "
+ "'lo_unlink', "
+ "'lo_lseek', "
+ "'lo_tell', "
+ "'loread', "
+ "'lowrite') "
+ "and pronamespace = (select oid from pg_catalog.pg_namespace "
+ "where nspname = 'pg_catalog')";
+ else
+ query = "select proname, oid from pg_proc "
+ "where proname = 'lo_open' "
+ "or proname = 'lo_close' "
+ "or proname = 'lo_creat' "
+ "or proname = 'lo_unlink' "
+ "or proname = 'lo_lseek' "
+ "or proname = 'lo_tell' "
+ "or proname = 'loread' "
+ "or proname = 'lowrite'";
+
+ res = PQexec(conn, query);
if (res == NULL)
{
free(lobjfuncs);