From d1a0845aed2bbbe9435e96bd10bd774ed194ca4b Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 24 Sep 2015 01:04:00 +0300 Subject: [PATCH] pgsql: Fixed committing a single sql_update_get_rows() transaction. The rows weren't being set. --- src/lib-sql/driver-pgsql.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/lib-sql/driver-pgsql.c b/src/lib-sql/driver-pgsql.c index 824ea8932b..ce215b5d4c 100644 --- a/src/lib-sql/driver-pgsql.c +++ b/src/lib-sql/driver-pgsql.c @@ -949,6 +949,30 @@ transaction_update_callback(struct sql_result *result, db->next_context = ctx; } +static void +transaction_trans_query_callback(struct sql_result *result, + struct sql_transaction_query *query) +{ + struct pgsql_transaction_context *ctx = + (struct pgsql_transaction_context *)query->trans; + + if (sql_result_next_row(result) < 0) { + ctx->callback(sql_result_get_error(result), ctx->context); + driver_pgsql_transaction_free(ctx); + return; + } + + if (query->affected_rows != NULL) { + struct pgsql_result *pg_result = (struct pgsql_result *)result; + + if (str_to_uint(PQcmdTuples(pg_result->pgres), + query->affected_rows) < 0) + i_unreached(); + } + ctx->callback(NULL, ctx->context); + driver_pgsql_transaction_free(ctx); +} + static void driver_pgsql_transaction_commit(struct sql_transaction_context *_ctx, sql_commit_callback_t *callback, void *context) @@ -965,7 +989,7 @@ driver_pgsql_transaction_commit(struct sql_transaction_context *_ctx, } else if (_ctx->head->next == NULL) { /* just a single query, send it */ sql_query(_ctx->db, _ctx->head->query, - transaction_commit_callback, ctx); + transaction_trans_query_callback, _ctx->head); } else { /* multiple queries, use a transaction */ i_assert(_ctx->db->v.query == driver_pgsql_query); -- 2.47.3