readOldestEventsExcludingIds method

Future<List<EventRow>> readOldestEventsExcludingIds(
  1. int limit,
  2. Set<int> excludedIds
)

Implementation

Future<List<EventRow>> readOldestEventsExcludingIds(
  int limit,
  Set<int> excludedIds,
) async {
  if (excludedIds.isEmpty) {
    return readOldestEvents(limit);
  }
  if (_db == null || !_isOpen) return [];
  try {
    final placeholders = excludedIds.map((_) => '?').join(',');
    final List<Map<String, dynamic>> maps = await _db!.rawQuery(
      '''
      SELECT * FROM $_tableName
      WHERE id NOT IN ($placeholders)
      ORDER BY
        CASE event_name
          WHEN 'first_open' THEN 0
          WHEN 'session_start' THEN 1
          WHEN 'ad_impression' THEN 2
          ELSE 3
        END,
        ts_millis ASC
      LIMIT ?
    ''',
      [...excludedIds, limit],
    );
    return maps.map((m) => EventRow.fromMap(m)).toList();
  } catch (e, st) {
    dbLogger.severe(
      'SqliteEventStorage: readOldestEventsExcludingIds failed',
      e,
      st,
    );
    await _handlePotentialCorruption(e);
    return [];
  }
}