drizzle_field_t drizzle_field_read(drizzle_result_st *result, size_t *offset, size_t *size, size_t *total, drizzle_return_t *ret_ptr) { if (drizzle_state_none(result->con)) { if (result->field_current == result->column_count) { *ret_ptr= DRIZZLE_RETURN_ROW_END; return NULL; } drizzle_state_push(result->con, drizzle_state_field_read); } *ret_ptr= drizzle_state_loop(result->con); if (*ret_ptr == DRIZZLE_RETURN_OK && result->options & DRIZZLE_RESULT_ROW_BREAK) { *ret_ptr= DRIZZLE_RETURN_ROW_BREAK; } *offset= result->field_offset; *size= result->field_size; *total= result->field_total; return result->field; }
drizzle_return_t drizzle_row_write(drizzle_result_st *result) { if (drizzle_state_none(result->con)) drizzle_state_push(result->con, drizzle_state_row_write); return drizzle_state_loop(result->con); }
uint64_t drizzle_row_read(drizzle_result_st *result, drizzle_return_t *ret_ptr) { if (drizzle_state_none(result->con)) { drizzle_state_push(result->con, drizzle_state_row_read); drizzle_state_push(result->con, drizzle_state_packet_read); } *ret_ptr= drizzle_state_loop(result->con); return result->row_current; }
drizzle_return_t drizzle_column_write(drizzle_result_st *result, drizzle_column_st *column) { if (drizzle_state_none(result->con)) { result->column= column; drizzle_state_push(result->con, drizzle_state_column_write); } return drizzle_state_loop(result->con); }
drizzle_return_t drizzle_column_skip(drizzle_result_st *result) { if (drizzle_state_none(result->con)) { result->options|= DRIZZLE_RESULT_SKIP_COLUMN; drizzle_state_push(result->con, drizzle_state_column_read); drizzle_state_push(result->con, drizzle_state_packet_read); } return drizzle_state_loop(result->con); }
drizzle_return_t drizzle_result_write(drizzle_con_st *con, drizzle_result_st *result, bool flush) { if (drizzle_state_none(con)) { con->result= result; if (flush) drizzle_state_push(con, drizzle_state_write); drizzle_state_push(con, drizzle_state_result_write); } return drizzle_state_loop(con); }
drizzle_column_st *drizzle_column_read(drizzle_result_st *result, drizzle_column_st *column, drizzle_return_t *ret_ptr) { if (drizzle_state_none(result->con)) { result->column= column; drizzle_state_push(result->con, drizzle_state_column_read); drizzle_state_push(result->con, drizzle_state_packet_read); } *ret_ptr= drizzle_state_loop(result->con); return result->column; }
drizzle_result_st *drizzle_result_read(drizzle_con_st *con, drizzle_result_st *result, drizzle_return_t *ret_ptr) { if (drizzle_state_none(con)) { con->result= drizzle_result_create(con, result); if (con->result == NULL) { *ret_ptr= DRIZZLE_RETURN_MEMORY; return NULL; } drizzle_state_push(con, drizzle_state_result_read); drizzle_state_push(con, drizzle_state_packet_read); } *ret_ptr= drizzle_state_loop(con); return con->result; }
drizzle_return_t drizzle_state_loop(drizzle_con_st *con) { drizzle_return_t ret; while (!drizzle_state_none(con)) { ret= con->state_stack[con->state_current - 1](con); if (ret != DRIZZLE_RETURN_OK) { if (ret != DRIZZLE_RETURN_IO_WAIT && ret != DRIZZLE_RETURN_PAUSE && ret != DRIZZLE_RETURN_ERROR_CODE) { drizzle_con_close(con); } return ret; } } return DRIZZLE_RETURN_OK; }
drizzle_return_t drizzle_field_write(drizzle_result_st *result, const drizzle_field_t field, size_t size, size_t total) { drizzle_return_t ret; if (drizzle_state_none(result->con)) { if (result->options & DRIZZLE_RESULT_ROW_BREAK) { result->options&= (drizzle_result_options_t)~DRIZZLE_RESULT_ROW_BREAK; result->field= field; result->field_size= size; } else { result->field= field; result->field_size= size; result->field_offset= 0; result->field_total= total; } drizzle_state_push(result->con, drizzle_state_field_write); } else if (result->field == NULL) { result->field= field; result->field_size= size; } ret= drizzle_state_loop(result->con); if (ret == DRIZZLE_RETURN_PAUSE) ret= DRIZZLE_RETURN_OK; return ret; }