aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-05-27 15:34:24 +0200
committerChristian Grothoff <christian@grothoff.org>2016-05-27 15:34:24 +0200
commite68d07fc257d4b6fee51f5ed24950368bbea51ad (patch)
treee96c21f94c574ddd1e456a7e54fcd80d0bdf6aa8
parent5f6f524a52a511a84d4da9fbb15c2478f6e8870f (diff)
making DB scheme nice
-rw-r--r--src/exchange/taler-exchange-aggregator.c20
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c241
-rw-r--r--src/exchangedb/test_exchangedb.c36
-rw-r--r--src/include/taler_exchangedb_plugin.h18
4 files changed, 128 insertions, 187 deletions
diff --git a/src/exchange/taler-exchange-aggregator.c b/src/exchange/taler-exchange-aggregator.c
index 7d9390abf..64b05d0f7 100644
--- a/src/exchange/taler-exchange-aggregator.c
+++ b/src/exchange/taler-exchange-aggregator.c
@@ -448,14 +448,8 @@ deposit_cb (void *cls,
db_plugin->insert_aggregation_tracking (db_plugin->cls,
au->session,
&au->wtid,
- merchant_pub,
- &au->h_wire,
- h_contract,
- transaction_id,
- au->execution_time,
- coin_pub,
- amount_with_fee,
- deposit_fee))
+ row_id,
+ au->execution_time))
{
GNUNET_break (0);
return GNUNET_SYSERR;
@@ -548,14 +542,8 @@ aggregate_cb (void *cls,
db_plugin->insert_aggregation_tracking (db_plugin->cls,
au->session,
&au->wtid,
- merchant_pub,
- &au->h_wire,
- h_contract,
- transaction_id,
- au->execution_time,
- coin_pub,
- amount_with_fee,
- deposit_fee))
+ row_id,
+ au->execution_time))
{
GNUNET_break (0);
return GNUNET_SYSERR;
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index e256c1403..bc53be4ea 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -300,9 +300,9 @@ postgres_create_tables (void *cls)
incoming transaction. */
SQLEXEC("CREATE TABLE IF NOT EXISTS reserves_in"
"(reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE"
- ",balance_val INT8 NOT NULL"
- ",balance_frac INT4 NOT NULL"
- ",balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
+ ",credit_val INT8 NOT NULL"
+ ",credit_frac INT4 NOT NULL"
+ ",credit_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
",sender_account_details TEXT NOT NULL "
",transfer_details TEXT NOT NULL "
",execution_date INT8 NOT NULL"
@@ -361,21 +361,6 @@ postgres_create_tables (void *cls)
",num_newcoins INT2 NOT NULL"
",noreveal_index INT2 NOT NULL"
")");
- /* Table with information about coins that have been refunded. (Technically
- one of the deposit operations that a coin was involved with is refunded.)*/
- SQLEXEC("CREATE TABLE IF NOT EXISTS refunds "
- "(coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub) ON DELETE CASCADE"
- ",merchant_pub BYTEA NOT NULL CHECK(LENGTH(merchant_pub)=32)"
- ",merchant_sig BYTEA NOT NULL CHECK(LENGTH(merchant_sig)=64)"
- ",h_contract BYTEA NOT NULL CHECK(LENGTH(h_contract)=64)"
- ",transaction_id INT8 NOT NULL"
- ",rtransaction_id INT8 NOT NULL"
- ",amount_with_fee_val INT8 NOT NULL"
- ",amount_with_fee_frac INT4 NOT NULL"
- ",amount_with_fee_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
- ",PRIMARY KEY (coin_pub, merchant_pub, transaction_id, rtransaction_id)" /* this combo must be unique, and we usually select by coin_pub */
- ") ");
-
/* Table with information about the desired denominations to be created
during a refresh operation; contains the denomination key for each
@@ -398,6 +383,9 @@ postgres_create_tables (void *cls)
",link_secret_enc BYTEA NOT NULL CHECK(LENGTH(link_secret_enc)=64)"
",cnc_index INT2 NOT NULL"
")");
+ SQLEXEC_INDEX("CREATE INDEX refresh_commit_link_session_hash_index "
+ "ON refresh_commit_link(session_hash,cnc_index)");
+
/* Table with the commitments for the new coins that are to be created
during a melting session. Includes the session, the cut-and-choose
index and the index of the new coin, and the envelope of the new
@@ -411,6 +399,10 @@ postgres_create_tables (void *cls)
",link_vector_enc BYTEA NOT NULL CHECK(LENGTH(link_vector_enc)=64)"
",coin_ev BYTEA NOT NULL"
")");
+ SQLEXEC_INDEX("CREATE INDEX refresh_commit_coin_session_hash_index "
+ "ON refresh_commit_coin(session_hash,cnc_index,newcoin_index)");
+
+
/* Table with the signatures over coins generated during a refresh
operation. Needed to answer /refresh/link queries later. Stores
the coin signatures under the respective session hash and index. */
@@ -419,10 +411,13 @@ postgres_create_tables (void *cls)
",newcoin_index INT2 NOT NULL"
",ev_sig BYTEA NOT NULL"
")");
+ SQLEXEC_INDEX("CREATE INDEX refresh_out_session_hash_index "
+ "ON refresh_out(session_hash,newcoin_index)");
+
/* This table contains the wire transfers the exchange is supposed to
execute to transmit funds to the merchants (and manage refunds). */
SQLEXEC("CREATE TABLE IF NOT EXISTS deposits "
- "(serial_id BIGSERIAL PRIMARY KEY"
+ "(deposit_serial_id BIGSERIAL PRIMARY KEY"
",coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub) ON DELETE CASCADE"
",transaction_id INT8 NOT NULL"
",amount_with_fee_val INT8 NOT NULL"
@@ -442,29 +437,32 @@ postgres_create_tables (void *cls)
/* Index for get_deposit statement on coin_pub, transaction_id and merchant_pub */
SQLEXEC_INDEX("CREATE INDEX deposits_coin_pub_index "
"ON deposits(coin_pub, transaction_id, merchant_pub)");
+
+ /* Table with information about coins that have been refunded. (Technically
+ one of the deposit operations that a coin was involved with is refunded.)*/
+ SQLEXEC("CREATE TABLE IF NOT EXISTS refunds "
+ "(coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub) ON DELETE CASCADE"
+ ",merchant_pub BYTEA NOT NULL CHECK(LENGTH(merchant_pub)=32)"
+ ",merchant_sig BYTEA NOT NULL CHECK(LENGTH(merchant_sig)=64)"
+ ",h_contract BYTEA NOT NULL CHECK(LENGTH(h_contract)=64)"
+ ",transaction_id INT8 NOT NULL"
+ ",rtransaction_id INT8 NOT NULL"
+ ",amount_with_fee_val INT8 NOT NULL"
+ ",amount_with_fee_frac INT4 NOT NULL"
+ ",amount_with_fee_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
+ ",PRIMARY KEY (coin_pub, merchant_pub, transaction_id, rtransaction_id)" /* this combo must be unique, and we usually select by coin_pub */
+ ") ");
+
/* Table for the tracking API, mapping from wire transfer identifiers
to transactions and back */
SQLEXEC("CREATE TABLE IF NOT EXISTS aggregation_tracking "
- "(h_contract BYTEA CHECK (LENGTH(h_contract)=64) NOT NULL"
- ",h_wire BYTEA CHECK (LENGTH(h_wire)=64) NOT NULL"
- ",coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub) ON DELETE CASCADE"
- ",merchant_pub BYTEA NOT NULL CHECK (LENGTH(merchant_pub)=32)"
- ",transaction_id INT8 NOT NULL"
- ",wtid_raw BYTEA NOT NULL CHECK (LENGTH(merchant_pub)=" TALER_WIRE_TRANSFER_IDENTIFIER_LEN_STR ")"
+ "(deposit_serial_id INT8 NOT NULL REFERENCES deposits (deposit_serial_id) ON DELETE CASCADE"
+ ",wtid_raw BYTEA NOT NULL CHECK (LENGTH(wtid_raw)=" TALER_WIRE_TRANSFER_IDENTIFIER_LEN_STR ")"
",execution_time INT8 NOT NULL"
- ",coin_amount_val INT8 NOT NULL"
- ",coin_amount_frac INT4 NOT NULL"
- ",coin_amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
- ",coin_fee_val INT8 NOT NULL"
- ",coin_fee_frac INT4 NOT NULL"
- ",coin_fee_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
")");
/* Index for lookup_transactions statement on wtid */
SQLEXEC_INDEX("CREATE INDEX aggregation_tracking_wtid_index "
"ON aggregation_tracking(wtid_raw)");
- /* Index for lookup_deposit_wtid statement */
- SQLEXEC_INDEX("CREATE INDEX aggregation_tracking_deposit_index "
- "ON aggregation_tracking(coin_pub,h_contract,h_wire,transaction_id,merchant_pub)");
/* This table contains the pre-commit data for
wire transfers the exchange is about to execute. */
@@ -611,9 +609,9 @@ postgres_prepare (PGconn *db_conn)
PREPARE ("reserves_in_add_transaction",
"INSERT INTO reserves_in "
"(reserve_pub"
- ",balance_val"
- ",balance_frac"
- ",balance_curr"
+ ",credit_val"
+ ",credit_frac"
+ ",credit_curr"
",sender_account_details"
",transfer_details"
",execution_date"
@@ -625,9 +623,9 @@ postgres_prepare (PGconn *db_conn)
for a reserve */
PREPARE ("reserves_in_get_transactions",
"SELECT"
- " balance_val"
- ",balance_frac"
- ",balance_curr"
+ " credit_val"
+ ",credit_frac"
+ ",credit_curr"
",execution_date"
",sender_account_details"
",transfer_details"
@@ -947,7 +945,7 @@ postgres_prepare (PGconn *db_conn)
/* Used in #postgres_get_ready_deposit() */
PREPARE ("deposits_get_ready",
"SELECT"
- " serial_id"
+ " deposit_serial_id"
",amount_with_fee_val"
",amount_with_fee_frac"
",amount_with_fee_curr"
@@ -975,7 +973,7 @@ postgres_prepare (PGconn *db_conn)
/* Used in #postgres_iterate_matching_deposits() */
PREPARE ("deposits_iterate_matching",
"SELECT"
- " serial_id"
+ " deposit_serial_id"
",amount_with_fee_val"
",amount_with_fee_frac"
",amount_with_fee_curr"
@@ -1001,14 +999,14 @@ postgres_prepare (PGconn *db_conn)
PREPARE ("mark_deposit_tiny",
"UPDATE deposits"
" SET tiny=true"
- " WHERE serial_id=$1",
+ " WHERE deposit_serial_id=$1",
1, NULL);
/* Used in #postgres_mark_deposit_done() */
PREPARE ("mark_deposit_done",
"UPDATE deposits"
" SET done=true"
- " WHERE serial_id=$1",
+ " WHERE deposit_serial_id=$1",
1, NULL);
/* Used in #postgres_test_deposit_done() */
@@ -1100,61 +1098,56 @@ postgres_prepare (PGconn *db_conn)
/* Used in #postgres_lookup_wire_transfer */
PREPARE ("lookup_transactions",
"SELECT"
- " h_contract"
- ",h_wire"
- ",coin_pub"
- ",merchant_pub"
- ",transaction_id"
+ " deposits.h_contract"
+ ",deposits.h_wire"
+ ",deposits.coin_pub"
+ ",deposits.merchant_pub"
+ ",deposits.transaction_id"
",execution_time"
- ",coin_amount_val"
- ",coin_amount_frac"
- ",coin_amount_curr"
- ",coin_fee_val"
- ",coin_fee_frac"
- ",coin_fee_curr"
+ ",deposits.amount_with_fee_val"
+ ",deposits.amount_with_fee_frac"
+ ",deposits.amount_with_fee_curr"
+ ",denom.fee_deposit_val"
+ ",denom.fee_deposit_frac"
+ ",denom.fee_deposit_curr"
" FROM aggregation_tracking"
+ " JOIN deposits USING (deposit_serial_id)"
+ " JOIN known_coins USING (coin_pub)"
+ " JOIN denominations denom USING (denom_pub)"
" WHERE wtid_raw=$1",
1, NULL);
/* Used in #postgres_wire_lookup_deposit_wtid */
PREPARE ("lookup_deposit_wtid",
"SELECT"
- " wtid_raw"
- ",execution_time"
- ",coin_amount_val"
- ",coin_amount_frac"
- ",coin_amount_curr"
- ",coin_fee_val"
- ",coin_fee_frac"
- ",coin_fee_curr"
- " FROM aggregation_tracking"
- " WHERE"
- " coin_pub=$1 AND"
- " h_contract=$2 AND"
- " h_wire=$3 AND"
- " transaction_id=$4 AND"
- " merchant_pub=$5",
+ " aggregation_tracking.wtid_raw"
+ ",aggregation_tracking.execution_time"
+ ",amount_with_fee_val"
+ ",amount_with_fee_frac"
+ ",amount_with_fee_curr"
+ ",denom.fee_deposit_val"
+ ",denom.fee_deposit_frac"
+ ",denom.fee_deposit_curr"
+ " FROM deposits"
+ " JOIN aggregation_tracking USING (deposit_serial_id)"
+ " JOIN known_coins USING (coin_pub)"
+ " JOIN denominations denom USING (denom_pub)"
+ " WHERE coin_pub=$1"
+ " AND h_contract=$2"
+ " AND h_wire=$3"
+ " AND transaction_id=$4"
+ " AND merchant_pub=$5",
5, NULL);
/* Used in #postgres_insert_aggregation_tracking */
PREPARE ("insert_aggregation_tracking",
"INSERT INTO aggregation_tracking "
- "(h_contract"
- ",h_wire"
- ",coin_pub"
- ",merchant_pub"
- ",transaction_id"
+ "(deposit_serial_id"
",wtid_raw"
",execution_time"
- ",coin_amount_val"
- ",coin_amount_frac"
- ",coin_amount_curr"
- ",coin_fee_val"
- ",coin_fee_frac"
- ",coin_fee_curr"
") VALUES "
- "($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)",
- 13, NULL);
+ "($1, $2, $3)",
+ 3, NULL);
/* Used in #postgres_wire_prepare_data_insert() to store
@@ -1978,7 +1971,7 @@ postgres_get_reserve_history (void *cls,
bt = GNUNET_new (struct TALER_EXCHANGEDB_BankTransfer);
{
struct GNUNET_PQ_ResultSpec rs[] = {
- TALER_PQ_result_spec_amount ("balance",
+ TALER_PQ_result_spec_amount ("credit",
&bt->amount),
GNUNET_PQ_result_spec_absolute_time ("execution_date",
&bt->execution_date),
@@ -2180,7 +2173,7 @@ postgres_have_deposit (void *cls,
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to the database
- * @param deposit_rowid identifies the deposit row to modify
+ * @param deposit_serial_id identifies the deposit row to modify
* @return #GNUNET_OK on success, #GNUNET_SYSERR on error
*/
static int
@@ -2284,7 +2277,7 @@ postgres_test_deposit_done (void *cls,
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to the database
- * @param deposit_rowid identifies the deposit row to modify
+ * @param deposit_serial_id identifies the deposit row to modify
* @return #GNUNET_OK on success, #GNUNET_SYSERR on error
*/
static int
@@ -2368,7 +2361,7 @@ postgres_get_ready_deposit (void *cls,
uint64_t serial_id;
json_t *wire;
struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_uint64 ("serial_id",
+ GNUNET_PQ_result_spec_uint64 ("deposit_serial_id",
&serial_id),
GNUNET_PQ_result_spec_uint64 ("transaction_id",
&transaction_id),
@@ -2473,7 +2466,7 @@ postgres_iterate_matching_deposits (void *cls,
uint64_t serial_id;
int ret;
struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_uint64 ("serial_id",
+ GNUNET_PQ_result_spec_uint64 ("deposit_serial_id",
&serial_id),
GNUNET_PQ_result_spec_uint64 ("transaction_id",
&transaction_id),
@@ -3875,8 +3868,8 @@ postgres_lookup_wire_transfer (void *cls,
struct TALER_MerchantPublicKeyP merchant_pub;
uint64_t transaction_id;
struct GNUNET_TIME_Absolute exec_time;
- struct TALER_Amount coin_amount;
- struct TALER_Amount coin_fee;
+ struct TALER_Amount amount_with_fee;
+ struct TALER_Amount deposit_fee;
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_auto_from_type ("h_contract", &h_contract),
GNUNET_PQ_result_spec_auto_from_type ("h_wire", &h_wire),
@@ -3884,8 +3877,8 @@ postgres_lookup_wire_transfer (void *cls,
GNUNET_PQ_result_spec_auto_from_type ("merchant_pub", &merchant_pub),
GNUNET_PQ_result_spec_uint64 ("transaction_id", &transaction_id),
GNUNET_PQ_result_spec_absolute_time ("execution_time", &exec_time),
- TALER_PQ_result_spec_amount ("coin_amount", &coin_amount),
- TALER_PQ_result_spec_amount ("coin_fee", &coin_fee),
+ TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee),
+ TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee),
GNUNET_PQ_result_spec_end
};
if (GNUNET_OK != GNUNET_PQ_extract_result (result, rs, i))
@@ -3900,8 +3893,8 @@ postgres_lookup_wire_transfer (void *cls,
&h_contract,
transaction_id,
&coin_pub,
- &coin_amount,
- &coin_fee);
+ &amount_with_fee,
+ &deposit_fee);
}
PQclear (result);
return GNUNET_OK;
@@ -3949,8 +3942,8 @@ postgres_wire_lookup_deposit_wtid (void *cls,
/* check if the melt record exists and get it */
result = GNUNET_PQ_exec_prepared (session->conn,
- "lookup_deposit_wtid",
- params);
+ "lookup_deposit_wtid",
+ params);
if (PGRES_TUPLES_OK != PQresultStatus (result))
{
BREAK_DB_ERR (result);
@@ -3978,8 +3971,8 @@ postgres_wire_lookup_deposit_wtid (void *cls,
};
result = GNUNET_PQ_exec_prepared (session->conn,
- "get_deposit_for_wtid",
- params2);
+ "get_deposit_for_wtid",
+ params2);
if (PGRES_TUPLES_OK != PQresultStatus (result))
{
BREAK_DB_ERR (result);
@@ -4000,11 +3993,11 @@ postgres_wire_lookup_deposit_wtid (void *cls,
executed */
{
struct GNUNET_TIME_Absolute exec_time;
- struct TALER_Amount coin_amount;
- struct TALER_Amount coin_fee;
+ struct TALER_Amount amount_with_fee;
+ struct TALER_Amount deposit_fee;
struct GNUNET_PQ_ResultSpec rs[] = {
- TALER_PQ_result_spec_amount ("amount_with_fee", &coin_amount),
- TALER_PQ_result_spec_amount ("fee_deposit", &coin_fee),
+ TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee),
+ TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee),
GNUNET_PQ_result_spec_absolute_time ("wire_deadline", &exec_time),
GNUNET_PQ_result_spec_end
};
@@ -4017,8 +4010,8 @@ postgres_wire_lookup_deposit_wtid (void *cls,
}
cb (cb_cls,
NULL,
- &coin_amount,
- &coin_fee,
+ &amount_with_fee,
+ &deposit_fee,
exec_time);
PQclear (result);
return GNUNET_YES;
@@ -4033,13 +4026,13 @@ postgres_wire_lookup_deposit_wtid (void *cls,
{
struct TALER_WireTransferIdentifierRawP wtid;
struct GNUNET_TIME_Absolute exec_time;
- struct TALER_Amount coin_amount;
- struct TALER_Amount coin_fee;
+ struct TALER_Amount amount_with_fee;
+ struct TALER_Amount deposit_fee;
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_auto_from_type ("wtid_raw", &wtid),
GNUNET_PQ_result_spec_absolute_time ("execution_time", &exec_time),
- TALER_PQ_result_spec_amount ("coin_amount", &coin_amount),
- TALER_PQ_result_spec_amount ("coin_fee", &coin_fee),
+ TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee),
+ TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee),
GNUNET_PQ_result_spec_end
};
if (GNUNET_OK != GNUNET_PQ_extract_result (result, rs, 0))
@@ -4050,8 +4043,8 @@ postgres_wire_lookup_deposit_wtid (void *cls,
}
cb (cb_cls,
&wtid,
- &coin_amount,
- &coin_fee,
+ &amount_with_fee,
+ &deposit_fee,
exec_time);
}
PQclear (result);
@@ -4065,38 +4058,22 @@ postgres_wire_lookup_deposit_wtid (void *cls,
* @param cls closure
* @param session database connection
* @param wtid the raw wire transfer identifier we used
- * @param merchant_pub public key of the merchant (should be same for all callbacks with the same @e cls)
- * @param h_wire hash of wire transfer details of the merchant (should be same for all callbacks with the same @e cls)
- * @param h_contract which contract was this payment about
- * @param transaction_id merchant's transaction ID for the payment
- * @param coin_pub which public key was this payment about
- * @param coin_value amount contributed by this coin in total
- * @param coin_fee deposit fee charged by exchange for this coin
+ * @param deposit_serial_id row in the deposits table for which this is aggregation data
+ * @param execution_time when did we execute the transaction
* @return #GNUNET_OK on success, #GNUNET_SYSERR on DB errors
*/
static int
postgres_insert_aggregation_tracking (void *cls,
struct TALER_EXCHANGEDB_Session *session,
const struct TALER_WireTransferIdentifierRawP *wtid,
- const struct TALER_MerchantPublicKeyP *merchant_pub,
- const struct GNUNET_HashCode *h_wire,
- const struct GNUNET_HashCode *h_contract,
- uint64_t transaction_id,
- struct GNUNET_TIME_Absolute execution_time,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *coin_value,
- const struct TALER_Amount *coin_fee)
+ unsigned long long deposit_serial_id,
+ struct GNUNET_TIME_Absolute execution_time)
{
+ uint64_t rid = deposit_serial_id;
struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (h_contract),
- GNUNET_PQ_query_param_auto_from_type (h_wire),
- GNUNET_PQ_query_param_auto_from_type (coin_pub),
- GNUNET_PQ_query_param_auto_from_type (merchant_pub),
- GNUNET_PQ_query_param_uint64 (&transaction_id),
+ GNUNET_PQ_query_param_uint64 (&rid),
GNUNET_PQ_query_param_auto_from_type (wtid),
GNUNET_PQ_query_param_absolute_time (&execution_time),
- TALER_PQ_query_param_amount (coin_value),
- TALER_PQ_query_param_amount (coin_fee),
GNUNET_PQ_query_param_end
};
PGresult *result;
diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c
index 8ee2f5ed3..2dee9a7ee 100644
--- a/src/exchangedb/test_exchangedb.c
+++ b/src/exchangedb/test_exchangedb.c
@@ -1376,24 +1376,18 @@ run (void *cls)
/* setup values for wire transfer aggregation data */
memset (&wtid, 42, sizeof (wtid));
- memset (&merchant_pub_wt, 43, sizeof (merchant_pub_wt));
- memset (&h_wire_wt, 44, sizeof (h_wire_wt));
- memset (&h_contract_wt, 45, sizeof (h_contract_wt));
+ merchant_pub_wt = deposit.merchant_pub;
+ h_wire_wt = deposit.h_wire;
+ h_contract_wt = deposit.h_contract;
coin_pub_wt = deposit.coin.coin_pub;
- transaction_id_wt = 47;
+ transaction_id_wt = deposit.transaction_id;
execution_time_wt = GNUNET_TIME_absolute_get ();
- memset (&merchant_pub_wt, 48, sizeof (merchant_pub_wt));
+ coin_value_wt = deposit.amount_with_fee;
+ coin_fee_wt = fee_deposit;
GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY "KUDOS:1.000010",
- &coin_value_wt));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY "KUDOS:0.000010",
- &coin_fee_wt));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY "KUDOS:1.000000",
- &transfer_value_wt));
-
-
+ TALER_amount_subtract (&transfer_value_wt,
+ &coin_value_wt,
+ &coin_fee_wt));
FAILIF (GNUNET_NO !=
plugin->lookup_wire_transfer (plugin->cls,
session,
@@ -1407,7 +1401,7 @@ run (void *cls)
&h_wire_wt,
&coin_pub_wt,
&merchant_pub_wt,
- transaction_id_wt,
+ transaction_id_wt + 1 /* want UNKNOWN transaction here, hence + 1 */,
&cb_wtid_never,
NULL));
/* insert WT data */
@@ -1415,14 +1409,8 @@ run (void *cls)
plugin->insert_aggregation_tracking (plugin->cls,
session,
&wtid_wt,
- &merchant_pub_wt,
- &h_wire_wt,
- &h_contract_wt,
- transaction_id_wt,
- execution_time_wt,
- &coin_pub_wt,
- &coin_value_wt,
- &coin_fee_wt));
+ deposit_rowid,
+ execution_time_wt));
FAILIF (GNUNET_OK !=
plugin->lookup_wire_transfer (plugin->cls,
session,
diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h
index e8d2c80e8..978c335d6 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -1425,28 +1425,16 @@ struct TALER_EXCHANGEDB_Plugin
* @param cls closure
* @param session database connection
* @param wtid the raw wire transfer identifier we used
- * @param merchant_pub public key of the merchant (should be same for all callbacks with the same @e cls)
- * @param h_wire hash of wire transfer details of the merchant (should be same for all callbacks with the same @e cls)
- * @param h_contract which contract was this payment about
- * @param transaction_id merchant's transaction ID for the payment
+ * @param deposit_serial_id row in the deposits table for which this is aggregation data
* @param execution_time when did we execute the transaction
- * @param coin_pub which public key was this payment about
- * @param coin_value amount contributed by this coin in total
- * @param coin_fee deposit fee charged by exchange for this coin
* @return #GNUNET_OK on success, #GNUNET_SYSERR on DB errors
*/
int
(*insert_aggregation_tracking)(void *cls,
struct TALER_EXCHANGEDB_Session *session,
const struct TALER_WireTransferIdentifierRawP *wtid,
- const struct TALER_MerchantPublicKeyP *merchant_pub,
- const struct GNUNET_HashCode *h_wire,
- const struct GNUNET_HashCode *h_contract,
- uint64_t transaction_id,
- struct GNUNET_TIME_Absolute execution_time,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *coin_value,
- const struct TALER_Amount *coin_fee);
+ unsigned long long deposit_serial_id,
+ struct GNUNET_TIME_Absolute execution_time);
/**