cp sql/ from GNU Taler exchange
This commit is contained in:
parent
4749bb7c62
commit
11ee418801
132 changed files with 16912 additions and 0 deletions
87
include/sql/exchange_do_recoup_by_reserve.sql
Normal file
87
include/sql/exchange_do_recoup_by_reserve.sql
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
--
|
||||
-- This file is part of TALER
|
||||
-- Copyright (C) 2014--2025 Taler Systems SA
|
||||
--
|
||||
-- TALER is free software; you can redistribute it and/or modify it under the
|
||||
-- terms of the GNU General Public License as published by the Free Software
|
||||
-- Foundation; either version 3, or (at your option) any later version.
|
||||
--
|
||||
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License along with
|
||||
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||
--
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION exchange_do_recoup_by_reserve(
|
||||
IN res_pub BYTEA
|
||||
)
|
||||
RETURNS TABLE
|
||||
(
|
||||
denom_sig BYTEA,
|
||||
denominations_serial INT8,
|
||||
coin_pub BYTEA,
|
||||
coin_sig BYTEA,
|
||||
coin_blind BYTEA,
|
||||
amount taler_amount,
|
||||
recoup_timestamp INT8
|
||||
)
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
res_uuid INT8;
|
||||
blind_ev BYTEA;
|
||||
c_pub BYTEA;
|
||||
BEGIN
|
||||
SELECT reserve_uuid
|
||||
INTO res_uuid
|
||||
FROM reserves
|
||||
WHERE reserve_pub = res_pub;
|
||||
|
||||
FOR blind_ev IN
|
||||
SELECT unnest(h_blind_evs)
|
||||
FROM withdraw wd
|
||||
JOIN reserve_history rh
|
||||
ON (rh.serial_id = wd.withdraw_id)
|
||||
WHERE rh.reserve_pub = res_pub
|
||||
AND rh.table_name='withdraw'
|
||||
LOOP
|
||||
SELECT robr.coin_pub
|
||||
INTO c_pub
|
||||
FROM exchange.recoup_by_reserve robr
|
||||
WHERE robr.withdraw_id = (
|
||||
SELECT withdraw_id
|
||||
FROM withdraw
|
||||
WHERE h_blind_ev = ANY(h_blind_evs)
|
||||
);
|
||||
RETURN QUERY
|
||||
SELECT kc.denom_sig,
|
||||
kc.denominations_serial,
|
||||
rc.coin_pub,
|
||||
rc.coin_sig,
|
||||
rc.coin_blind,
|
||||
rc.amount,
|
||||
rc.recoup_timestamp
|
||||
FROM (
|
||||
SELECT denom_sig
|
||||
,denominations_serial
|
||||
FROM exchange.known_coins
|
||||
WHERE known_coins.coin_pub = c_pub
|
||||
) kc
|
||||
JOIN (
|
||||
SELECT coin_pub
|
||||
,coin_sig
|
||||
,coin_blind
|
||||
,amount
|
||||
,recoup_timestamp
|
||||
FROM exchange.recoup
|
||||
WHERE recoup.coin_pub = c_pub
|
||||
) rc USING (coin_pub);
|
||||
END LOOP;
|
||||
END;
|
||||
$$;
|
||||
|
||||
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';
|
||||
Loading…
Add table
Add a link
Reference in a new issue