fix(setup): deterministic tiebreaker in get_exchange_rate Currency Exchange lookup (Postgres)

get_exchange_rate orders Currency Exchange by 'date desc' LIMIT 1 with no unique tiebreaker. Currency Exchange autoname {date}-{from}-{to}-{purpose} allows multiple same-date rows (different purpose) for one currency pair; on the no-purpose-filter path all match, so MariaDB and Postgres can return a different exchange_rate for the same inputs. Add 'name desc' so both engines pick the same row. MariaDB row count unchanged.
This commit is contained in:
Mihir Kandoi
2026-06-29 22:25:39 +05:30
parent 8c03029f28
commit 91dae91769

View File

@@ -95,7 +95,11 @@ def get_exchange_rate(
# cksgb 19/09/2016: get last entry in Currency Exchange with from_currency and to_currency.
entries = frappe.get_all(
"Currency Exchange", fields=["exchange_rate"], filters=filters, order_by="date desc", limit=1
"Currency Exchange",
fields=["exchange_rate"],
filters=filters,
order_by="date desc, name desc",
limit=1,
)
if entries:
return flt(entries[0].exchange_rate)