From 44611f6e6d2cd11ac2c6dc1f41c13a98ec633f08 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 5 Mar 2004 01:53:59 +0000 Subject: 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. --- src/interfaces/libpq/fe-lobj.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) (limited to 'src/interfaces/libpq/fe-lobj.c') 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); -- cgit v1.2.3