diff options
author | Özgür Kesim <oec-taler@kesim.org> | 2023-07-28 19:01:57 +0200 |
---|---|---|
committer | Özgür Kesim <oec-taler@kesim.org> | 2023-07-28 19:01:57 +0200 |
commit | a1dae0199f3bc3e9f66fc1375c652c6f99b26b2c (patch) | |
tree | ae2be069b97117bf65eb681a58cf3d74cd3cd471 /src/exchangedb/exchange_do_purse_merge.sql | |
parent | 8f9731e83009f13a8b4e172aec1252bc79c4dee1 (diff) |
FAILING attempt to make echange.reserve use taler_amountfail-amount
Fails with
> TALER_PREFIX=/usr/local ./test-exchangedb-postgres
2023-07-28T19:02:25.150845+0200 /home/oec/projects/taler/exchange/src/exchangedb/.libs/test-exchangedb-postgres-2559159 WARNING Could not run PSQL on file /usr/local/share/taler//sql/exchange/drop.sql: psql exit code was 3
2023-07-28T19:02:32.488085+0200 pq-2559159 ERROR Query `call_withdraw' failed with result: invalid input syntax for type bigint:
"(1,1000)"/(null)/ERROR: invalid input syntax for type bigint: "(1,1000)"
CONTEXT: PL/pgSQL function exchange_do_withdraw(bytea,taler_amount,bytea,bytea,bytea,bytea,bytea,bigint,bigint,boolean) line 23 at SQL statement
/PGRES_FATAL_ERROR/ERROR: invalid input syntax for type bigint: "(1,1000)"
CONTEXT: PL/pgSQL function exchange_do_withdraw(bytea,taler_amount,bytea,bytea,bytea,bytea,bytea,bigint,bigint,boolean) line 23 at SQL statement
2023-07-28T19:02:32.488146+0200 /home/oec/projects/taler/exchange/src/exchangedb/.libs/test-exchangedb-postgres-2559159 ERROR Assertion failed at test_exchangedb.c:1428.
Diffstat (limited to 'src/exchangedb/exchange_do_purse_merge.sql')
-rw-r--r-- | src/exchangedb/exchange_do_purse_merge.sql | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/src/exchangedb/exchange_do_purse_merge.sql b/src/exchangedb/exchange_do_purse_merge.sql index f02dd5dc..85bae999 100644 --- a/src/exchangedb/exchange_do_purse_merge.sql +++ b/src/exchangedb/exchange_do_purse_merge.sql @@ -29,16 +29,9 @@ CREATE OR REPLACE FUNCTION exchange_do_purse_merge( LANGUAGE plpgsql AS $$ DECLARE - my_amount_val INT8; -DECLARE - my_amount_frac INT4; -DECLARE - my_purse_fee_val INT8; -DECLARE - my_purse_fee_frac INT4; -DECLARE + my_amount taler_amount; + my_purse_fee taler_amount; my_partner_serial_id INT8; -DECLARE my_in_reserve_quota BOOLEAN; BEGIN @@ -72,10 +65,10 @@ SELECT amount_with_fee_val ,purse_fee_val ,purse_fee_frac ,in_reserve_quota - INTO my_amount_val - ,my_amount_frac - ,my_purse_fee_val - ,my_purse_fee_frac + INTO my_amount.val + ,my_amount.frac + ,my_purse_fee.val + ,my_purse_fee.frac ,my_in_reserve_quota FROM exchange.purse_requests WHERE purse_pub=in_purse_pub @@ -196,23 +189,23 @@ ELSE -- This is a local reserve, update reserve balance immediately. -- Refund the purse fee, by adding it to the purse value: - my_amount_val = my_amount_val + my_purse_fee_val; - my_amount_frac = my_amount_frac + my_purse_fee_frac; + my_amount.val = my_amount.val + my_purse_fee.val; + my_amount.frac = my_amount.frac + my_purse_fee.frac; -- normalize result - my_amount_val = my_amount_val + my_amount_frac / 100000000; - my_amount_frac = my_amount_frac % 100000000; + my_amount.val = my_amount.val + my_amount.frac / 100000000; + my_amount.frac = my_amount.frac % 100000000; UPDATE exchange.reserves SET - current_balance_frac=current_balance_frac+my_amount_frac + current_balance.frac=current_balance.frac+my_amount.frac - CASE - WHEN current_balance_frac + my_amount_frac >= 100000000 + WHEN current_balance.frac + my_amount.frac >= 100000000 THEN 100000000 ELSE 0 END, - current_balance_val=current_balance_val+my_amount_val + current_balance.val=current.balance_val+my.amount_val + CASE - WHEN current_balance_frac + my_amount_frac >= 100000000 + WHEN current_balance.frac + my_amount.frac >= 100000000 THEN 1 ELSE 0 END |