2929 * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
3030 *
3131 * IDENTIFICATION
32- *$Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.27 2002/11/22 16 :25:30 tgl Exp $
32+ *$Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.28 2003/01/31 22 :25:13 tgl Exp $
3333 *
3434 *********************************************************************
3535 */
@@ -127,7 +127,8 @@ typedef struct PLyTypeInfo
127127 */
128128typedef struct PLyProcedure
129129{
130- char * proname ;
130+ char * proname ;/* SQL name of procedure */
131+ char * pyname ;/* Python name of procedure */
131132TransactionId fn_xmin ;
132133CommandId fn_cmin ;
133134PLyTypeInfo result ;/* also used to store info for trigger
@@ -1050,7 +1051,7 @@ static PLyProcedure *
10501051PLy_procedure_create (FunctionCallInfo fcinfo ,bool is_trigger ,
10511052HeapTuple procTup ,char * key )
10521053{
1053- char procName [256 ];
1054+ char procName [NAMEDATALEN + 256 ];
10541055
10551056DECLARE_EXC ();
10561057Form_pg_proc procStruct ;
@@ -1073,8 +1074,10 @@ PLy_procedure_create(FunctionCallInfo fcinfo, bool is_trigger,
10731074elog (FATAL ,"plpython: Procedure name would overrun buffer" );
10741075
10751076proc = PLy_malloc (sizeof (PLyProcedure ));
1076- proc -> proname = PLy_malloc (strlen (procName )+ 1 );
1077- strcpy (proc -> proname ,procName );
1077+ proc -> proname = PLy_malloc (strlen (NameStr (procStruct -> proname ))+ 1 );
1078+ strcpy (proc -> proname ,NameStr (procStruct -> proname ));
1079+ proc -> pyname = PLy_malloc (strlen (procName )+ 1 );
1080+ strcpy (proc -> pyname ,procName );
10781081proc -> fn_xmin = HeapTupleHeaderGetXmin (procTup -> t_data );
10791082proc -> fn_cmin = HeapTupleHeaderGetCmin (procTup -> t_data );
10801083PLy_typeinfo_init (& proc -> result );
@@ -1235,21 +1238,21 @@ PLy_procedure_compile(PLyProcedure * proc, const char *src)
12351238/*
12361239 * insert the function code into the interpreter
12371240 */
1238- msrc = PLy_procedure_munge_source (proc -> proname ,src );
1241+ msrc = PLy_procedure_munge_source (proc -> pyname ,src );
12391242crv = PyObject_CallMethod (proc -> interp ,"r_exec" ,"s" ,msrc );
12401243free (msrc );
12411244
12421245if ((crv != NULL )&& (!PyErr_Occurred ()))
12431246{
12441247int clen ;
1245- char call [256 ];
1248+ char call [NAMEDATALEN + 256 ];
12461249
12471250Py_DECREF (crv );
12481251
12491252/*
12501253 * compile a call to the function
12511254 */
1252- clen = snprintf (call ,sizeof (call ),"%s()" ,proc -> proname );
1255+ clen = snprintf (call ,sizeof (call ),"%s()" ,proc -> pyname );
12531256if ((clen < 0 )|| (clen >=sizeof (call )))
12541257elog (ERROR ,"plpython: string would overflow buffer." );
12551258proc -> code = Py_CompileString (call ,"<string>" ,Py_eval_input );
@@ -1321,6 +1324,8 @@ PLy_procedure_delete(PLyProcedure * proc)
13211324Py_XDECREF (proc -> me );
13221325if (proc -> proname )
13231326PLy_free (proc -> proname );
1327+ if (proc -> pyname )
1328+ PLy_free (proc -> pyname );
13241329for (i = 0 ;i < proc -> nargs ;i ++ )
13251330if (proc -> args [i ].is_rel == 1 )
13261331{
@@ -2748,9 +2753,12 @@ PLy_output(volatile int level, PyObject * self, PyObject * args)
27482753}
27492754
27502755
2751- /* Get the last procedure name called by the backend ( the innermost,
2756+ /*
2757+ * Get the last procedure name called by the backend ( the innermost,
27522758 * If a plpython procedure call calls the backend and the backend calls
27532759 * another plpython procedure )
2760+ *
2761+ * NB: this returns SQL name, not the internal Python procedure name
27542762 */
27552763
27562764char *