Skip to content

Commit d651761

Browse files
committed
Use itemsize and format for correct value detection
1 parent e30fcd3 commit d651761

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

src/carray.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,23 @@ CArrayBind_init(PyObject *self_, PyObject *args, PyObject *kwargs)
178178
if (flags == -1)
179179
{
180180
/* try to auto-detect format */
181-
if (0 == strcmp(self->view.format, "i"))
182-
flags = SQLITE_CARRAY_INT32;
183-
else if (0 == strcmp(self->view.format, "l"))
184-
flags = SQLITE_CARRAY_INT64;
185-
else if (0 == strcmp(self->view.format, "d"))
181+
if (0 == strcmp(self->view.format, "i") || 0 == strcmp(self->view.format, "l")
182+
|| 0 == strcmp(self->view.format, "q"))
183+
{
184+
switch (self->view.itemsize)
185+
{
186+
case 8:
187+
flags = SQLITE_CARRAY_INT64;
188+
break;
189+
case 4:
190+
flags = SQLITE_CARRAY_INT32;
191+
break;
192+
default:
193+
PyErr_Format(PyExc_ValueError, "int size %d not supported", self->view.itemsize);
194+
goto error;
195+
}
196+
}
197+
else if (0 == strcmp(self->view.format, "d") && self->view.itemsize == 8)
186198
flags = SQLITE_CARRAY_DOUBLE;
187199
else
188200
{

0 commit comments

Comments
 (0)