commit 18c5c88403d8b759cdff4a5e1c0da1d954b73803
parent 25804f0c84bd3e06554c199c89d8f5fb174f89be
Author: Antoine A <>
Date: Fri, 27 Mar 2026 16:30:29 +0100
common: improve prepared transfer logic
Diffstat:
2 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/database-versioning/libeufin-bank-procedures.sql b/database-versioning/libeufin-bank-procedures.sql
@@ -781,10 +781,10 @@ IF out_pending THEN
INSERT INTO pending_recurrent_incoming_transactions (bank_transaction_id, debtor_account_id, authorization_pub)
VALUES (out_credit_row_id, in_debtor_account_id, local_authorization_pub);
ELSE
- IF local_authorization_pub IS NOT NULL THEN
- UPDATE prepared_transfers
- SET bank_transaction_id = out_credit_row_id
- WHERE authorization_pub = local_authorization_pub;
+ UPDATE prepared_transfers
+ SET bank_transaction_id = out_credit_row_id
+ WHERE (bank_transaction_id IS NULL AND account_pub = in_metadata) OR authorization_pub = local_authorization_pub;
+ IF local_withdrawal_uuid IS NOT NULL THEN
PERFORM abort_taler_withdrawal(local_withdrawal_uuid);
END IF;
PERFORM register_incoming(out_credit_row_id, in_type, in_metadata, in_creditor_account_id, local_authorization_pub, local_authorization_sig);
diff --git a/database-versioning/libeufin-nexus-procedures.sql b/database-versioning/libeufin-nexus-procedures.sql
@@ -367,11 +367,9 @@ IF in_type IS NOT NULL AND NOT out_talerable AND out_bounce_id IS NULL THEN
INSERT INTO pending_recurrent_incoming_transactions (incoming_transaction_id, authorization_pub)
VALUES (out_tx_id, local_authorization_pub);
ELSE
- IF local_authorization_pub IS NOT NULL THEN
- UPDATE prepared_transfers
- SET incoming_transaction_id = out_tx_id
- WHERE authorization_pub = local_authorization_pub;
- END IF;
+ UPDATE prepared_transfers
+ SET incoming_transaction_id = out_tx_id
+ WHERE (incoming_transaction_id IS NULL AND account_pub = in_metadata) OR authorization_pub = local_authorization_pub;
-- We cannot use ON CONFLICT here because conversion use a trigger before insertion that isn't idempotent
INSERT INTO talerable_incoming_transactions (
incoming_transaction_id