|
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 | int i,
|
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++)
|
|
0 commit comments