77 *
88 *
99 * IDENTIFICATION
10- * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.23 1998/08/31 07:35:44 momjian Exp $
10+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.24 1998/08/31 07:55:48 momjian Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
3535 *proid of NULL signifies unknown
3636 */
3737int32
38- regprocin (char * pro_oid_name )
38+ regprocin (char * pro_name_and_oid )
3939{
40- HeapTuple proctup ;
40+ HeapTuple proctup = NULL ;
4141RegProcedure result = (Oid )0 ;
4242
43- if (pro_oid_name == NULL )
43+ if (pro_name_and_oid == NULL )
4444return (0 );
4545
4646
4747if (!IsBootstrapProcessingMode ())
4848{
4949/*
5050 * we need to use the oid because there can be multiple entries
51- *with the same name, i.e. 1323_int4eq
51+ *with the same name. We accept 1323_int4eq and 1323.
5252 */
53- proctup = SearchSysCacheTuple (PROOID ,
54- /* atoi stops at the _ */
55- ObjectIdGetDatum (atoi (pro_oid_name )),
56- 0 ,0 ,0 );
53+ if (strrchr (pro_name_and_oid ,'_' )!= NULL )
54+ {
55+ proctup = SearchSysCacheTuple (PROOID ,
56+ ObjectIdGetDatum (atoi (strrchr (pro_name_and_oid ,'_' )+ 1 )),
57+ 0 ,0 ,0 );
58+
59+ }
60+ else if (atoi (pro_name_and_oid )!= InvalidOid )
61+ {
62+ proctup = SearchSysCacheTuple (PROOID ,
63+ /* atoi stops at the _ */
64+ ObjectIdGetDatum (atoi (pro_name_and_oid )),
65+ 0 ,0 ,0 );
66+ }
5767if (HeapTupleIsValid (proctup ))
5868result = (RegProcedure )proctup -> t_oid ;
59- else result = ( RegProcedure ) 0 ;
69+ else elog ( ERROR , "regprocin: no such procedure %s" , pro_name_and_oid ) ;
6070}
6171else
6272{
@@ -76,7 +86,7 @@ regprocin(char *pro_oid_name)
7686 (bits16 )0 ,
7787 (AttrNumber )1 ,
7888 (RegProcedure )F_NAMEEQ ,
79- (Datum )pro_oid_name );
89+ (Datum )pro_name_and_oid );
8090
8191procscan = heap_beginscan (proc ,0 ,SnapshotNow ,1 ,& key );
8292if (!HeapScanIsValid (procscan ))
@@ -94,7 +104,7 @@ regprocin(char *pro_oid_name)
94104RelationGetTupleDescriptor (proc ),
95105& isnull );
96106if (isnull )
97- elog (FATAL ,"regprocin: null procedure %s" ,pro_oid_name );
107+ elog (FATAL ,"regprocin: null procedure %s" ,pro_name_and_oid );
98108}
99109else
100110result = (RegProcedure )0 ;
@@ -104,13 +114,13 @@ regprocin(char *pro_oid_name)
104114}
105115
106116#ifdef EBUG
107- elog (DEBUG ,"regprocin: no such procedure %s" ,pro_oid_name );
117+ elog (DEBUG ,"regprocin: no such procedure %s" ,pro_name_and_oid );
108118#endif /* defined(EBUG) */
109119return (int32 )result ;
110120}
111121
112122/*
113- *regprocout- converts proid to "pro_oid_name "
123+ *regprocout- converts proid to "pro_name_and_oid "
114124 */
115125char *
116126regprocout (RegProcedure proid )
@@ -131,7 +141,7 @@ regprocout(RegProcedure proid)
131141char * s ;
132142
133143s = ((Form_pg_proc )GETSTRUCT (proctup ))-> proname .data ;
134- snprintf (result ,NAMEDATALEN ,"%d_%s " ,proid , s );
144+ snprintf (result ,NAMEDATALEN ,"%s_%d " ,s , proid );
135145}
136146else
137147{