From 566408fa02acf56bbf6063c6d17d739e491e27f2 Mon Sep 17 00:00:00 2001 From: Jonathan Buchanan Date: Thu, 18 Jun 2020 20:27:04 -0400 Subject: stricter tests for tips/reserves --- src/backenddb/plugin_merchantdb_postgres.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'src/backenddb') diff --git a/src/backenddb/plugin_merchantdb_postgres.c b/src/backenddb/plugin_merchantdb_postgres.c index db9e9c51..7188839e 100644 --- a/src/backenddb/plugin_merchantdb_postgres.c +++ b/src/backenddb/plugin_merchantdb_postgres.c @@ -4889,6 +4889,12 @@ RETRY: postgres_rollback (pg); return TALER_EC_TIP_AUTHORIZE_DB_LOOKUP_RESERVE_FAILURE; } + if (qs == 0) + { + GNUNET_break (0); + postgres_rollback (pg); + return TALER_EC_TIP_AUTHORIZE_DB_RESERVE_NOT_FOUND; + } } { struct TALER_Amount remaining; @@ -5354,13 +5360,14 @@ lookup_pickup_details_cb (void *cls, for (unsigned int i = 0; i < num_results; i++) { struct TALER_MERCHANTDB_PickupDetails *pd = &((*ltdc->pickups)[i]); + uint64_t num_planchets = 0; struct GNUNET_PQ_ResultSpec rs[] = { GNUNET_PQ_result_spec_auto_from_type ("pickup_id", &pd->pickup_id), TALER_PQ_RESULT_SPEC_AMOUNT ("amount", &pd->requested_amount), - GNUNET_PQ_result_spec_uint32 ("num_planchets", - &pd->num_planchets), + GNUNET_PQ_result_spec_uint64 ("num_planchets", + &num_planchets), GNUNET_PQ_result_spec_end }; @@ -5376,6 +5383,8 @@ lookup_pickup_details_cb (void *cls, 0); return; } + + pd->num_planchets = num_planchets; } } @@ -5457,7 +5466,8 @@ postgres_lookup_tip_details (void *cls, struct LookupTipDetailsContext ltdc = { .pickups_length = pickups_length, .pickups = pickups, - .pg = pg + .pg = pg, + .qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT }; qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn, @@ -7835,14 +7845,11 @@ libtaler_plugin_merchantdb_postgres_init (void *cls) " pickup_id" ",amount_val" ",amount_frac" - ",(SELECT" - " COUNT(blind_sig)" - " FROM merchant_tip_pickups" - " JOIN merchant_tip_pickup_signatures USING (pickup_serial)" - " WHERE tip_serial = $1)" - " AS num_planchets" + ",COUNT(blind_sig) AS num_planchets" " FROM merchant_tip_pickups" - " WHERE tip_serial = $1", + " JOIN merchant_tip_pickup_signatures USING (pickup_serial)" + " WHERE tip_serial = $1" + " GROUP BY pickup_serial", 1), /* for postgres_insert_pickup() */ GNUNET_PQ_make_prepare ("insert_pickup", -- cgit v1.2.3