8
8
*
9
9
*
10
10
* IDENTIFICATION
11
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.52 2000/02/18 09:28:48 inoue Exp $
11
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.53 2000/02/27 03:30:27 tgl Exp $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
@@ -165,6 +165,13 @@ regprocout(RegProcedure proid)
165
165
166
166
result = (char * ) palloc (NAMEDATALEN );
167
167
168
+ if (proid == InvalidOid )
169
+ {
170
+ result [0 ] = '-' ;
171
+ result [1 ] = '\0' ;
172
+ return result ;
173
+ }
174
+
168
175
if (!IsBootstrapProcessingMode ())
169
176
{
170
177
proctup = SearchSysCacheTuple (PROCOID ,
@@ -231,14 +238,19 @@ regprocout(RegProcedure proid)
231
238
}
232
239
233
240
/*
234
- * int8typeout - converts int8 type oids to "typname" list
241
+ * oidvectortypes - converts a vector of type OIDs to "typname" list
242
+ *
243
+ * The interface for this function is wrong: it should be told how many
244
+ * OIDs are significant in the input vector, so that trailing InvalidOid
245
+ * argument types can be recognized.
235
246
*/
236
247
text *
237
248
oidvectortypes (Oid * oidArray )
238
249
{
239
250
HeapTuple typetup ;
240
251
text * result ;
241
- int num ;
252
+ int numargs ,
253
+ num ;
242
254
243
255
if (oidArray == NULL )
244
256
{
@@ -247,27 +259,33 @@ oidvectortypes(Oid *oidArray)
247
259
return result ;
248
260
}
249
261
250
- result = (text * ) palloc (NAMEDATALEN * FUNC_MAX_ARGS +
251
- FUNC_MAX_ARGS + VARHDRSZ + 1 );
252
- * VARDATA (result ) = '\0' ;
253
-
262
+ /* Try to guess how many args there are :-( */
263
+ numargs = 0 ;
254
264
for (num = 0 ; num < FUNC_MAX_ARGS ; num ++ )
255
265
{
256
266
if (oidArray [num ] != InvalidOid )
267
+ numargs = num + 1 ;
268
+ }
269
+
270
+ result = (text * ) palloc ((NAMEDATALEN + 1 ) * numargs + VARHDRSZ + 1 );
271
+ * VARDATA (result ) = '\0' ;
272
+
273
+ for (num = 0 ; num < numargs ; num ++ )
274
+ {
275
+ typetup = SearchSysCacheTuple (TYPEOID ,
276
+ ObjectIdGetDatum (oidArray [num ]),
277
+ 0 , 0 , 0 );
278
+ if (HeapTupleIsValid (typetup ))
257
279
{
258
- typetup = SearchSysCacheTuple (TYPEOID ,
259
- ObjectIdGetDatum (oidArray [num ]),
260
- 0 , 0 , 0 );
261
- if (HeapTupleIsValid (typetup ))
262
- {
263
- char * s ;
280
+ char * s ;
264
281
265
- s = NameStr (((Form_pg_type ) GETSTRUCT (typetup ))-> typname );
266
- StrNCpy (VARDATA (result ) + strlen (VARDATA (result )), s ,
267
- NAMEDATALEN );
268
- strcat (VARDATA (result ), " " );
269
- }
282
+ s = NameStr (((Form_pg_type ) GETSTRUCT (typetup ))-> typname );
283
+ StrNCpy (VARDATA (result ) + strlen (VARDATA (result )), s ,
284
+ NAMEDATALEN );
285
+ strcat (VARDATA (result ), " " );
270
286
}
287
+ else
288
+ strcat (VARDATA (result ), "- " );
271
289
}
272
290
VARSIZE (result ) = strlen (VARDATA (result )) + VARHDRSZ ;
273
291
return result ;
@@ -290,6 +308,3 @@ regproctooid(RegProcedure rp)
290
308
}
291
309
292
310
/* (see int.c for comparison/operation routines) */
293
-
294
-
295
- /* ========== PRIVATE ROUTINES ========== */
0 commit comments