5
5
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
6
6
* Portions Copyright (c) 1994, Regents of the University of California
7
7
*
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 $
9
9
*
10
10
*-------------------------------------------------------------------------
11
11
*/
@@ -138,11 +138,12 @@ main(int argc, char *argv[])
138
138
{
139
139
printQueryOpt popt ;
140
140
141
- conn = connectDatabase (dbname ,host ,port ,username ,password ,progname );
141
+ conn = connectDatabase (dbname ,host ,port ,username ,password ,
142
+ progname );
142
143
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 ;" ,
146
147
_ ("Name" ),_ ("yes" ),_ ("no" ),_ ("Trusted?" ));
147
148
result = executeQuery (conn ,sql .data ,progname ,echo );
148
149
@@ -221,6 +222,13 @@ main(int argc, char *argv[])
221
222
222
223
conn = connectDatabase (dbname ,host ,port ,username ,password ,progname );
223
224
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
+
224
232
/*
225
233
* Make sure the language isn't already installed
226
234
*/
@@ -232,8 +240,7 @@ main(int argc, char *argv[])
232
240
{
233
241
PQfinish (conn );
234
242
fprintf (stderr ,
235
- _ ("%s: language \"%s\" is already installed in "
236
- "database \"%s\"\n" ),
243
+ _ ("%s: language \"%s\" is already installed in database \"%s\"\n" ),
237
244
progname ,langname ,dbname );
238
245
/* separate exit status for "already installed" */
239
246
exit (2 );
@@ -244,7 +251,8 @@ main(int argc, char *argv[])
244
251
* Check whether the call handler exists
245
252
*/
246
253
printfPQExpBuffer (& 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 "
248
256
"AND pronargs = 0;" ,handler );
249
257
result = executeQuery (conn ,sql .data ,progname ,echo );
250
258
handlerexists = (PQntuples (result )> 0 );
@@ -255,9 +263,10 @@ main(int argc, char *argv[])
255
263
*/
256
264
if (validator )
257
265
{
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 );
261
270
result = executeQuery (conn ,sql .data ,progname ,echo );
262
271
validatorexists = (PQntuples (result )> 0 );
263
272
PQclear (result );
@@ -267,27 +276,30 @@ main(int argc, char *argv[])
267
276
268
277
/*
269
278
* 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".
270
282
*/
271
283
resetPQExpBuffer (& sql );
272
284
273
285
if (!handlerexists )
274
286
appendPQExpBuffer (& 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" ,
277
289
handler ,pglib ,object );
278
290
279
291
if (!validatorexists )
280
292
appendPQExpBuffer (& 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" ,
283
295
validator ,pglib ,object );
284
296
285
297
appendPQExpBuffer (& sql ,
286
- "CREATE %sLANGUAGE \"%s\" HANDLERpg_catalog. \"%s\"" ,
298
+ "CREATE %sLANGUAGE \"%s\" HANDLER \"%s\"" ,
287
299
(trusted ?"TRUSTED " :"" ),langname ,handler );
288
300
289
301
if (validator )
290
- appendPQExpBuffer (& sql ," VALIDATORpg_catalog. \"%s\"" ,validator );
302
+ appendPQExpBuffer (& sql ," VALIDATOR \"%s\"" ,validator );
291
303
292
304
appendPQExpBuffer (& sql ,";\n" );
293
305