diff options
Diffstat (limited to 'src/exchangedb/exchange_do_recoup_by_reserve.sql')
-rw-r--r-- | src/exchangedb/exchange_do_recoup_by_reserve.sql | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/src/exchangedb/exchange_do_recoup_by_reserve.sql b/src/exchangedb/exchange_do_recoup_by_reserve.sql index 6a7ea725e..80f953c4a 100644 --- a/src/exchangedb/exchange_do_recoup_by_reserve.sql +++ b/src/exchangedb/exchange_do_recoup_by_reserve.sql @@ -25,8 +25,7 @@ RETURNS TABLE coin_pub BYTEA, coin_sig BYTEA, coin_blind BYTEA, - amount_val BIGINT, - amount_frac INTEGER, + amount taler_amount, recoup_timestamp BIGINT ) LANGUAGE plpgsql @@ -37,22 +36,25 @@ DECLARE c_pub BYTEA; BEGIN SELECT reserve_uuid - INTO res_uuid - FROM exchange.reserves - WHERE reserves.reserve_pub = res_pub; + INTO res_uuid + FROM reserves + WHERE reserve_pub = res_pub; FOR blind_ev IN SELECT h_blind_ev - FROM exchange.reserves_out_by_reserve - WHERE reserves_out_by_reserve.reserve_uuid = res_uuid + FROM reserves_out ro + JOIN reserve_history rh + ON (rh.serial_id = ro.reserve_out_serial_id) + WHERE rh.reserve_pub = res_pub + AND rh.table_name='reserves_out' LOOP SELECT robr.coin_pub INTO c_pub FROM exchange.recoup_by_reserve robr WHERE robr.reserve_out_serial_id = ( - SELECT reserves_out.reserve_out_serial_id - FROM exchange.reserves_out - WHERE reserves_out.h_blind_ev = blind_ev + SELECT reserve_out_serial_id + FROM reserves_out + WHERE h_blind_ev = blind_ev ); RETURN QUERY SELECT kc.denom_sig, @@ -60,16 +62,20 @@ BEGIN rc.coin_pub, rc.coin_sig, rc.coin_blind, - rc.amount_val, - rc.amount_frac, + rc.amount, rc.recoup_timestamp FROM ( - SELECT * + SELECT denom_sig + ,denominations_serial FROM exchange.known_coins WHERE known_coins.coin_pub = c_pub ) kc JOIN ( - SELECT * + SELECT coin_pub + ,coin_sig + ,coin_blind + ,amount + ,recoup_timestamp FROM exchange.recoup WHERE recoup.coin_pub = c_pub ) rc USING (coin_pub); @@ -79,4 +85,3 @@ $$; COMMENT ON FUNCTION exchange_do_recoup_by_reserve IS 'Recoup by reserve as a function to make sure we hit only the needed partition and not all when joining as joins on distributed tables fetch ALL rows from the shards'; - |