From: Timo Sirainen Date: Wed, 7 Feb 2018 13:27:07 +0000 (+0200) Subject: cassandra: Fix setting timestamp for transaction queries with v3 protocol X-Git-Tag: 2.3.9~2359 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af619a25952f5ba550800daf69a119247b1fcda3;p=thirdparty%2Fdovecot%2Fcore.git cassandra: Fix setting timestamp for transaction queries with v3 protocol It was working for prepared statements, but not for non-prepared statements. --- diff --git a/src/lib-sql/driver-cassandra.c b/src/lib-sql/driver-cassandra.c index cff48ac1b6..5e8b260f27 100644 --- a/src/lib-sql/driver-cassandra.c +++ b/src/lib-sql/driver-cassandra.c @@ -154,6 +154,7 @@ struct cassandra_transaction_context { struct cassandra_sql_statement *stmt; char *query; + cass_int64_t query_timestamp; char *error; bool begin_succeeded:1; @@ -1556,8 +1557,17 @@ driver_cassandra_transaction_commit(struct sql_transaction_context *_ctx, 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, @@ -2018,6 +2028,7 @@ driver_cassandra_update_stmt(struct sql_transaction_context *_ctx, ctx->stmt = stmt; else { ctx->query = i_strdup(sql_statement_get_query(_stmt)); + ctx->query_timestamp = stmt->timestamp; pool_unref(&_stmt->pool); } }