29
29
* MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
30
30
*
31
31
* 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 $
33
33
*
34
34
*********************************************************************
35
35
*/
@@ -127,7 +127,8 @@ typedef struct PLyTypeInfo
127
127
*/
128
128
typedef struct PLyProcedure
129
129
{
130
- char * proname ;
130
+ char * proname ; /* SQL name of procedure */
131
+ char * pyname ; /* Python name of procedure */
131
132
TransactionId fn_xmin ;
132
133
CommandId fn_cmin ;
133
134
PLyTypeInfo result ; /* also used to store info for trigger
@@ -1050,7 +1051,7 @@ static PLyProcedure *
1050
1051
PLy_procedure_create (FunctionCallInfo fcinfo , bool is_trigger ,
1051
1052
HeapTuple procTup , char * key )
1052
1053
{
1053
- char procName [256 ];
1054
+ char procName [NAMEDATALEN + 256 ];
1054
1055
1055
1056
DECLARE_EXC ();
1056
1057
Form_pg_proc procStruct ;
@@ -1073,8 +1074,10 @@ PLy_procedure_create(FunctionCallInfo fcinfo, bool is_trigger,
1073
1074
elog (FATAL , "plpython: Procedure name would overrun buffer" );
1074
1075
1075
1076
proc = 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 );
1078
1081
proc -> fn_xmin = HeapTupleHeaderGetXmin (procTup -> t_data );
1079
1082
proc -> fn_cmin = HeapTupleHeaderGetCmin (procTup -> t_data );
1080
1083
PLy_typeinfo_init (& proc -> result );
@@ -1235,21 +1238,21 @@ PLy_procedure_compile(PLyProcedure * proc, const char *src)
1235
1238
/*
1236
1239
* insert the function code into the interpreter
1237
1240
*/
1238
- msrc = PLy_procedure_munge_source (proc -> proname , src );
1241
+ msrc = PLy_procedure_munge_source (proc -> pyname , src );
1239
1242
crv = PyObject_CallMethod (proc -> interp , "r_exec" , "s" , msrc );
1240
1243
free (msrc );
1241
1244
1242
1245
if ((crv != NULL ) && (!PyErr_Occurred ()))
1243
1246
{
1244
1247
int clen ;
1245
- char call [256 ];
1248
+ char call [NAMEDATALEN + 256 ];
1246
1249
1247
1250
Py_DECREF (crv );
1248
1251
1249
1252
/*
1250
1253
* compile a call to the function
1251
1254
*/
1252
- clen = snprintf (call , sizeof (call ), "%s()" , proc -> proname );
1255
+ clen = snprintf (call , sizeof (call ), "%s()" , proc -> pyname );
1253
1256
if ((clen < 0 ) || (clen >= sizeof (call )))
1254
1257
elog (ERROR , "plpython: string would overflow buffer." );
1255
1258
proc -> code = Py_CompileString (call , "<string>" , Py_eval_input );
@@ -1321,6 +1324,8 @@ PLy_procedure_delete(PLyProcedure * proc)
1321
1324
Py_XDECREF (proc -> me );
1322
1325
if (proc -> proname )
1323
1326
PLy_free (proc -> proname );
1327
+ if (proc -> pyname )
1328
+ PLy_free (proc -> pyname );
1324
1329
for (i = 0 ; i < proc -> nargs ; i ++ )
1325
1330
if (proc -> args [i ].is_rel == 1 )
1326
1331
{
@@ -2748,9 +2753,12 @@ PLy_output(volatile int level, PyObject * self, PyObject * args)
2748
2753
}
2749
2754
2750
2755
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,
2752
2758
* If a plpython procedure call calls the backend and the backend calls
2753
2759
* another plpython procedure )
2760
+ *
2761
+ * NB: this returns SQL name, not the internal Python procedure name
2754
2762
*/
2755
2763
2756
2764
char *
0 commit comments