changeset 22810:41c67443c1c5

cassandra: Fix setting timestamp for transaction queries with v3 protocol It was working for prepared statements, but not for non-prepared statements.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 07 Feb 2018 15:27:07 +0200
parents 9d921404799f
children d880c3334a2f
files src/lib-sql/driver-cassandra.c
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-sql/driver-cassandra.c	Mon Jan 29 19:10:38 2018 +0100
+++ b/src/lib-sql/driver-cassandra.c	Wed Feb 07 15:27:07 2018 +0200
@@ -154,6 +154,7 @@
 
 	struct cassandra_sql_statement *stmt;
 	char *query;
+	cass_int64_t query_timestamp;
 	char *error;
 
 	unsigned int begin_succeeded:1;
@@ -1553,8 +1554,17 @@
 		query_type = CASSANDRA_QUERY_TYPE_WRITE;
 
 	if (ctx->query != NULL) {
-		driver_cassandra_query_full(_ctx->db, query, query_type,
-			  transaction_commit_callback, ctx);
+		struct cassandra_result *cass_result;
+
+		cass_result = driver_cassandra_query_init(db, query, query_type,
+			FALSE, transaction_commit_callback, ctx);
+		cass_result->statement = cass_statement_new(query, 0);
+		if (ctx->query_timestamp != 0) {
+			cass_result->timestamp = ctx->query_timestamp;
+			cass_statement_set_timestamp(cass_result->statement,
+						     ctx->query_timestamp);
+		}
+		(void)driver_cassandra_send_query(cass_result);
 	} else {
 		ctx->stmt->result =
 			driver_cassandra_query_init(db, query, query_type, TRUE,
@@ -2015,6 +2025,7 @@
 		ctx->stmt = stmt;
 	else {
 		ctx->query = i_strdup(sql_statement_get_query(_stmt));
+		ctx->query_timestamp = stmt->timestamp;
 		pool_unref(&_stmt->pool);
 	}
 }