diff options
author | Christian Grothoff <grothoff@gnunet.org> | 2023-10-15 23:30:51 +0200 |
---|---|---|
committer | Christian Grothoff <grothoff@gnunet.org> | 2023-10-15 23:30:51 +0200 |
commit | 917dd4d70ff2f38d475146b387e649a669996f10 (patch) | |
tree | 2550f23c5d9418bdaae7c5b7b328d9e5c60e226b /src/exchangedb/exchange_do_reserve_open.sql | |
parent | c72cf2ce10017dccc342c4ea86ac2b006aa54149 (diff) | |
download | exchange-917dd4d70ff2f38d475146b387e649a669996f10.tar.gz exchange-917dd4d70ff2f38d475146b387e649a669996f10.tar.bz2 exchange-917dd4d70ff2f38d475146b387e649a669996f10.zip |
avoid extra transaction to fetch balance if reserve is out of funds, remove legacy /withdraw endpoint
Diffstat (limited to 'src/exchangedb/exchange_do_reserve_open.sql')
-rw-r--r-- | src/exchangedb/exchange_do_reserve_open.sql | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/exchangedb/exchange_do_reserve_open.sql b/src/exchangedb/exchange_do_reserve_open.sql index 7aca78b8c..5d36d1af7 100644 --- a/src/exchangedb/exchange_do_reserve_open.sql +++ b/src/exchangedb/exchange_do_reserve_open.sql @@ -27,7 +27,9 @@ CREATE OR REPLACE FUNCTION exchange_do_reserve_open( IN in_open_fee taler_amount, OUT out_open_cost taler_amount, OUT out_final_expiration INT8, - OUT out_no_funds BOOLEAN) + OUT out_no_reserve BOOLEAN, + OUT out_no_funds BOOLEAN, + OUT out_reserve_balance taler_amount) LANGUAGE plpgsql AS $$ DECLARE @@ -41,6 +43,7 @@ DECLARE reserve RECORD; BEGIN +-- FIXME: do not use SELECT-* -- FIXME: use SELECT FOR UPDATE? SELECT * INTO reserve @@ -49,12 +52,19 @@ SELECT * IF NOT FOUND THEN - -- FIXME: do we need to set a 'not found'? RAISE NOTICE 'reserve not found'; + out_no_reserve = TRUE; + out_no_funds = TRUE; + out_reserve_balance.val = 0; + out_reserve_balance.frac = 0; + out_open_cost.val = 0; + out_open_cost.frac = 0; + out_final_expiration = 0; RETURN; END IF; -my_balance = reserve.current_balance; +out_no_reserve = FALSE; +out_reserve_balance = reserve.current_balance; -- Do not allow expiration time to start in the past already IF (reserve.expiration_date < in_now) @@ -143,21 +153,21 @@ THEN END IF; -- Check reserve balance is sufficient. -IF (my_balance.val > in_reserve_payment.val) +IF (out_reserve_balance.val > in_reserve_payment.val) THEN - IF (my_balance.frac >= in_reserve_payment.frac) + IF (out_reserve_balance.frac >= in_reserve_payment.frac) THEN - my_balance.val=my_balance.val - in_reserve_payment.val; - my_balance.frac=my_balance.frac - in_reserve_payment.frac; + my_balance.val=out_reserve_balance.val - in_reserve_payment.val; + my_balance.frac=out_reserve_balance.frac - in_reserve_payment.frac; ELSE - my_balance.val=my_balance.val - in_reserve_payment.val - 1; - my_balance.frac=my_balance.frac + 100000000 - in_reserve_payment.frac; + my_balance.val=out_reserve_balance.val - in_reserve_payment.val - 1; + my_balance.frac=out_reserve_balance.frac + 100000000 - in_reserve_payment.frac; END IF; ELSE - IF (my_balance.val = in_reserve_payment.val) AND (my_balance.frac >= in_reserve_payment.frac) + IF (out_reserve_balance.val = in_reserve_payment.val) AND (out_reserve_balance.frac >= in_reserve_payment.frac) THEN my_balance.val=0; - my_balance.frac=my_balance.frac - in_reserve_payment.frac; + my_balance.frac=out_reserve_balance.frac - in_reserve_payment.frac; ELSE out_final_expiration = reserve.expiration_date; out_open_cost.val = my_cost.val; |