]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
pgsql: Fixed committing a single sql_update_get_rows() transaction.
authorTimo Sirainen <tss@iki.fi>
Wed, 23 Sep 2015 22:04:00 +0000 (01:04 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 23 Sep 2015 22:04:00 +0000 (01:04 +0300)
The rows weren't being set.

src/lib-sql/driver-pgsql.c

index 824ea8932bc6d6d2b5c8e826513b1a9d09f52354..ce215b5d4cb0365b727e0a64350399cd4f14fb87 100644 (file)
@@ -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);