aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2022-05-08 22:36:39 +0200
committerChristian Grothoff <christian@grothoff.org>2022-05-08 22:36:39 +0200
commit06bfbd9150e61a1b076175b22b27be4c88e058f3 (patch)
treedfadd02f66763bf79212f1bac58eb4e2f3e03033
parent60c08dccecd7e1aa578e497c57cc1fb6b29b655d (diff)
-sql fixes
-rw-r--r--src/exchange/taler-exchange-httpd_purses_create.c2
-rw-r--r--src/exchange/taler-exchange-httpd_purses_deposit.c2
-rw-r--r--src/exchangedb/exchange-0001-part.sql21
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c7
4 files changed, 21 insertions, 11 deletions
diff --git a/src/exchange/taler-exchange-httpd_purses_create.c b/src/exchange/taler-exchange-httpd_purses_create.c
index a5702ffeb..f8293981c 100644
--- a/src/exchange/taler-exchange-httpd_purses_create.c
+++ b/src/exchange/taler-exchange-httpd_purses_create.c
@@ -233,8 +233,8 @@ create_transaction (void *cls,
&pcc->h_contract_terms,
pcc->min_age,
TALER_WAMF_MODE_MERGE_FULLY_PAID_PURSE,
- &pcc->amount,
&purse_fee,
+ &pcc->amount,
&pcc->purse_sig,
&in_conflict);
if (qs < 0)
diff --git a/src/exchange/taler-exchange-httpd_purses_deposit.c b/src/exchange/taler-exchange-httpd_purses_deposit.c
index 07fcfb1a0..8ac63c517 100644
--- a/src/exchange/taler-exchange-httpd_purses_deposit.c
+++ b/src/exchange/taler-exchange-httpd_purses_deposit.c
@@ -220,7 +220,7 @@ deposit_transaction (void *cls,
*mhd_ret = TALER_MHD_reply_with_error (connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_GENERIC_DB_STORE_FAILED,
- "purse deposit deposit");
+ "do purse deposit");
return qs;
}
if (! balance_ok)
diff --git a/src/exchangedb/exchange-0001-part.sql b/src/exchangedb/exchange-0001-part.sql
index a8aebfbaa..f5276d0b8 100644
--- a/src/exchangedb/exchange-0001-part.sql
+++ b/src/exchangedb/exchange-0001-part.sql
@@ -2855,6 +2855,10 @@ DECLARE
DECLARE
psi INT8; -- partner's serial ID (set if merged)
DECLARE
+ my_amount_val INT8; -- total in purse
+DECLARE
+ my_amount_frac INT4; -- total in purse
+DECLARE
was_paid BOOLEAN;
DECLARE
my_reserve_pub BYTEA;
@@ -2881,8 +2885,7 @@ IF NOT FOUND
THEN
-- Idempotency check: check if coin_sig is the same,
-- if so, success, otherwise conflict!
- SELECT
- 1
+ PERFORM
FROM purse_deposits
WHERE coin_pub = in_coin_pub
AND purse_pub = in_purse_pub
@@ -2961,7 +2964,11 @@ THEN
END IF;
SELECT
- 1
+ amount_with_fee_val
+ ,amount_with_fee_frac
+ INTO
+ my_amount_val
+ ,my_amount_frac
FROM purse_requests
WHERE (purse_pub=in_purse_pub)
AND ( ( ( (amount_with_fee_val <= balance_val)
@@ -2983,15 +2990,15 @@ ELSE
-- This is a local reserve, update balance immediately.
UPDATE reserves
SET
- current_balance_frac=current_balance_frac+amount_frac
+ current_balance_frac=current_balance_frac+my_amount_frac
- CASE
- WHEN current_balance_frac + amount_frac >= 100000000
+ WHEN current_balance_frac + my_amount_frac >= 100000000
THEN 100000000
ELSE 0
END,
- current_balance_val=current_balance_val+amount_val
+ current_balance_val=current_balance_val+my_amount_val
+ CASE
- WHEN current_balance_frac + amount_frac >= 100000000
+ WHEN current_balance_frac + my_amount_frac >= 100000000
THEN 1
ELSE 0
END
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index 83a64be8a..aaf38ea42 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -3538,6 +3538,7 @@ prepare_statements (struct PostgresClosure *pg)
"INSERT INTO purse_requests"
" (purse_pub"
" ,merge_pub"
+ " ,purse_creation"
" ,purse_expiration"
" ,h_contract_terms"
" ,age_limit"
@@ -3549,9 +3550,9 @@ prepare_statements (struct PostgresClosure *pg)
" ,purse_fee_frac"
" ,purse_sig"
" ) VALUES "
- " ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)"
+ " ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)"
" ON CONFLICT DO NOTHING;",
- 12),
+ 13),
/* Used in #postgres_select_purse */
GNUNET_PQ_make_prepare (
"select_purse",
@@ -13511,12 +13512,14 @@ postgres_insert_purse_request (
{
struct PostgresClosure *pg = cls;
enum GNUNET_DB_QueryStatus qs;
+ struct GNUNET_TIME_Timestamp now = GNUNET_TIME_timestamp_get ();
uint32_t flags32 = (uint32_t) flags;
bool in_reserve_quota = (TALER_WAMF_MODE_CREATE_WITH_PURSE_FEE
== (flags & TALER_WAMF_MERGE_MODE_MASK));
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (purse_pub),
GNUNET_PQ_query_param_auto_from_type (merge_pub),
+ GNUNET_PQ_query_param_timestamp (&now),
GNUNET_PQ_query_param_timestamp (&purse_expiration),
GNUNET_PQ_query_param_auto_from_type (h_contract_terms),
GNUNET_PQ_query_param_uint32 (&age_limit),