From 46f997b9a9c383def524c61ffe1c916e7793ef67 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 10 Dec 2013 12:44:13 -0500 Subject: [PATCH] handle array buffer replacement --- devsupApp/src/dbfield.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/devsupApp/src/dbfield.c b/devsupApp/src/dbfield.c index 60a60df..9e52c92 100644 --- a/devsupApp/src/dbfield.c +++ b/devsupApp/src/dbfield.c @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include "pydevsup.h" @@ -158,11 +160,26 @@ static PyObject* pyField_putval(pyField *self, PyObject* args) static PyObject *pyField_getarray(pyField *self) { #ifdef HAVE_NUMPY + rset *prset; int flags = NPY_CARRAY; - char *data=self->addr.pfield; + char *data; npy_intp dims[1] = {self->addr.no_elements}; PyArray_Descr *desc; + if(self->addr.special==SPC_DBADDR && + (prset=dbGetRset(&self->addr)) && + prset->get_array_info) + { + char *datasave=self->addr.pfield; + long noe, off; /* ignored */ + prset->get_array_info(&self->addr, &noe, &off); + data = self->addr.pfield; + /* get_array_info can modify pfield in >3.15.0.1 */ + self->addr.pfield = datasave; + + } else + data = self->addr.pfield; + if(self->addr.field_type>DBF_MENU) { PyErr_SetString(PyExc_TypeError, "Can not map field type to numpy type"); return NULL;