49 uint64_t drizzle_row_read(drizzle_result_st *result, drizzle_return_t *ret_ptr)
51 drizzle_return_t unused_ret;
59 *ret_ptr= DRIZZLE_RETURN_INVALID_ARGUMENT;
63 if ((result->column_current != result->column_count) && (!(result->options & DRIZZLE_RESULT_BUFFER_COLUMN)))
65 drizzle_set_error(result->con->drizzle,
"drizzle_row_read",
"cannot retrieve rows until all columns are retrieved");
66 *ret_ptr= DRIZZLE_RETURN_NOT_READY;
78 return result->row_current;
81 drizzle_row_t drizzle_row_buffer(drizzle_result_st *result,
82 drizzle_return_t *ret_ptr)
84 drizzle_return_t unused_ret;
92 *ret_ptr= DRIZZLE_RETURN_INVALID_ARGUMENT;
97 drizzle_field_t field;
100 if (result->row == NULL)
102 if (drizzle_row_read(result, ret_ptr) == 0 || *ret_ptr != DRIZZLE_RETURN_OK)
107 result->row= (drizzle_row_t)realloc(NULL, (
sizeof(drizzle_field_t) +
sizeof(
size_t)) * result->column_count);
108 if (result->row == NULL)
111 *ret_ptr= DRIZZLE_RETURN_MEMORY;
115 result->field_sizes= (
size_t *)(result->row + result->column_count);
120 field= drizzle_field_buffer(result, &total, ret_ptr);
121 if (*ret_ptr == DRIZZLE_RETURN_ROW_END)
124 if (*ret_ptr != DRIZZLE_RETURN_OK)
126 if (*ret_ptr != DRIZZLE_RETURN_IO_WAIT)
130 result->field_sizes= NULL;
136 result->row[result->field_current - 1]= field;
137 result->field_sizes[result->field_current - 1]= total;
140 *ret_ptr= DRIZZLE_RETURN_OK;
147 void drizzle_row_free(drizzle_result_st *result, drizzle_row_t row)
154 for (uint16_t x= 0; x < result->column_count; x++)
156 drizzle_field_free(row[x]);
162 size_t *drizzle_row_field_sizes(drizzle_result_st *result)
169 return result->field_sizes;
172 drizzle_row_t drizzle_row_next(drizzle_result_st *result)
176 return drizzle_row_t();
179 if (result->row_current == result->row_count)
184 result->field_sizes= result->field_sizes_list[result->row_current];
185 result->row_current++;
186 return result->row_list[result->row_current - 1];
189 drizzle_row_t drizzle_row_prev(drizzle_result_st *result)
193 return drizzle_row_t();
196 if (result->row_current == 0)
199 result->row_current--;
200 result->field_sizes= result->field_sizes_list[result->row_current];
201 return result->row_list[result->row_current];
204 void drizzle_row_seek(drizzle_result_st *result, uint64_t row)
211 if (row <= result->row_count)
212 result->row_current= row;
215 drizzle_row_t drizzle_row_index(drizzle_result_st *result, uint64_t row)
219 return drizzle_row_t();
222 if (row >= result->row_count)
225 return result->row_list[row];
228 uint64_t drizzle_row_current(drizzle_result_st *result)
235 return result->row_current;
242 drizzle_return_t drizzle_row_write(drizzle_result_st *result)
246 return DRIZZLE_RETURN_INVALID_ARGUMENT;
261 drizzle_return_t drizzle_state_row_read(drizzle_con_st *con)
265 return DRIZZLE_RETURN_INVALID_ARGUMENT;
270 if (con->packet_size != 0 && con->buffer_size < con->packet_size &&
271 con->buffer_size < 5)
274 return DRIZZLE_RETURN_OK;
277 if (con->packet_size == 5 && con->buffer_ptr[0] == 254)
280 con->result->row_current= 0;
281 con->result->warning_count= drizzle_get_byte2(con->buffer_ptr + 1);
282 con->status= drizzle_con_status_t(drizzle_get_byte2(con->buffer_ptr + 3));
284 con->buffer_size-= 5;
286 else if (con->buffer_ptr[0] == 255)
290 return DRIZZLE_RETURN_OK;
292 else if (con->result->options & DRIZZLE_RESULT_ROW_BREAK)
294 con->result->options&= ~int(DRIZZLE_RESULT_ROW_BREAK);
298 con->result->row_count++;
299 con->result->row_current++;
300 con->result->field_current= 0;
304 return DRIZZLE_RETURN_OK;
307 drizzle_return_t drizzle_state_row_write(drizzle_con_st *con)
311 return DRIZZLE_RETURN_INVALID_ARGUMENT;
314 uint8_t *start= con->buffer_ptr + con->buffer_size;
319 if (((
size_t)DRIZZLE_MAX_BUFFER_SIZE - (
size_t)(start - con->buffer)) < 4)
322 return DRIZZLE_RETURN_OK;
325 drizzle_set_byte3(start, con->packet_size);
326 start[3]= con->packet_number;
327 con->packet_number++;
329 con->buffer_size+= 4;
332 return DRIZZLE_RETURN_OK;