Commit 918e02a2 authored by Peter Eisentraut's avatar Peter Eisentraut

Improve type conversion of SPI_processed in Python

The previous code converted SPI_processed to a Python float if it didn't
fit into a Python int.  But Python longs have unlimited precision, so
use that instead in all cases.

As in eee50a8d, we use the Python
LongLong API unconditionally for simplicity.
Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
parent 96102a32
......@@ -444,9 +444,7 @@ PLy_cursor_fetch(PyObject *self, PyObject *args)
ret->status = PyInt_FromLong(SPI_OK_FETCH);
Py_DECREF(ret->nrows);
ret->nrows = (SPI_processed > (uint64) LONG_MAX) ?
PyFloat_FromDouble((double) SPI_processed) :
PyInt_FromLong((long) SPI_processed);
ret->nrows = PyLong_FromUnsignedLongLong(SPI_processed);
if (SPI_processed != 0)
{
......
......@@ -371,9 +371,7 @@ PLy_spi_execute_fetch_result(SPITupleTable *tuptable, uint64 rows, int status)
if (status > 0 && tuptable == NULL)
{
Py_DECREF(result->nrows);
result->nrows = (rows > (uint64) LONG_MAX) ?
PyFloat_FromDouble((double) rows) :
PyInt_FromLong((long) rows);
result->nrows = PyLong_FromUnsignedLongLong(rows);
}
else if (status > 0 && tuptable != NULL)
{
......@@ -381,9 +379,7 @@ PLy_spi_execute_fetch_result(SPITupleTable *tuptable, uint64 rows, int status)
MemoryContext cxt;
Py_DECREF(result->nrows);
result->nrows = (rows > (uint64) LONG_MAX) ?
PyFloat_FromDouble((double) rows) :
PyInt_FromLong((long) rows);
result->nrows = PyLong_FromUnsignedLongLong(rows);
cxt = AllocSetContextCreate(CurrentMemoryContext,
"PL/Python temp context",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment