* MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.28 2003/01/31 22:25:13 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.29 2003/01/31 22:35:24 tgl Exp $
*
*********************************************************************
*/
int i,
rv;
PLyPlanObject *plan;
+ char *nulls;
enter();
if (nargs)
{
+ nulls = palloc((nargs + 1) * sizeof(char));
+
for (i = 0; i < nargs; i++)
{
PyObject *elem,
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);
+ 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, NULL, limit);
+ rv = SPI_execp(plan->plan, plan->values, nulls, limit);
RESTORE_EXC();
for (i = 0; i < nargs; i++)