DbRow.fromMap constructor

DbRow.fromMap(
  1. DbTable? table,
  2. Map<String, dynamic> row
)

Create from a map of strings

Implementation

factory DbRow.fromMap(DbTable? table, Map<String, dynamic> row) {
  final recs = <DbRecord>[];
  row.forEach((key, dynamic value) {
    if (key == "id") {
      recs.add(DbRecord<int?>(key, value as int?));
    } else {
      final col = table!.column(key);
      if (col == null) {
        recs.add(DbRecord<dynamic>(key, value));
      } else {
        //print("COL ${col.name} ${col.type}");
        switch (col.type) {
          case DbColumnType.varchar:
            recs.add(DbRecord<String>(key, value.toString()));
            break;
          case DbColumnType.text:
            recs.add(DbRecord<String>(key, value.toString()));
            break;
          case DbColumnType.integer:
            int? v;
            try {
              v = value as int?;
            } catch (e) {
              rethrow;
            }
            recs.add(DbRecord<int?>(key, v));
            break;
          case DbColumnType.real:
            double? v;
            try {
              v = value as double?;
            } catch (e) {
              rethrow;
            }
            recs.add(DbRecord<double?>(key, v));
            break;
          case DbColumnType.boolean:
            bool v;
            if (value == "false") {
              v = false;
            } else if (value == "true") {
              v = true;
            } else {
              throw Exception("Wrong value $value for boolean field $key");
            }
            recs.add(DbRecord<bool>(key, v));
            break;
          case DbColumnType.timestamp:
            int? v;
            try {
              v = value as int?;
            } catch (e) {
              rethrow;
            }
            recs.add(DbRecord<int?>(key, v));
            break;
          case DbColumnType.blob:
            Uint8List? v;
            try {
              v = value as Uint8List?;
            } catch (e) {
              rethrow;
            }
            recs.add(DbRecord<Uint8List?>(key, v));
            break;
        }
      }
    }
  });
  //print("ROW $recs");
  return DbRow(recs);
}