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++)