diff options
author | Christian Grothoff <christian@grothoff.org> | 2023-07-29 23:01:06 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2023-07-29 23:01:15 +0200 |
commit | e47e5c0cfba7746263775e8bbd4064b640f69020 (patch) | |
tree | 4d853f7e1d065a198b32dd14d38df179cf288e15 /src/exchangedb/exchange_do_purse_merge.sql | |
parent | ecf6b2750bb6ed9157aece72602dd042a50e36f3 (diff) | |
download | exchange-e47e5c0cfba7746263775e8bbd4064b640f69020.tar.xz |
migration to new amount style for exchangedb
Diffstat (limited to 'src/exchangedb/exchange_do_purse_merge.sql')
-rw-r--r-- | src/exchangedb/exchange_do_purse_merge.sql | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/src/exchangedb/exchange_do_purse_merge.sql b/src/exchangedb/exchange_do_purse_merge.sql index 9780c016c..b911a5a2d 100644 --- a/src/exchangedb/exchange_do_purse_merge.sql +++ b/src/exchangedb/exchange_do_purse_merge.sql @@ -30,10 +30,17 @@ LANGUAGE plpgsql AS $$ DECLARE my_amount taler_amount; +DECLARE my_purse_fee taler_amount; +DECLARE my_partner_serial_id INT8; +DECLARE my_in_reserve_quota BOOLEAN; +DECLARE + rval RECORD; +DECLARE reserve RECORD; +DECLARE balance taler_amount; BEGIN @@ -60,29 +67,29 @@ END IF; out_no_partner=FALSE; - -- Check purse is 'full'. -SELECT amount_with_fee_val - ,amount_with_fee_frac - ,purse_fee_val - ,purse_fee_frac +SELECT amount_with_fee + ,purse_fee ,in_reserve_quota - INTO my_amount.val - ,my_amount.frac - ,my_purse_fee.val - ,my_purse_fee.frac - ,my_in_reserve_quota - FROM exchange.purse_requests + INTO rval + FROM purse_requests pr WHERE purse_pub=in_purse_pub - AND balance_val >= amount_with_fee_val - AND ( (balance_frac >= amount_with_fee_frac) OR - (balance_val > amount_with_fee_val) ); + AND (pr.balance).val >= (pr.amount_with_fee).val + AND ( (pr.balance).frac >= (pr.amount_with_fee).frac OR + (pr.balance).val > (pr.amount_with_fee).val ); IF NOT FOUND THEN out_no_balance=TRUE; out_conflict=FALSE; RETURN; END IF; + +-- We use rval as workaround as we cannot select +-- directly into the amount due to Postgres limitations. +my_amount := rval.amount_with_fee; +my_purse_fee := rval.purse_fee; +my_in_reserve_quota := rval.in_reserve_quota; + out_no_balance=FALSE; -- Store purse merge signature, checks for purse_pub uniqueness @@ -228,4 +235,3 @@ END $$; COMMENT ON FUNCTION exchange_do_purse_merge(BYTEA, BYTEA, INT8, BYTEA, VARCHAR, BYTEA, BYTEA, INT8) IS 'Checks that the partner exists, the purse has not been merged with a different reserve and that the purse is full. If so, persists the merge data and either merges the purse with the reserve or marks it as ready for the taler-exchange-router. Caller MUST abort the transaction on failures so as to not persist data by accident.'; - |