]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
cassandra: Include "prepared" when logging about prepared statement queries
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 16 Oct 2017 12:12:12 +0000 (15:12 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Wed, 18 Oct 2017 08:47:07 +0000 (11:47 +0300)
Mainly useful for debugging/testing.

src/lib-sql/driver-cassandra.c

index dfa341bc2818be1cc19b890713e64de4775208e1..fb24cc4d418379729aaa938d208c1c1620c3e3d5 100644 (file)
@@ -138,6 +138,7 @@ struct cassandra_result {
        sql_query_callback_t *callback;
        void *context;
 
+        unsigned int is_prepared:1;
        unsigned int query_sent:1;
        unsigned int finished:1;
        unsigned int paging_continues:1;
@@ -774,7 +775,8 @@ static void driver_cassandra_log_result(struct cassandra_result *result,
                i_fatal("gettimeofday() failed: %m");
 
        string_t *str = t_str_new(128);
-       str_printfa(str, "cassandra: Finished query '%s' (", result->query);
+       str_printfa(str, "cassandra: Finished %squery '%s' (",
+                   result->is_prepared ? "prepared " : "", result->query);
        if (all_pages) {
                str_printfa(str, "%u pages in total, ", result->page_num);
                row_count = result->total_row_count;
@@ -1101,6 +1103,7 @@ static void exec_callback(struct sql_result *_result ATTR_UNUSED,
 static struct cassandra_result *
 driver_cassandra_query_init(struct cassandra_db *db, const char *query,
                            enum cassandra_query_type query_type,
+                           bool is_prepared,
                            sql_query_callback_t *callback, void *context)
 {
        struct cassandra_result *result;
@@ -1113,6 +1116,7 @@ driver_cassandra_query_init(struct cassandra_db *db, const char *query,
        result->context = context;
        result->query_type = query_type;
        result->query = i_strdup(query);
+       result->is_prepared = is_prepared;
        array_append(&db->results, &result, 1);
        return result;
 }
@@ -1125,7 +1129,7 @@ driver_cassandra_query_full(struct sql_db *_db, const char *query,
        struct cassandra_db *db = (struct cassandra_db *)_db;
        struct cassandra_result *result;
 
-       result = driver_cassandra_query_init(db, query, query_type,
+       result = driver_cassandra_query_init(db, query, query_type, FALSE,
                                             callback, context);
        result->statement = cass_statement_new(query, 0);
        (void)driver_cassandra_send_query(result);
@@ -1350,6 +1354,7 @@ driver_cassandra_result_more(struct sql_result **_result, bool async,
        /* Initialize the next page as a new sql_result */
        new_result = driver_cassandra_query_init(db, old_result->query,
                                                 CASSANDRA_QUERY_TYPE_READ_MORE,
+                                                old_result->is_prepared,
                                                 callback, context);
 
        /* Preserve the statement and update its paging state */
@@ -1548,7 +1553,7 @@ driver_cassandra_transaction_commit(struct sql_transaction_context *_ctx,
                          transaction_commit_callback, ctx);
        } else {
                ctx->stmt->result =
-                       driver_cassandra_query_init(db, query, query_type,
+                       driver_cassandra_query_init(db, query, query_type, TRUE,
                                transaction_commit_callback, ctx);
                if (ctx->stmt->cass_stmt == NULL) {
                        /* wait for prepare to finish */
@@ -1956,9 +1961,11 @@ driver_cassandra_statement_query(struct sql_statement *_stmt,
                (struct cassandra_sql_statement *)_stmt;
        struct cassandra_db *db = (struct cassandra_db *)_stmt->db;
        const char *query = sql_statement_get_query(_stmt);
+       bool is_prepared = stmt->cass_stmt != NULL || stmt->prep != NULL;
 
        stmt->result = driver_cassandra_query_init(db, query,
                                                   CASSANDRA_QUERY_TYPE_READ,
+                                                  is_prepared,
                                                   callback, context);
        if (stmt->cass_stmt != NULL) {
                stmt->result->statement = stmt->cass_stmt;