bool BeatBoard::SearchApiService::readDrizzleField( struct json_object* my_array ) { drizzle_field_t field; size_t total; std::string data; std::vector<std::string> field_data; while (1) { field= drizzle_field_buffer(&drizzle_response.result, &total, &drizzle_response.ret); if ( drizzle_response.ret == DRIZZLE_RETURN_ROW_END) { std::cerr << "row end" << std::endl; fieldToJsonArray( my_array, field_data ); field_data.clear(); break; } else if ( drizzle_response.ret != DRIZZLE_RETURN_OK) { std::cerr << "drizzle_field_read: " << client->client_error() << std::endl; return false; } if (field != NULL) { data = std::string(field); field_data.push_back(data.substr(0, total)); } } return true; }
drizzle_row_t drizzle_row_buffer(drizzle_result_st *result, drizzle_return_t *ret_ptr) { size_t total; drizzle_field_t field; drizzle_row_t row; if (result->row == NULL) { if (drizzle_row_read(result, ret_ptr) == 0 || *ret_ptr != DRIZZLE_RETURN_OK) return NULL; result->row= malloc((sizeof(drizzle_field_t) + sizeof(size_t)) * result->column_count); if (result->row == NULL) { drizzle_set_error(result->con->drizzle, "drizzle_row_buffer", "malloc"); *ret_ptr= DRIZZLE_RETURN_MEMORY; return NULL; } result->field_sizes= (size_t *)(result->row + result->column_count); } while (1) { field= drizzle_field_buffer(result, &total, ret_ptr); if (*ret_ptr == DRIZZLE_RETURN_ROW_END) break; if (*ret_ptr != DRIZZLE_RETURN_OK) { if (*ret_ptr != DRIZZLE_RETURN_IO_WAIT) { free(result->row); result->row= NULL; result->field_sizes= NULL; } return NULL; } result->row[result->field_current - 1]= field; result->field_sizes[result->field_current - 1]= total; } *ret_ptr= DRIZZLE_RETURN_OK; row= result->row; result->row= NULL; return row; }