upsertMany method
Future<List<T?>>
upsertMany(
{ - required List<Map<String, dynamic>> records,
- required List<String> uniqueBy,
- List<String>? excludeUpdatedData,
- Map<String, dynamic> createDataBuilder(
- Map<String, dynamic> record
)?,
- Map<String, dynamic> updateDataBuilder(
- Map<String, dynamic> record
)?,
})
Implementation
Future<List<T?>> upsertMany({
required List<Map<String, dynamic>> records,
required List<String> uniqueBy,
/// Old shared payload API
List<String>? excludeUpdatedData,
/// Optional transformers for new API
Map<String, dynamic> Function(Map<String, dynamic> record)?
createDataBuilder,
Map<String, dynamic> Function(Map<String, dynamic> record)?
updateDataBuilder,
}) async {
if (records.isEmpty) return [];
if (uniqueBy.isEmpty) {
throw Exception('upsertMany requires at least one unique column');
}
final results = <T?>[];
for (final record in records) {
final where = <String, dynamic>{};
for (final key in uniqueBy) {
if (!record.containsKey(key)) {
throw Exception(
'Missing unique key "$key" in record: $record',
);
}
where[key] = record[key];
}
final model = await resetQuery().upsert(
where: where,
data: createDataBuilder == null && updateDataBuilder == null
? record
: null,
createData: createDataBuilder?.call(record),
updateData: updateDataBuilder?.call(record),
excludeUpdatedData: excludeUpdatedData,
);
results.add(model);
}
return results;
}