parsePage method

(List<T>, List<Id>) parsePage(
  1. List<Map<String, dynamic>> rows
)

Parse a page of raw rows into upserts and deletes with defensive checks.

Implementation

(List<T> upserts, List<Id> deletes) parsePage(
  List<Map<String, dynamic>> rows,
) {
  final upserts = <T>[];
  final deletes = <Id>[];
  var skipped = 0;
  for (final m in rows) {
    if (!m.containsKey(config.idColumn)) {
      skipped++;
      continue;
    }
    if (!m.containsKey(config.scopeNameColumn)) {
      skipped++;
      continue;
    }
    if (!m.containsKey(config.scopeKeysColumn)) {
      skipped++;
      continue;
    }
    final idRaw = m[config.idColumn];
    if (idRaw is! String) {
      skipped++;
      continue;
    }
    final isDeleted =
        config.deletedAtColumn != null && m[config.deletedAtColumn!] != null;
    if (isDeleted) {
      deletes.add(config.idFromString(idRaw));
    } else {
      upserts.add(config.fromJson(m));
    }
  }
  config.onParsePageStats?.call(skipped: skipped, total: rows.length);
  return (upserts, deletes);
}