Beispiel #1
0
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;
}
Beispiel #2
0
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));
}