]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
cassandra: Fix setting timestamp for transaction queries with v3 protocol
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 7 Feb 2018 13:27:07 +0000 (15:27 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Fri, 9 Feb 2018 08:31:43 +0000 (10:31 +0200)
It was working for prepared statements, but not for non-prepared statements.

src/lib-sql/driver-cassandra.c

index 14999454b60075549d8c28c5ef1fc80a4b2443ae..0ce04b29f3e561de92f233c1f75590405860da38 100644 (file)
@@ -154,6 +154,7 @@ struct cassandra_transaction_context {
 
        struct cassandra_sql_statement *stmt;
        char *query;
+       cass_int64_t query_timestamp;
        char *error;
 
        unsigned int begin_succeeded:1;
@@ -1553,8 +1554,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,
@@ -2015,6 +2025,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);
        }
 }