Mercurial > dovecot > core-2.2
changeset 19204:beb3b8496b7d
pgsql: Fixed committing a single sql_update_get_rows() transaction.
The rows weren't being set.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 24 Sep 2015 01:04:00 +0300 |
parents | 9ceeb1a5c492 |
children | c4b9e6606cbf |
files | src/lib-sql/driver-pgsql.c |
diffstat | 1 files changed, 25 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-sql/driver-pgsql.c Thu Sep 24 01:02:32 2015 +0300 +++ b/src/lib-sql/driver-pgsql.c Thu Sep 24 01:04:00 2015 +0300 @@ -950,6 +950,30 @@ } 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 @@ } 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);