Mercurial > dovecot > core-2.2
changeset 20529:6450eb09e83c
cassandra: Support commit2 API
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sun, 17 Jul 2016 12:37:06 -0600 |
parents | b885fee56a82 |
children | 1d5136f4f27c |
files | src/lib-sql/driver-cassandra.c |
diffstat | 1 files changed, 19 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-sql/driver-cassandra.c Sun Jul 17 12:33:41 2016 -0600 +++ b/src/lib-sql/driver-cassandra.c Sun Jul 17 12:37:06 2016 -0600 @@ -113,7 +113,7 @@ struct sql_transaction_context ctx; int refcount; - sql_commit_callback_t *callback; + sql_commit2_callback_t *callback; void *context; pool_t query_pool; @@ -1164,27 +1164,35 @@ transaction_commit_callback(struct sql_result *result, void *context) { struct cassandra_transaction_context *ctx = context; + struct sql_commit_result commit_result; - if (sql_result_next_row(result) < 0) - ctx->callback(sql_result_get_error(result), ctx->context); - else - ctx->callback(NULL, ctx->context); + memset(&commit_result, 0, sizeof(commit_result)); + if (sql_result_next_row(result) < 0) { + commit_result.error = sql_result_get_error(result); + commit_result.error_type = sql_result_get_error_type(result); + } + ctx->callback(&commit_result, ctx->context); driver_cassandra_transaction_unref(&ctx); } static void driver_cassandra_transaction_commit(struct sql_transaction_context *_ctx, - sql_commit_callback_t *callback, void *context) + sql_commit2_callback_t *callback, void *context) { struct cassandra_transaction_context *ctx = (struct cassandra_transaction_context *)_ctx; enum cassandra_query_type query_type; + struct sql_commit_result result; + memset(&result, 0, sizeof(result)); ctx->callback = callback; ctx->context = context; if (ctx->failed || _ctx->head == NULL) { - callback(ctx->failed ? ctx->error : NULL, context); + if (ctx->failed) + result.error = ctx->error; + + callback(&result, context); driver_cassandra_transaction_unref(&ctx); } else if (_ctx->head->next == NULL) { /* just a single query, send it */ @@ -1196,7 +1204,8 @@ transaction_commit_callback, ctx); } else { /* multiple queries - we don't actually have a transaction though */ - callback("Multiple changes in transaction not supported", context); + result.error = "Multiple changes in transaction not supported"; + callback(&result, context); } } @@ -1335,14 +1344,14 @@ driver_cassandra_query_s, driver_cassandra_transaction_begin, - driver_cassandra_transaction_commit, + NULL, driver_cassandra_transaction_commit_s, driver_cassandra_transaction_rollback, driver_cassandra_update, driver_cassandra_escape_blob, - NULL + driver_cassandra_transaction_commit } };