From: Timo Sirainen Date: Wed, 23 Sep 2015 22:04:00 +0000 (+0300) Subject: pgsql: Fixed committing a single sql_update_get_rows() transaction. X-Git-Tag: 2.2.19.rc2~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1a0845aed2bbbe9435e96bd10bd774ed194ca4b;p=thirdparty%2Fdovecot%2Fcore.git pgsql: Fixed committing a single sql_update_get_rows() transaction. The rows weren't being set. --- 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);