merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 1dc9af59741fae23d19bd16516c3c06a2fe793e2
parent f544525b67c45c9ccc94ca4c224eb0dd84365729
Author: Christian Grothoff <christian@grothoff.org>
Date:   Fri,  9 Oct 2026 22:56:17 +0200

fix SQL queries to avoid O(n^2) complexity

Diffstat:
Msrc/backenddb/iterate_orders.c | 28++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/backenddb/iterate_orders.c b/src/backenddb/iterate_orders.c @@ -167,9 +167,10 @@ TALER_MERCHANTDB_iterate_orders ( " AND ($8 OR " " NOT CAST($9 AS BOOL))" /* unclaimed orders are never wired */ " AND" - " (order_serial NOT IN" - " (SELECT order_serial" - " FROM merchant_contract_terms))" /* only select unclaimed orders */ + " NOT EXISTS" + " (SELECT 1" + " FROM merchant_contract_terms mct" + " WHERE mct.order_serial=merchant_orders.order_serial)" /* only select unclaimed orders */ " AND ($10 OR " " ($11 = session_id))" " AND ($12 OR " @@ -192,9 +193,10 @@ TALER_MERCHANTDB_iterate_orders ( " AND ($4 OR " " (CAST($5 AS BOOL) = paid))" " AND ($6 OR " - " (CAST($7 AS BOOL) = (order_serial IN" - " (SELECT order_serial " - " FROM merchant_refunds))))" + " (CAST($7 AS BOOL) = EXISTS" + " (SELECT 1" + " FROM merchant_refunds mr" + " WHERE mr.order_serial=merchant_contract_terms.order_serial)))" " AND ($8 OR" " (CAST($9 AS BOOL) = wired))" " AND ($10 OR " @@ -229,9 +231,10 @@ TALER_MERCHANTDB_iterate_orders ( " AND ($8 OR " " NOT CAST($9 AS BOOL))" /* unclaimed orders are never wired */ " AND" - " order_serial NOT IN" - " (SELECT order_serial" - " FROM merchant_contract_terms)" /* only select unclaimed orders */ + " NOT EXISTS" + " (SELECT 1" + " FROM merchant_contract_terms mct" + " WHERE mct.order_serial=merchant_orders.order_serial)" /* only select unclaimed orders */ " AND ($10 OR " " ($11 = session_id))" " AND ($12 OR " @@ -254,9 +257,10 @@ TALER_MERCHANTDB_iterate_orders ( " AND ($4 OR " " (CAST($5 AS BOOL) = paid))" " AND ($6 OR " - " (CAST($7 AS BOOL) = (order_serial IN" - " (SELECT order_serial " - " FROM merchant_refunds))))" + " (CAST($7 AS BOOL) = EXISTS" + " (SELECT 1" + " FROM merchant_refunds mr" + " WHERE mr.order_serial=merchant_contract_terms.order_serial)))" " AND ($8 OR" " (CAST($9 AS BOOL) = wired))" " AND ($10 OR "