executeUpdate method
Implementation
Future<int> executeUpdate(
String table, {
required final Map<String, Object?> set,
required final Map<String, Object> where,
bool setContainsOptional = false,
}) async {
_assertColumnNames(set);
_assertColumnNames(where);
// assert(!where.keys.any((key) => set.containsKey(key)));
if (where.values.contains(null)) {
throw ArgumentError('where values must not be null.');
}
assert(!setContainsOptional || set.values.whereType<Optional>().isEmpty);
final setArgs = setContainsOptional ? flattenOptionals(set) : set;
final setStatement =
setArgs.entries.map((e) => '${e.key} = @s${e.key}').join(',');
final whereStatement = where.entries.toList(growable: false).map((e) {
if (identical(e.value, whereIsNull)) {
where.remove(e.key);
return '${e.key} IS NULL';
}
if (identical(e.value, whereIsNotNull)) {
where.remove(e.key);
return '${e.key} IS NOT NULL';
}
return '${e.key} = @w${e.key}';
}).join(' AND ');
return await execute(
'UPDATE $table SET $setStatement WHERE $whereStatement',
values: {
...setArgs.map((key, value) => MapEntry('s$key', value)),
...where.map((key, value) => MapEntry('w$key', value)),
},
expectedResultCount: 1);
}