|
29 | 29 | * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
30 | 30 | *
|
31 | 31 | * IDENTIFICATION
|
32 |
| - *$Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.28 2003/01/31 22:25:13 tgl Exp $ |
| 32 | + *$Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.29 2003/01/31 22:35:24 tgl Exp $ |
33 | 33 | *
|
34 | 34 | *********************************************************************
|
35 | 35 | */
|
@@ -2181,6 +2181,7 @@ PLy_spi_execute_plan(PyObject * ob, PyObject * list, int limit)
|
2181 | 2181 | inti,
|
2182 | 2182 | rv;
|
2183 | 2183 | PLyPlanObject*plan;
|
| 2184 | +char*nulls; |
2184 | 2185 |
|
2185 | 2186 | enter();
|
2186 | 2187 |
|
@@ -2242,30 +2243,48 @@ PLy_spi_execute_plan(PyObject * ob, PyObject * list, int limit)
|
2242 | 2243 |
|
2243 | 2244 | if (nargs)
|
2244 | 2245 | {
|
| 2246 | +nulls=palloc((nargs+1)*sizeof(char)); |
| 2247 | + |
2245 | 2248 | for (i=0;i<nargs;i++)
|
2246 | 2249 | {
|
2247 | 2250 | PyObject*elem,
|
2248 | 2251 | *so;
|
2249 | 2252 | char*sv;
|
2250 | 2253 |
|
2251 | 2254 | elem=PySequence_GetItem(list,i);
|
2252 |
| -so=PyObject_Str(elem); |
2253 |
| -sv=PyString_AsString(so); |
2254 |
| - |
2255 |
| -/* |
2256 |
| - * FIXME -- if this can elog, we have leak |
2257 |
| - */ |
2258 |
| -plan->values[i]=FunctionCall3(&(plan->args[i].out.d.typfunc), |
2259 |
| -CStringGetDatum(sv), |
2260 |
| -ObjectIdGetDatum(plan->args[i].out.d.typelem), |
2261 |
| -Int32GetDatum(-1)); |
2262 |
| - |
2263 |
| -Py_DECREF(so); |
2264 |
| -Py_DECREF(elem); |
| 2255 | +if (elem!=Py_None) |
| 2256 | +{ |
| 2257 | +so=PyObject_Str(elem); |
| 2258 | +sv=PyString_AsString(so); |
| 2259 | + |
| 2260 | +/* |
| 2261 | + * FIXME -- if this can elog, we have leak |
| 2262 | + */ |
| 2263 | +plan->values[i]=FunctionCall3(&(plan->args[i].out.d.typfunc), |
| 2264 | +CStringGetDatum(sv), |
| 2265 | +ObjectIdGetDatum(plan->args[i].out.d.typelem), |
| 2266 | +Int32GetDatum(-1)); |
| 2267 | + |
| 2268 | +Py_DECREF(so); |
| 2269 | +Py_DECREF(elem); |
| 2270 | + |
| 2271 | +nulls[i]=' '; |
| 2272 | +} |
| 2273 | +else |
| 2274 | +{ |
| 2275 | +Py_DECREF(elem); |
| 2276 | +plan->values[i]= (Datum)0; |
| 2277 | +nulls[i]='n'; |
| 2278 | +} |
2265 | 2279 | }
|
| 2280 | +nulls[i]='\0'; |
| 2281 | +} |
| 2282 | +else |
| 2283 | +{ |
| 2284 | +nulls=NULL; |
2266 | 2285 | }
|
2267 | 2286 |
|
2268 |
| -rv=SPI_execp(plan->plan,plan->values,NULL,limit); |
| 2287 | +rv=SPI_execp(plan->plan,plan->values,nulls,limit); |
2269 | 2288 | RESTORE_EXC();
|
2270 | 2289 |
|
2271 | 2290 | for (i=0;i<nargs;i++)
|
|