|
12 | 12 | * |
13 | 13 | * |
14 | 14 | * IDENTIFICATION |
15 | | - * $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.43 2003/03/1022:28:18 tgl Exp $ |
| 15 | + * $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.44 2003/04/27 23:22:13 tgl Exp $ |
16 | 16 | * |
17 | 17 | *------------------------------------------------------------------------- |
18 | 18 | */ |
@@ -246,32 +246,36 @@ current_schema(PG_FUNCTION_ARGS) |
246 | 246 | if (search_path==NIL) |
247 | 247 | PG_RETURN_NULL(); |
248 | 248 | nspname=get_namespace_name(lfirsto(search_path)); |
| 249 | +if (!nspname) |
| 250 | +PG_RETURN_NULL();/* recently-deleted namespace? */ |
249 | 251 | PG_RETURN_DATUM(DirectFunctionCall1(namein,CStringGetDatum(nspname))); |
250 | 252 | } |
251 | 253 |
|
252 | 254 | Datum |
253 | 255 | current_schemas(PG_FUNCTION_ARGS) |
254 | 256 | { |
255 | 257 | List*search_path=fetch_search_path(PG_GETARG_BOOL(0)); |
256 | | -intnnames=length(search_path); |
257 | 258 | Datum*names; |
258 | 259 | inti; |
259 | 260 | ArrayType*array; |
260 | 261 |
|
261 | 262 | /* +1 here is just to avoid palloc(0) error */ |
262 | | -names= (Datum*)palloc((nnames+1)*sizeof(Datum)); |
| 263 | +names= (Datum*)palloc((length(search_path)+1)*sizeof(Datum)); |
263 | 264 | i=0; |
264 | 265 | while (search_path) |
265 | 266 | { |
266 | 267 | char*nspname; |
267 | 268 |
|
268 | 269 | nspname=get_namespace_name(lfirsto(search_path)); |
269 | | -names[i]=DirectFunctionCall1(namein,CStringGetDatum(nspname)); |
270 | | -i++; |
| 270 | +if (nspname)/* watch out for deleted namespace */ |
| 271 | +{ |
| 272 | +names[i]=DirectFunctionCall1(namein,CStringGetDatum(nspname)); |
| 273 | +i++; |
| 274 | +} |
271 | 275 | search_path=lnext(search_path); |
272 | 276 | } |
273 | 277 |
|
274 | | -array=construct_array(names,nnames, |
| 278 | +array=construct_array(names,i, |
275 | 279 | NAMEOID, |
276 | 280 | NAMEDATALEN,/* sizeof(Name) */ |
277 | 281 | false,/* Name is not by-val */ |
|