39
39
* @brief Result definitions
42
#include <libdrizzle-2.0/common.h>
46
46
* Common definitions
49
drizzle_result_st *drizzle_result_create(drizzle_con_st *con,
50
drizzle_result_st *result)
49
drizzle_result_st *drizzle_result_create(drizzle_con_st *con)
51
return drizzle_result_create_with(con, NULL);
54
drizzle_result_st *drizzle_result_create_with(drizzle_con_st *con,
55
drizzle_result_st *result)
52
57
if (result == NULL)
54
result= new drizzle_result_st;
55
result->options|= DRIZZLE_RESULT_ALLOCATED;
59
result= new (std::nothrow) drizzle_result_st;
66
result->_options.is_allocated= true;
104
117
drizzle_result_st *drizzle_result_clone(drizzle_con_st *con,
105
drizzle_result_st *result,
106
drizzle_result_st *from)
118
drizzle_result_st *source)
108
result= drizzle_result_create(con, result);
120
drizzle_result_st *result= drizzle_result_create(con);
109
121
if (result == NULL)
112
result->options|= from->options & ~DRIZZLE_RESULT_ALLOCATED;
114
drizzle_result_set_info(result, from->info);
115
result->error_code= from->error_code;
116
drizzle_result_set_sqlstate(result, from->sqlstate);
117
result->warning_count= from->warning_count;
118
result->insert_id= from->insert_id;
119
result->affected_rows= from->affected_rows;
120
result->column_count= from->column_count;
121
result->row_count= from->row_count;
126
result->options= source->options;
128
drizzle_result_set_info(result, source->info);
129
result->error_code= source->error_code;
130
drizzle_result_set_sqlstate(result, source->sqlstate);
131
result->warning_count= source->warning_count;
132
result->insert_id= source->insert_id;
133
result->affected_rows= source->affected_rows;
134
result->column_count= source->column_count;
135
result->row_count= source->row_count;
126
140
void drizzle_result_free(drizzle_result_st *result)
128
142
drizzle_column_st *column;
131
149
for (column= result->column_list; column != NULL; column= result->column_list)
132
151
drizzle_column_free(column);
134
154
delete[] result->column_buffer;
136
156
if (result->options & DRIZZLE_RESULT_BUFFER_ROW)
138
for (x= 0; x < result->row_count; x++)
139
drizzle_row_free(result, result->row_list->at(static_cast<size_t>(x)));
158
for (size_t x= 0; x < result->row_count; x++)
160
drizzle_row_free(result, result->row_list->at(x));
141
163
delete result->row_list;
142
164
delete result->field_sizes_list;
148
170
if (result->con->result_list == result)
149
171
result->con->result_list= result->next;
151
174
if (result->prev)
152
175
result->prev->next= result->next;
153
177
if (result->next)
154
178
result->next->prev= result->prev;
156
if (result->options & DRIZZLE_RESULT_ALLOCATED)
180
if (result->_options.is_allocated)
160
186
void drizzle_result_free_all(drizzle_con_st *con)
162
188
while (con->result_list != NULL)
163
190
drizzle_result_free(con->result_list);
166
194
drizzle_con_st *drizzle_result_drizzle_con(drizzle_result_st *result)
168
201
return result->con;
171
204
bool drizzle_result_eof(drizzle_result_st *result)
173
211
return (result->options & DRIZZLE_RESULT_EOF_PACKET) ? true : false;
176
214
const char *drizzle_result_info(drizzle_result_st *result)
178
221
return result->info;
181
224
const char *drizzle_result_error(drizzle_result_st *result)
183
231
return result->info;
186
234
uint16_t drizzle_result_error_code(drizzle_result_st *result)
188
241
return result->error_code;
191
244
const char *drizzle_result_sqlstate(drizzle_result_st *result)
193
251
return result->sqlstate;
196
254
uint16_t drizzle_result_warning_count(drizzle_result_st *result)
198
261
return result->warning_count;
201
264
uint64_t drizzle_result_insert_id(drizzle_result_st *result)
203
271
return result->insert_id;
206
274
uint64_t drizzle_result_affected_rows(drizzle_result_st *result)
208
281
return result->affected_rows;
211
284
uint16_t drizzle_result_column_count(drizzle_result_st *result)
213
291
return result->column_count;
216
294
uint64_t drizzle_result_row_count(drizzle_result_st *result)
218
301
return result->row_count;
226
309
drizzle_result_st *result,
227
310
drizzle_return_t *ret_ptr)
312
drizzle_return_t unused;
320
*ret_ptr= DRIZZLE_RETURN_INVALID_ARGUMENT;
229
324
if (drizzle_state_none(con))
231
con->result= drizzle_result_create(con, result);
326
con->result= drizzle_result_create_with(con, result);
232
327
if (con->result == NULL)
234
329
*ret_ptr= DRIZZLE_RETURN_MEMORY;
246
341
drizzle_return_t drizzle_result_buffer(drizzle_result_st *result)
248
drizzle_return_t ret;
345
return DRIZZLE_RETURN_INVALID_ARGUMENT;
251
348
if (!(result->options & DRIZZLE_RESULT_BUFFER_COLUMN))
253
ret= drizzle_column_buffer(result);
350
drizzle_return_t ret= drizzle_column_buffer(result);
254
351
if (ret != DRIZZLE_RETURN_OK)
258
357
if (result->column_count == 0)
266
row= drizzle_row_buffer(result, &ret);
365
drizzle_return_t ret;
366
drizzle_row_t row= drizzle_row_buffer(result, &ret);
267
367
if (ret != DRIZZLE_RETURN_OK)
273
377
if (result->row_list == NULL)
275
result->row_list= new drizzle_row_list_t;
379
result->row_list= new (std::nothrow) drizzle_row_list_t;
381
if (result->row_list == NULL)
383
return DRIZZLE_RETURN_MEMORY;
279
388
if (result->field_sizes_list == NULL)
281
result->field_sizes_list= new drizzle_field_sizes_list_t;
390
result->field_sizes_list= new (std::nothrow) drizzle_field_sizes_list_t;
392
if (result->field_sizes_list == NULL)
284
397
result->row_list->push_back(row);
301
420
drizzle_return_t drizzle_result_write(drizzle_con_st *con,
302
421
drizzle_result_st *result, bool flush)
425
return DRIZZLE_RETURN_INVALID_ARGUMENT;
304
428
if (drizzle_state_none(con))
306
430
con->result= result;
323
452
const drizzle_field_t *field,
324
453
const size_t *size)
328
460
result->con->packet_size= 0;
330
for (x= 0; x < result->column_count; x++)
462
for (uint16_t x= 0; x < result->column_count; x++)
332
464
if (field[x] == NULL)
333
466
result->con->packet_size++;
334
468
else if (size[x] < 251)
335
470
result->con->packet_size+= (1 + size[x]);
336
472
else if (size[x] < 65536)
337
474
result->con->packet_size+= (3 + size[x]);
338
476
else if (size[x] < 16777216)
339
478
result->con->packet_size+= (4 + size[x]);
341
482
result->con->packet_size+= (9 + size[x]);
345
487
void drizzle_result_set_eof(drizzle_result_st *result, bool is_eof)
348
496
result->options|= DRIZZLE_RESULT_EOF_PACKET;
350
500
result->options&= ~DRIZZLE_RESULT_EOF_PACKET;
353
504
void drizzle_result_set_info(drizzle_result_st *result, const char *info)
355
511
if (info == NULL)
356
513
result->info[0]= 0;
359
517
strncpy(result->info, info, DRIZZLE_MAX_INFO_SIZE);
364
522
void drizzle_result_set_error(drizzle_result_st *result, const char *error)
366
529
drizzle_result_set_info(result, error);
369
532
void drizzle_result_set_error_code(drizzle_result_st *result,
370
533
uint16_t error_code)
372
540
result->error_code= error_code;
375
543
void drizzle_result_set_sqlstate(drizzle_result_st *result,
376
544
const char *sqlstate)
378
551
if (sqlstate == NULL)
379
553
result->sqlstate[0]= 0;
382
557
strncpy(result->sqlstate, sqlstate, DRIZZLE_MAX_SQLSTATE_SIZE + 1);
387
562
void drizzle_result_set_warning_count(drizzle_result_st *result,
388
563
uint16_t warning_count)
390
570
result->warning_count= warning_count;
393
573
void drizzle_result_set_insert_id(drizzle_result_st *result,
394
574
uint64_t insert_id)
396
581
result->insert_id= insert_id;
399
584
void drizzle_result_set_affected_rows(drizzle_result_st *result,
400
585
uint64_t affected_rows)
402
592
result->affected_rows= affected_rows;
405
595
void drizzle_result_set_column_count(drizzle_result_st *result,
406
596
uint16_t column_count)
408
603
result->column_count= column_count;
417
612
drizzle_return_t ret;
616
return DRIZZLE_RETURN_INVALID_ARGUMENT;
419
620
drizzle_log_debug(con->drizzle, "drizzle_state_result_read");
421
622
/* Assume the entire result packet will fit in the buffer. */
422
623
if (con->buffer_size < con->packet_size)
424
625
drizzle_state_push(con, drizzle_state_read);
425
627
return DRIZZLE_RETURN_OK;
513
721
/* Assume the entire result packet will fit in the buffer. */
514
722
if ((con->packet_size + 4) > DRIZZLE_MAX_BUFFER_SIZE)
516
drizzle_set_error(con->drizzle, "drizzle_state_result_write",
517
"buffer too small:%zu", con->packet_size + 4);
724
drizzle_set_error(con->drizzle, "drizzle_state_result_write", "buffer too small:%zu", con->packet_size + 4);
518
726
return DRIZZLE_RETURN_INTERNAL_ERROR;