drizzle_return_t drizzle_result_buffer(drizzle_result_st *result) { drizzle_return_t ret; drizzle_row_t row; drizzle_row_t *row_list; size_t **field_sizes_list; if (!(result->options & DRIZZLE_RESULT_BUFFER_COLUMN)) { ret= drizzle_column_buffer(result); if (ret != DRIZZLE_RETURN_OK) return ret; } if (result->column_count == 0) { result->options|= DRIZZLE_RESULT_BUFFER_ROW; return DRIZZLE_RETURN_OK; } while (1) { row= drizzle_row_buffer(result, &ret); if (ret != DRIZZLE_RETURN_OK) return ret; if (row == NULL) break; if (result->row_list_size < result->row_count) { row_list= realloc(result->row_list, sizeof(drizzle_row_t) * ((size_t)(result->row_list_size) + DRIZZLE_ROW_GROW_SIZE)); if (row_list == NULL) { drizzle_row_free(result, row); drizzle_set_error(result->con->drizzle, "drizzle_result_buffer", "realloc"); return DRIZZLE_RETURN_MEMORY; } result->row_list= row_list; field_sizes_list= realloc(result->field_sizes_list, sizeof(size_t *) * ((size_t)(result->row_list_size) + DRIZZLE_ROW_GROW_SIZE)); if (field_sizes_list == NULL) { drizzle_row_free(result, row); drizzle_set_error(result->con->drizzle, "drizzle_result_buffer", "realloc"); return DRIZZLE_RETURN_MEMORY; } result->field_sizes_list= field_sizes_list; result->row_list_size+= DRIZZLE_ROW_GROW_SIZE; } result->row_list[result->row_current - 1]= row; result->field_sizes_list[result->row_current - 1]= result->field_sizes; } result->options|= DRIZZLE_RESULT_BUFFER_ROW; return DRIZZLE_RETURN_OK; }
static void buffer_column_if_needed(drizzle_result_st *self_ptr) { if(self_ptr->options & DRIZZLE_RESULT_BUFFER_COLUMN) return; CHECK_OK(drizzle_column_buffer(self_ptr)); }