driver-cassandra.c (dovecot-2.3.16) | : | driver-cassandra.c (dovecot-2.3.17) | ||
---|---|---|---|---|
skipping to change at line 2175 | skipping to change at line 2175 | |||
{ | { | |||
const struct cassandra_sql_arg *arg; | const struct cassandra_sql_arg *arg; | |||
if (stmt->prep->prepared == NULL) { | if (stmt->prep->prepared == NULL) { | |||
i_assert(stmt->prep->error != NULL); | i_assert(stmt->prep->error != NULL); | |||
if (stmt->result != NULL) { | if (stmt->result != NULL) { | |||
stmt->result->error = i_strdup(stmt->prep->error); | stmt->result->error = i_strdup(stmt->prep->error); | |||
result_finish(stmt->result); | result_finish(stmt->result); | |||
} | } | |||
pool_unref(&stmt->stmt.pool); | ||||
return; | return; | |||
} | } | |||
stmt->cass_stmt = cass_prepared_bind(stmt->prep->prepared); | stmt->cass_stmt = cass_prepared_bind(stmt->prep->prepared); | |||
if (stmt->timestamp != 0) | if (stmt->timestamp != 0) | |||
cass_statement_set_timestamp(stmt->cass_stmt, stmt->timestamp); | cass_statement_set_timestamp(stmt->cass_stmt, stmt->timestamp); | |||
if (array_is_created(&stmt->pending_args)) { | if (array_is_created(&stmt->pending_args)) { | |||
array_foreach(&stmt->pending_args, arg) | array_foreach(&stmt->pending_args, arg) | |||
prepare_finish_arg(stmt, arg); | prepare_finish_arg(stmt, arg); | |||
skipping to change at line 2482 | skipping to change at line 2483 | |||
} | } | |||
if (stmt->prep != NULL) | if (stmt->prep != NULL) | |||
ctx->stmt = stmt; | ctx->stmt = stmt; | |||
else { | else { | |||
ctx->query = i_strdup(sql_statement_get_query(_stmt)); | ctx->query = i_strdup(sql_statement_get_query(_stmt)); | |||
ctx->query_timestamp = stmt->timestamp; | ctx->query_timestamp = stmt->timestamp; | |||
pool_unref(&_stmt->pool); | pool_unref(&_stmt->pool); | |||
} | } | |||
} | } | |||
static bool driver_cassandra_have_work(struct cassandra_db *db) | ||||
{ | ||||
return array_not_empty(&db->pending_prepares) || | ||||
array_not_empty(&db->callbacks) || | ||||
array_not_empty(&db->results); | ||||
} | ||||
static void driver_cassandra_wait(struct sql_db *_db) | ||||
{ | ||||
struct cassandra_db *db = (struct cassandra_db *)_db; | ||||
if (!driver_cassandra_have_work(db)) | ||||
return; | ||||
struct ioloop *prev_ioloop = current_ioloop; | ||||
db->ioloop = io_loop_create(); | ||||
db->io_pipe = io_loop_move_io(&db->io_pipe); | ||||
while (driver_cassandra_have_work(db)) | ||||
io_loop_run(db->ioloop); | ||||
io_loop_set_current(prev_ioloop); | ||||
db->io_pipe = io_loop_move_io(&db->io_pipe); | ||||
io_loop_set_current(db->ioloop); | ||||
io_loop_destroy(&db->ioloop); | ||||
} | ||||
const struct sql_db driver_cassandra_db = { | const struct sql_db driver_cassandra_db = { | |||
.name = "cassandra", | .name = "cassandra", | |||
.flags = SQL_DB_FLAG_PREP_STATEMENTS, | .flags = SQL_DB_FLAG_PREP_STATEMENTS, | |||
.v = { | .v = { | |||
.init_full = driver_cassandra_init_full_v, | .init_full = driver_cassandra_init_full_v, | |||
.deinit = driver_cassandra_deinit_v, | .deinit = driver_cassandra_deinit_v, | |||
.connect = driver_cassandra_connect, | .connect = driver_cassandra_connect, | |||
.disconnect = driver_cassandra_disconnect, | .disconnect = driver_cassandra_disconnect, | |||
.escape_string = driver_cassandra_escape_string, | .escape_string = driver_cassandra_escape_string, | |||
.exec = driver_cassandra_exec, | .exec = driver_cassandra_exec, | |||
.query = driver_cassandra_query, | .query = driver_cassandra_query, | |||
.query_s = driver_cassandra_query_s, | .query_s = driver_cassandra_query_s, | |||
.wait = driver_cassandra_wait, | ||||
.transaction_begin = driver_cassandra_transaction_begin, | .transaction_begin = driver_cassandra_transaction_begin, | |||
.transaction_commit = driver_cassandra_transaction_commit, | .transaction_commit = driver_cassandra_transaction_commit, | |||
.transaction_commit_s = driver_cassandra_transaction_commit_s, | .transaction_commit_s = driver_cassandra_transaction_commit_s, | |||
.transaction_rollback = driver_cassandra_transaction_rollback, | .transaction_rollback = driver_cassandra_transaction_rollback, | |||
.update = driver_cassandra_update, | .update = driver_cassandra_update, | |||
.escape_blob = driver_cassandra_escape_blob, | .escape_blob = driver_cassandra_escape_blob, | |||
End of changes. 3 change blocks. | ||||
0 lines changed or deleted | 28 lines changed or added |