# HG changeset patch # User Timo Sirainen # Date 1468780626 21600 # Node ID 6450eb09e83c11fab0def2e096f7092e23e767b7 # Parent b885fee56a82628f9cc8200af37917b149a9f483 cassandra: Support commit2 API diff -r b885fee56a82 -r 6450eb09e83c src/lib-sql/driver-cassandra.c --- 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 } };