changeset 22616:629f44740f50

cassandra: Include "prepared" when logging about prepared statement queries Mainly useful for debugging/testing.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 16 Oct 2017 15:12:12 +0300
parents ac7bd203229d
children 655f60aa8cf2
files src/lib-sql/driver-cassandra.c
diffstat 1 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-sql/driver-cassandra.c	Mon Oct 16 14:49:56 2017 +0300
+++ b/src/lib-sql/driver-cassandra.c	Mon Oct 16 15:12:12 2017 +0300
@@ -138,6 +138,7 @@
 	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 @@
 		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 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 @@
 	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 @@
 	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 @@
 	/* 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 @@
 			  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 @@
 		(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;