55 * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
66 * Portions Copyright (c) 1994, Regents of the University of California
77 *
8- * $PostgreSQL: pgsql/src/bin/scripts/createlang.c,v 1.18 2005/07/10 14:26:30 momjian Exp $
8+ * $PostgreSQL: pgsql/src/bin/scripts/createlang.c,v 1.19 2005/08/15 21:02:26 tgl Exp $
99 *
1010 *-------------------------------------------------------------------------
1111 */
@@ -138,11 +138,12 @@ main(int argc, char *argv[])
138138{
139139printQueryOpt popt ;
140140
141- conn = connectDatabase (dbname ,host ,port ,username ,password ,progname );
141+ conn = connectDatabase (dbname ,host ,port ,username ,password ,
142+ progname );
142143
143- printfPQExpBuffer (& sql ,"SELECT lanname as \"%s\",(CASE WHEN lanpltrusted "
144- "THEN '%s' ELSE '%s' END) as \"%s\" FROM pg_language "
145- "WHERE lanispl IS TRUE ;" ,
144+ printfPQExpBuffer (& sql ,"SELECT lanname as \"%s\", "
145+ "(CASE WHEN lanpltrusted THEN '%s' ELSE '%s' END) as \"%s\" "
146+ "FROM pg_catalog.pg_language WHERE lanispl ;" ,
146147_ ("Name" ),_ ("yes" ),_ ("no" ),_ ("Trusted?" ));
147148result = executeQuery (conn ,sql .data ,progname ,echo );
148149
@@ -221,6 +222,13 @@ main(int argc, char *argv[])
221222
222223conn = connectDatabase (dbname ,host ,port ,username ,password ,progname );
223224
225+ /*
226+ * Force schema search path to be just pg_catalog, so that we don't
227+ * have to be paranoid about search paths below.
228+ */
229+ executeCommand (conn ,"SET search_path = pg_catalog;" ,
230+ progname ,echo );
231+
224232/*
225233 * Make sure the language isn't already installed
226234 */
@@ -232,8 +240,7 @@ main(int argc, char *argv[])
232240{
233241PQfinish (conn );
234242fprintf (stderr ,
235- _ ("%s: language \"%s\" is already installed in "
236- "database \"%s\"\n" ),
243+ _ ("%s: language \"%s\" is already installed in database \"%s\"\n" ),
237244progname ,langname ,dbname );
238245/* separate exit status for "already installed" */
239246exit (2 );
@@ -244,7 +251,8 @@ main(int argc, char *argv[])
244251 * Check whether the call handler exists
245252 */
246253printfPQExpBuffer (& sql ,"SELECT oid FROM pg_proc WHERE proname = '%s' "
247- "AND prorettype = 'pg_catalog.language_handler'::regtype "
254+ "AND pronamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'pg_catalog') "
255+ "AND prorettype = 'language_handler'::regtype "
248256"AND pronargs = 0;" ,handler );
249257result = executeQuery (conn ,sql .data ,progname ,echo );
250258handlerexists = (PQntuples (result )> 0 );
@@ -255,9 +263,10 @@ main(int argc, char *argv[])
255263 */
256264if (validator )
257265{
258- printfPQExpBuffer (& sql ,"SELECT oid FROM pg_proc WHERE proname = '%s'"
259- " AND proargtypes[0] = 'pg_catalog.oid'::regtype "
260- " AND pronargs = 1;" ,validator );
266+ printfPQExpBuffer (& sql ,"SELECT oid FROM pg_proc WHERE proname = '%s' "
267+ "AND pronamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'pg_catalog') "
268+ "AND proargtypes[0] = 'oid'::regtype "
269+ "AND pronargs = 1;" ,validator );
261270result = executeQuery (conn ,sql .data ,progname ,echo );
262271validatorexists = (PQntuples (result )> 0 );
263272PQclear (result );
@@ -267,27 +276,30 @@ main(int argc, char *argv[])
267276
268277/*
269278 * Create the function(s) and the language
279+ *
280+ * NOTE: the functions will be created in pg_catalog because
281+ * of our previous "SET search_path".
270282 */
271283resetPQExpBuffer (& sql );
272284
273285if (!handlerexists )
274286appendPQExpBuffer (& sql ,
275- "CREATE FUNCTIONpg_catalog. \"%s\" () RETURNS "
276- "language_handler AS '%s/%s' LANGUAGE C;\n" ,
287+ "CREATE FUNCTION \"%s\" () RETURNS language_handler "
288+ "AS '%s/%s' LANGUAGE C;\n" ,
277289handler ,pglib ,object );
278290
279291if (!validatorexists )
280292appendPQExpBuffer (& sql ,
281- "CREATE FUNCTIONpg_catalog. \"%s\" (oid) RETURNS "
282- "void AS '%s/%s' LANGUAGE C;\n" ,
293+ "CREATE FUNCTION \"%s\" (oid) RETURNS void "
294+ "AS '%s/%s' LANGUAGE C;\n" ,
283295validator ,pglib ,object );
284296
285297appendPQExpBuffer (& sql ,
286- "CREATE %sLANGUAGE \"%s\" HANDLERpg_catalog. \"%s\"" ,
298+ "CREATE %sLANGUAGE \"%s\" HANDLER \"%s\"" ,
287299 (trusted ?"TRUSTED " :"" ),langname ,handler );
288300
289301if (validator )
290- appendPQExpBuffer (& sql ," VALIDATORpg_catalog. \"%s\"" ,validator );
302+ appendPQExpBuffer (& sql ," VALIDATOR \"%s\"" ,validator );
291303
292304appendPQExpBuffer (& sql ,";\n" );
293305