drainToDb method
Drain all entries to the SQLite database. Returns number of events drained.
Implementation
Future<int> drainToDb(SqliteEventStorage db) async {
if (_queue.isEmpty || !db.isOpen) return 0;
int drained = 0;
final toRemove = <int>{};
// Snapshot to avoid ConcurrentModificationError if _queue is mutated
// during await points below.
final snapshot = List<_MemoryEntry>.from(_queue);
for (final entry in snapshot) {
final ok = await db.insertEvent(entry.tsMillis, entry.eventName, entry.payloadJson);
if (ok) {
toRemove.add(entry.seq);
drained++;
} else {
break; // DB became unavailable again
}
}
_queue.removeWhere((e) => toRemove.contains(e.seq));
if (drained > 0) {
dbLogger.info('MemoryEventQueue: drained $drained events to SQLite');
}
return drained;
}