aboutsummaryrefslogtreecommitdiff
path: root/src/pl/plpython/plpy_spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl/plpython/plpy_spi.c')
-rw-r--r--src/pl/plpython/plpy_spi.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/pl/plpython/plpy_spi.c b/src/pl/plpython/plpy_spi.c
index 69eb6b39f67..ade27f39242 100644
--- a/src/pl/plpython/plpy_spi.c
+++ b/src/pl/plpython/plpy_spi.c
@@ -360,6 +360,8 @@ PLy_spi_execute_fetch_result(SPITupleTable *tuptable, uint64 rows, int status)
volatile MemoryContext oldcontext;
result = (PLyResultObject *) PLy_result_new();
+ if (!result)
+ return NULL;
Py_DECREF(result->status);
result->status = PyInt_FromLong(status);
@@ -409,17 +411,24 @@ PLy_spi_execute_fetch_result(SPITupleTable *tuptable, uint64 rows, int status)
Py_DECREF(result->rows);
result->rows = PyList_New(rows);
-
- PLy_input_setup_tuple(&ininfo, tuptable->tupdesc,
- exec_ctx->curr_proc);
-
- for (i = 0; i < rows; i++)
+ if (!result->rows)
{
- PyObject *row = PLy_input_from_tuple(&ininfo,
- tuptable->vals[i],
- tuptable->tupdesc);
+ Py_DECREF(result);
+ result = NULL;
+ }
+ else
+ {
+ PLy_input_setup_tuple(&ininfo, tuptable->tupdesc,
+ exec_ctx->curr_proc);
+
+ for (i = 0; i < rows; i++)
+ {
+ PyObject *row = PLy_input_from_tuple(&ininfo,
+ tuptable->vals[i],
+ tuptable->tupdesc);
- PyList_SetItem(result->rows, i, row);
+ PyList_SetItem(result->rows, i, row);
+ }
}
}