summaryrefslogtreecommitdiff
path: root/src/backenddb/pg_insert_transfer_details.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backenddb/pg_insert_transfer_details.c')
-rw-r--r--src/backenddb/pg_insert_transfer_details.c60
1 files changed, 36 insertions, 24 deletions
diff --git a/src/backenddb/pg_insert_transfer_details.c b/src/backenddb/pg_insert_transfer_details.c
index a4f69989..66859649 100644
--- a/src/backenddb/pg_insert_transfer_details.c
+++ b/src/backenddb/pg_insert_transfer_details.c
@@ -87,35 +87,47 @@ TMH_PG_insert_transfer_details (
",offset_in_exchange_list"
",exchange_deposit_value"
",exchange_deposit_fee) "
- "SELECT deposit_serial, $1, $2, $3, $4"
- " FROM merchant_deposits"
- " JOIN merchant_contract_terms USING (order_serial)"
- " WHERE coin_pub=$5"
- " AND h_contract_terms=$6"
- " AND merchant_serial="
+ "SELECT dep.deposit_serial, $1, $2, $3, $4"
+ " FROM merchant_deposits dep"
+ " JOIN merchant_deposit_confirmations dcon"
+ " USING (deposit_confirmation_serial)"
+ " JOIN merchant_contract_terms cterm"
+ " USING (order_serial)"
+ " WHERE dep.coin_pub=$5"
+ " AND cterm.h_contract_terms=$6"
+ " AND cterm.merchant_serial="
" (SELECT merchant_serial"
" FROM merchant_instances"
" WHERE merchant_id=$7)");
PREPARE (pg,
"update_wired_by_coin_pub",
- "WITH os AS" /* select orders affected by the coin */
- "(SELECT order_serial"
- " FROM merchant_deposits"
- " WHERE coin_pub=$1)"
+ "WITH affected_orders AS" /* select orders affected by the coin */
+ "(SELECT mcon.order_serial"
+ " FROM merchant_deposits dep"
+ /* Next 2 joins ensure transfers exist in the first place */
+ " JOIN merchant_deposit_to_transfer"
+ " USING (deposit_serial)"
+ " JOIN merchant_transfers mtrans"
+ " USING (credit_serial)"
+ " JOIN merchant_deposit_confirmations mcon"
+ " USING (deposit_confirmation_serial)"
+ " WHERE dep.coin_pub=$1)"
"UPDATE merchant_contract_terms "
" SET wired=TRUE "
" WHERE order_serial IN "
- " (SELECT order_serial FROM merchant_deposits" /* only orders for which NO un-wired coin exists*/
+ " (SELECT order_serial"
+ " FROM merchant_deposit_confirmations dcon"
+ " JOIN affected_orders"
+ " USING (order_serial)"
" WHERE NOT EXISTS "
- " (SELECT order_serial FROM merchant_deposits" /* orders for which ANY un-wired coin exists */
- " JOIN os USING (order_serial)" /* filter early */
- " WHERE deposit_serial NOT IN"
- " (SELECT deposit_serial " /* all coins associated with order that WERE wired */
- " FROM merchant_deposits "
- " JOIN os USING (order_serial)" /* filter early */
- " JOIN merchant_deposit_to_transfer USING (deposit_serial)"
- " JOIN merchant_transfers USING (credit_serial)"
- " WHERE confirmed=TRUE)))");
+ " (SELECT 1"
+ " FROM merchant_deposits dep"
+ " JOIN merchant_deposit_to_transfer"
+ " USING (deposit_serial)"
+ " JOIN merchant_transfers mtrans"
+ " USING (credit_serial)"
+ " WHERE dep.deposit_confirmation_serial = dcon.deposit_confirmation_serial"
+ " AND NOT mtrans.confirmed))");
RETRY:
if (MAX_RETRIES < ++retries)
@@ -175,9 +187,9 @@ RETRY:
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_uint64 (&credit_serial),
TALER_PQ_query_param_amount_with_currency (pg->conn,
- &td->total_amount),
+ &td->total_amount),
TALER_PQ_query_param_amount_with_currency (pg->conn,
- &td->wire_fee),
+ &td->wire_fee),
GNUNET_PQ_query_param_timestamp (&td->execution_time),
GNUNET_PQ_query_param_auto_from_type (&td->exchange_sig),
GNUNET_PQ_query_param_auto_from_type (&td->exchange_pub),
@@ -219,9 +231,9 @@ RETRY:
GNUNET_PQ_query_param_uint64 (&credit_serial),
GNUNET_PQ_query_param_uint64 (&i64),
TALER_PQ_query_param_amount_with_currency (pg->conn,
- &d->coin_value),
+ &d->coin_value),
TALER_PQ_query_param_amount_with_currency (pg->conn,
- &d->coin_fee), /* deposit fee */
+ &d->coin_fee), /* deposit fee */
GNUNET_PQ_query_param_auto_from_type (&d->coin_pub),
GNUNET_PQ_query_param_auto_from_type (&d->h_contract_terms),
GNUNET_PQ_query_param_string (instance_id),