]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
cassandra: Rename query to log_query and initialize it with sql_statement_get_log_query()
authorMarkus Valentin <markus.valentin@open-xchange.com>
Mon, 5 Dec 2022 10:58:31 +0000 (11:58 +0100)
committerMarkus Valentin <markus.valentin@open-xchange.com>
Mon, 12 Dec 2022 13:26:06 +0000 (14:26 +0100)
Also add sql_statement_get_log_query() to sql-api.

src/lib-sql/driver-cassandra.c
src/lib-sql/sql-api-private.h
src/lib-sql/sql-api.c

index 4e6680957337f508d4460e702a57f1edb88c5e8e..2b86a126c50059e287bbef0dcf7396b562087865 100644 (file)
@@ -139,7 +139,7 @@ struct cassandra_result {
        CassStatement *statement;
        const CassResult *result;
        CassIterator *iterator;
-       char *query;
+       char *log_query;
        char *error;
        CassConsistency consistency, fallback_consistency;
        enum cassandra_query_type query_type;
@@ -169,6 +169,7 @@ struct cassandra_transaction_context {
 
        struct cassandra_sql_statement *stmt;
        char *query;
+       char *log_query;
        cass_int64_t query_timestamp;
        char *error;
 
@@ -1142,7 +1143,7 @@ static void driver_cassandra_log_result(struct cassandra_result *result,
 
        string_t *str = t_str_new(128);
        str_printfa(str, "Finished %squery '%s' (",
-                   result->is_prepared ? "prepared " : "", result->query);
+                   result->is_prepared ? "prepared " : "", result->log_query);
        if (result->timestamp != 0)
                str_printfa(str, "timestamp=%"PRId64", ", result->timestamp);
        if (all_pages) {
@@ -1159,7 +1160,7 @@ static void driver_cassandra_log_result(struct cassandra_result *result,
 
        struct event_passthrough *e =
                sql_query_finished_event(&db->api, result->api.event,
-                                        result->query, result->error == NULL,
+                                        result->log_query, result->error == NULL,
                                         NULL);
        if (result->error != NULL)
                e->add_str("error", result->error);
@@ -1207,7 +1208,7 @@ static void driver_cassandra_result_free(struct sql_result *_result)
                cass_statement_free(result->statement);
        pool_unref(&result->row_pool);
        event_unref(&result->api.event);
-       i_free(result->query);
+       i_free(result->log_query);
        i_free(result->error);
        i_free(result);
 }
@@ -1367,7 +1368,7 @@ static void query_callback(CassFuture *future, void *context)
                result->api.error_type = driver_cassandra_error_is_uncertain(error);
                result->error = i_strdup_printf(
                        "Query '%s' failed: %.*s (in %u.%03u secs%s)",
-                       result->query, (int)errsize, errmsg, msecs/1000, msecs%1000,
+                       result->log_query, (int)errsize, errmsg, msecs/1000, msecs%1000,
                        result->page_num == 0 ?
                                "" :
                                t_strdup_printf(", page %u", result->page_num));
@@ -1527,7 +1528,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,
+driver_cassandra_query_init(struct cassandra_db *db, const char *log_query,
                            enum cassandra_query_type query_type,
                            bool is_prepared,
                            sql_query_callback_t *callback, void *context)
@@ -1541,7 +1542,7 @@ driver_cassandra_query_init(struct cassandra_db *db, const char *query,
        result->callback = callback;
        result->context = context;
        result->query_type = query_type;
-       result->query = i_strdup(query);
+       result->log_query = i_strdup(log_query);
        result->is_prepared = is_prepared;
        result->api.event = event_create(db->api.event);
        array_push_back(&db->results, &result);
@@ -1784,7 +1785,7 @@ driver_cassandra_result_more(struct sql_result **_result, bool async,
                (struct cassandra_result *)*_result;
 
        /* Initialize the next page as a new sql_result */
-       new_result = driver_cassandra_query_init(db, old_result->query,
+       new_result = driver_cassandra_query_init(db, old_result->log_query,
                                                 CASSANDRA_QUERY_TYPE_READ_MORE,
                                                 old_result->is_prepared,
                                                 callback, context);
@@ -1917,6 +1918,7 @@ driver_cassandra_transaction_unref(struct cassandra_transaction_context **_ctx)
                return;
 
        event_unref(&ctx->ctx.event);
+       i_free(ctx->log_query);
        i_free(ctx->query);
        i_free(ctx->error);
        i_free(ctx);
@@ -1993,8 +1995,8 @@ driver_cassandra_transaction_commit(struct sql_transaction_context *_ctx,
        if (ctx->query != NULL) {
                struct cassandra_result *cass_result;
 
-               cass_result = driver_cassandra_query_init(db, query, query_type,
-                       FALSE, transaction_commit_callback, ctx);
+               cass_result = driver_cassandra_query_init(db, ctx->log_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;
@@ -2004,8 +2006,10 @@ driver_cassandra_transaction_commit(struct sql_transaction_context *_ctx,
                (void)driver_cassandra_send_query(cass_result);
        } else {
                ctx->stmt->result =
-                       driver_cassandra_query_init(db, query, query_type, TRUE,
-                               transaction_commit_callback, ctx);
+                       driver_cassandra_query_init(db,
+                               sql_statement_get_log_query(&ctx->stmt->stmt),
+                               query_type, TRUE, transaction_commit_callback,
+                               ctx);
                if (ctx->stmt->cass_stmt == NULL) {
                        /* wait for prepare to finish */
                } else {
@@ -2085,6 +2089,9 @@ driver_cassandra_update(struct sql_transaction_context *_ctx, const char *query,
                return;
        }
        ctx->query = i_strdup(query);
+       /* When log_query is set here it can contain expanded values even
+          if stmt->no_log_expanded_values is set. */
+       ctx->log_query = i_strdup(query);
 }
 
 static const char *
@@ -2426,7 +2433,8 @@ driver_cassandra_statement_query(struct sql_statement *_stmt,
        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,
+       stmt->result = driver_cassandra_query_init(db,
+                                                  sql_statement_get_log_query(_stmt),
                                                   CASSANDRA_QUERY_TYPE_READ,
                                                   is_prepared,
                                                   callback, context);
@@ -2475,6 +2483,7 @@ driver_cassandra_update_stmt(struct sql_transaction_context *_ctx,
                ctx->stmt = stmt;
        else {
                ctx->query = i_strdup(sql_statement_get_query(_stmt));
+               ctx->log_query = i_strdup(sql_statement_get_log_query(_stmt));
                ctx->query_timestamp = stmt->timestamp;
                pool_unref(&_stmt->pool);
        }
index 192afb6f900c11b9f97801ac3222984b1b6efd30..e26f7bc0cd136785557a5a1535378a5de2decd9d 100644 (file)
@@ -241,6 +241,7 @@ void sql_db_set_state(struct sql_db *db, enum sql_db_state state);
 
 void sql_transaction_add_query(struct sql_transaction_context *ctx, pool_t pool,
                               const char *query, unsigned int *affected_rows);
+const char *sql_statement_get_log_query(struct sql_statement *stmt);
 const char *sql_statement_get_query(struct sql_statement *stmt);
 
 void sql_connection_log_finished(struct sql_db *db);
index 919513b3522ec121f269a7eedcf024827d064795..986332634cdc6035a03be0ac0a1418e6a9529b1c 100644 (file)
@@ -248,6 +248,11 @@ default_sql_statement_init_prepared(struct sql_prepared_statement *stmt)
        return sql_statement_init(stmt->db, stmt->query_template);
 }
 
+const char *sql_statement_get_log_query(struct sql_statement *stmt)
+{
+       return sql_statement_get_query(stmt);
+}
+
 const char *sql_statement_get_query(struct sql_statement *stmt)
 {
        string_t *query = t_str_new(128);