commit c3d09f9f95db54ae3fa460909e043e949b0578f1
parent 218ca3a7893a38d61896cd1894a75f4e04887379
Author: Florian Dold <dold@taler.net>
Date: Wed, 22 Jul 2026 10:48:15 +0200
wallet: keep a denomination without a family absent on sqlite
The column is nullable and both the write path and the IndexedDB backend treat
the field as optional, but reading it back on sqlite produced 0, a serial that
AUTOINCREMENT never assigns.
Diffstat:
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/packages/taler-wallet-core/src/db-common.ts b/packages/taler-wallet-core/src/db-common.ts
@@ -2784,7 +2784,12 @@ export interface WalletDenomination {
fees: DenomFees;
- denominationFamilySerial: number;
+ /**
+ * Family the denomination belongs to.
+ *
+ * Absent for denominations stored before the family was known.
+ */
+ denominationFamilySerial?: number;
/**
* Validity start date of the denomination.
diff --git a/packages/taler-wallet-core/src/dbtx-indexeddb.ts b/packages/taler-wallet-core/src/dbtx-indexeddb.ts
@@ -1675,9 +1675,12 @@ export class IdbWalletTransaction implements WalletDbTransaction {
if (!first.hasValue) {
return undefined;
}
+ // Denominations without a family are not part of the index.
+ const firstSerial = first.value.denominationFamilySerial;
if (
- first.value.denominationFamilySerial < denominationFamilySerial ||
- (first.value.denominationFamilySerial === denominationFamilySerial &&
+ firstSerial == null ||
+ firstSerial < denominationFamilySerial ||
+ (firstSerial === denominationFamilySerial &&
first.value.stampExpireWithdraw < minStampExpireWithdraw)
) {
cursor.continue([denominationFamilySerial, minStampExpireWithdraw]);
diff --git a/packages/taler-wallet-core/src/dbtx-sqlite.ts b/packages/taler-wallet-core/src/dbtx-sqlite.ts
@@ -928,7 +928,11 @@ export class SqliteWalletTransaction implements WalletDbTransaction {
exchangeMasterPub: dbToCrock(row.exchange_master_pub),
currency: str(row.currency),
value: dbAmount(row.value),
- denominationFamilySerial: num(row.denomination_family_serial),
+ ...(row.denomination_family_serial != null
+ ? {
+ denominationFamilySerial: num(row.denomination_family_serial),
+ }
+ : undefined),
stampStart: dbTimestamp(row.stamp_start),
stampExpireWithdraw: dbTimestamp(row.stamp_expire_withdraw),
stampExpireDeposit: dbTimestamp(row.stamp_expire_deposit),