From 2ff0ae56f05ba4884db50ee948cf508d2afbcb75 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rg=20Breitbart?= Date: Wed, 10 Sep 2025 03:30:36 +0200 Subject: [PATCH] fix windowing increment --- psycopg_c/psycopg_c/_psycopg/transform.pyx | 24 ++++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/psycopg_c/psycopg_c/_psycopg/transform.pyx b/psycopg_c/psycopg_c/_psycopg/transform.pyx index c88fcf1fa..22cab1348 100644 --- a/psycopg_c/psycopg_c/_psycopg/transform.pyx +++ b/psycopg_c/psycopg_c/_psycopg/transform.pyx @@ -26,8 +26,15 @@ from psycopg.rows import Row, RowMaker from psycopg._encodings import conn_encoding -cdef extern from "alloca.h": - void *alloca(Py_ssize_t size) +cdef extern from *: + """ + #ifdef _WIN32 + #include + #else + #include + #endif + """ + void* alloca(size_t size) NoneType = type(None) @@ -453,17 +460,17 @@ cdef class Transformer: cdef int advance row_loaders = self._row_loaders # avoid an incref/decref per item - while row0 < row1: - # TODO: make advance configurable - advance = 100 if row1 - row0 > 100 else row1 - row0 - for row in range(advance): + cdef int window = 100 + for pr0 in range(row0, row1, window): + pr1 = min(pr0 + window, row1) + for row in range(pr0, pr1): record = PyTuple_New(self._nfields) Py_INCREF(record) PyList_SET_ITEM(records, row, record) for col in range(self._nfields): loader = PyList_GET_ITEM(row_loaders, col) if (loader).cloader is not None: - for row in range(row0, row0+advance): + for row in range(pr0, pr1): brecord = PyList_GET_ITEM(records, row - row0) attval = &(ires.tuples[row][col]) if attval.len == -1: # NULL_LEN @@ -476,7 +483,7 @@ cdef class Transformer: PyTuple_SET_ITEM(brecord, col, pyval) else: - for row in range(row0, row0+advance): + for row in range(pr0, pr1): brecord = PyList_GET_ITEM(records, row - row0) attval = &(ires.tuples[row][col]) if attval.len == -1: # NULL_LEN @@ -491,7 +498,6 @@ cdef class Transformer: Py_INCREF(pyval) PyTuple_SET_ITEM(brecord, col, pyval) - row0 += advance if make_row is not tuple: for i in range(rowcount): -- 2.47.3