Index: plpython.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/pl/plpython/plpython.c,v
retrieving revision 1.27
diff -c -r1.27 plpython.c
*** plpython.c	2002/11/22 16:25:30	1.27
--- plpython.c	2003/01/28 23:54:58
***************
*** 2176,2181 ****
--- 2176,2182 ----
  	int			i,
  				rv;
  	PLyPlanObject *plan;
+ 	char *nulls;
  
  	enter();
  
***************
*** 2237,2242 ****
--- 2238,2245 ----
  
  	if (nargs)
  	{
+ 		nulls = palloc((nargs + 1) * sizeof(char));
+ 
  		for (i = 0; i < nargs; i++)
  		{
  			PyObject   *elem,
***************
*** 2244,2266 ****
  			char	   *sv;
  
  			elem = PySequence_GetItem(list, i);
! 			so = PyObject_Str(elem);
! 			sv = PyString_AsString(so);
  
! 			/*
! 			 * FIXME -- if this can elog, we have leak
! 			 */
! 			plan->values[i] = FunctionCall3(&(plan->args[i].out.d.typfunc),
! 											CStringGetDatum(sv),
! 						   ObjectIdGetDatum(plan->args[i].out.d.typelem),
! 											Int32GetDatum(-1));
  
! 			Py_DECREF(so);
! 			Py_DECREF(elem);
  		}
  	}
  
! 	rv = SPI_execp(plan->plan, plan->values, NULL, limit);
  	RESTORE_EXC();
  
  	for (i = 0; i < nargs; i++)
--- 2247,2285 ----
  			char	   *sv;
  
  			elem = PySequence_GetItem(list, i);
! 			if (elem != Py_None)
! 			{
! 					so = PyObject_Str(elem);
! 					sv = PyString_AsString(so);
  
! 					/*
! 					 * FIXME -- if this can elog, we have leak
! 					 */
! 					plan->values[i] = FunctionCall3(&(plan->args[i].out.d.typfunc),
! 													CStringGetDatum(sv),
! 													ObjectIdGetDatum(plan->args[i].out.d.typelem),
! 													Int32GetDatum(-1));
! 					
! 					Py_DECREF(so);
! 					Py_DECREF(elem);
  
! 					nulls[i] = ' ';
! 			}
! 			else
! 			{
! 				Py_DECREF(elem);
! 				plan->values[i] = (Datum) 0;
! 				nulls[i] = 'n';
! 			}
  		}
+ 		nulls[i] = '\0';
+ 	}
+ 	else
+ 	{
+ 		nulls = NULL;
  	}
  
! 	rv = SPI_execp(plan->plan, plan->values, nulls, limit);
  	RESTORE_EXC();
  
  	for (i = 0; i < nargs; i++)
