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
 	}
 };