168
static char _mysql_ResultObject_field_flags__doc__[] =
169
"Returns a tuple of field flags, one for each column in the result.\n\
173
_mysql_ResultObject_field_flags(
174
_mysql_ResultObject *self,
181
check_result_connection(self);
182
n = mysql_num_fields(self->result);
183
fields = mysql_fetch_fields(self->result);
184
if (!(d = PyTuple_New(n))) return NULL;
185
for (i=0; i<n; i++) {
187
if (!(f = PyInt_FromLong((long)fields[i].flags))) goto error;
188
PyTuple_SET_ITEM(d, i, f);
197
_mysql_field_to_python(
200
unsigned long length)
204
if (decoder != Py_None)
205
v = PyObject_CallFunction(decoder,
210
v = PyString_FromStringAndSize(rowitem,
223
_mysql_ResultObject *self,
227
unsigned long *length;
230
n = mysql_num_fields(self->result);
231
if (!(r = PyTuple_New(n))) return NULL;
232
length = mysql_fetch_lengths(self->result);
233
for (i=0; i<n; i++) {
235
c = PyTuple_GET_ITEM(self->decoders, i);
236
v = _mysql_field_to_python(c, row[i], length[i]);
238
PyTuple_SET_ITEM(r, i, v);
248
_mysql_ResultObject *self,
252
unsigned long *length;
256
n = mysql_num_fields(self->result);
257
if (!(r = PyDict_New())) return NULL;
258
length = mysql_fetch_lengths(self->result);
259
fields = mysql_fetch_fields(self->result);
260
for (i=0; i<n; i++) {
262
c = PyTuple_GET_ITEM(self->decoders, i);
263
v = _mysql_field_to_python(c, row[i], length[i]);
265
if (!PyMapping_HasKeyString(r, fields[i].name)) {
266
PyMapping_SetItemString(r, fields[i].name, v);
270
strncpy(buf, fields[i].table, 256);
272
strncat(buf, ".", 256-len);
274
strncat(buf, fields[i].name, 256-len);
275
PyMapping_SetItemString(r, buf, v);
286
_mysql_row_to_dict_old(
287
_mysql_ResultObject *self,
291
unsigned long *length;
295
n = mysql_num_fields(self->result);
296
if (!(r = PyDict_New())) return NULL;
297
length = mysql_fetch_lengths(self->result);
298
fields = mysql_fetch_fields(self->result);
299
for (i=0; i<n; i++) {
301
c = PyTuple_GET_ITEM(self->decoders, i);
302
v = _mysql_field_to_python(c, row[i], length[i]);
307
if (strlen(fields[i].table)) {
308
strncpy(buf, fields[i].table, 256);
310
strncat(buf, ".", 256-len);
313
strncat(buf, fields[i].name, 256-len);
314
PyMapping_SetItemString(r, buf, v);
324
typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW);
328
_mysql_ResultObject *self,
332
_PYFUNC *convert_row)
337
for (i = skiprows; i<(skiprows+maxrows); i++) {
340
row = mysql_fetch_row(self->result);
342
Py_BEGIN_ALLOW_THREADS;
343
row = mysql_fetch_row(self->result);
344
Py_END_ALLOW_THREADS;
346
if (!row && mysql_errno(&(((_mysql_ConnectionObject *)(self->conn))->connection))) {
347
_mysql_Exception((_mysql_ConnectionObject *)self->conn);
351
if (_PyTuple_Resize(r, i) == -1) goto error;
354
v = convert_row(self, row);
356
PyTuple_SET_ITEM(*r, i, v);
363
136
static char _mysql_ResultObject_fetch_row__doc__[] =
364
"fetch_row([maxrows, how]) -- Fetches up to maxrows as a tuple.\n\
365
The rows are formatted according to how:\n\
367
0 -- tuples (default)\n\
368
1 -- dictionaries, key=column or table.column if duplicated\n\
369
2 -- dictionaries, key=table.column\n\
373
_mysql_ResultObject_fetch_row(
374
_mysql_ResultObject *self,
378
typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW);
379
static char *kwlist[] = { "maxrows", "how", NULL };
380
static _PYFUNC *row_converters[] =
384
_mysql_row_to_dict_old
386
_PYFUNC *convert_row;
387
unsigned int maxrows=1, how=0, skiprows=0, rowsadded;
390
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii:fetch_row", kwlist,
393
check_result_connection(self);
394
if (how < 0 || how >= sizeof(row_converters)) {
395
PyErr_SetString(PyExc_ValueError, "how out of range");
398
convert_row = row_converters[how];
400
if (!(r = PyTuple_New(maxrows))) goto error;
401
rowsadded = _mysql__fetch_row(self, &r, skiprows, maxrows,
403
if (rowsadded == -1) goto error;
407
if (!(r = PyTuple_New(maxrows))) goto error;
409
rowsadded = _mysql__fetch_row(self, &r, skiprows,
410
maxrows, convert_row);
411
if (rowsadded == -1) goto error;
412
skiprows += rowsadded;
413
if (rowsadded < maxrows) break;
414
if (_PyTuple_Resize(&r, skiprows + maxrows) == -1)
418
/* XXX if overflow, maxrows<0? */
419
maxrows = (int) mysql_num_rows(self->result);
420
if (!(r = PyTuple_New(maxrows))) goto error;
421
rowsadded = _mysql__fetch_row(self, &r, 0,
422
maxrows, convert_row);
423
if (rowsadded == -1) goto error;
432
static char _mysql_ResultObject_simple_fetch_row__doc__[] =
433
"simple_fetchrow()\n\
434
138
Fetches one row as a tuple of strings.\n\
435
139
NULL is returned as None.\n\
140
A single None indicates the end of the result set.\n\
438
143
static PyObject *
439
_mysql_ResultObject_simple_fetch_row(
144
_mysql_ResultObject_fetch_row(
440
145
_mysql_ResultObject *self,
443
148
unsigned int n, i;
444
149
unsigned long *length;
445
150
PyObject *r=NULL;
448
check_result_connection(self);
153
check_result_connection(self);
451
156
row = mysql_fetch_row(self->result);
453
Py_BEGIN_ALLOW_THREADS;
158
Py_BEGIN_ALLOW_THREADS;
454
159
row = mysql_fetch_row(self->result);
455
Py_END_ALLOW_THREADS;
160
Py_END_ALLOW_THREADS;
457
162
if (!row && mysql_errno(&(((_mysql_ConnectionObject *)(self->conn))->connection))) {
458
163
_mysql_Exception((_mysql_ConnectionObject *)self->conn);
474
179
} else /* NULL */ {
478
183
PyTuple_SET_ITEM(r, i, v);
191
static char _mysql_ResultObject_field_flags__doc__[] =
192
"Returns a tuple of field flags, one for each column in the result.\n\
196
_mysql_ResultObject_field_flags(
197
_mysql_ResultObject *self,
204
check_result_connection(self);
205
n = mysql_num_fields(self->result);
206
fields = mysql_fetch_fields(self->result);
207
if (!(d = PyTuple_New(n))) return NULL;
208
for (i=0; i<n; i++) {
210
if (!(f = PyInt_FromLong((long)fields[i].flags))) goto error;
211
PyTuple_SET_ITEM(d, i, f);
219
typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW);
221
static char _mysql_ResultObject_clear__doc__[] =
223
Reads to the end of the result set, discarding all the rows.\n\
227
_mysql_ResultObject_clear(
228
_mysql_ResultObject *self,
233
Py_BEGIN_ALLOW_THREADS;
234
while (mysql_fetch_row(self->result));
235
Py_END_ALLOW_THREADS;
237
if (mysql_errno(&(((_mysql_ConnectionObject *)(self->conn))->connection))) {
238
_mysql_Exception((_mysql_ConnectionObject *)self->conn);
243
Py_XDECREF(self->fields);
245
Py_XDECREF(self->conn);
248
mysql_free_result(self->result);
486
255
static PyObject *
487
256
_mysql_ResultObject__iter__(
488
257
_mysql_ResultObject *self,