update method
Updates the identified row, optionally limited to columns.
Without columns, every writable field is sent; rows do not track
changes locally.
Implementation
Future<int> update(TRow row, {Set<String>? columns}) async {
_requireKey('update');
_checkDecimalAgreement();
if (columns != null) _checkColumnSubset(columns);
final source = binding.toColumns(row);
for (final name in binding.primaryKey) {
if (!source.containsKey(name)) {
throw ArgumentError.value(
row,
'row',
'Carries no value for key column "$name".',
);
}
}
final values = _stampUpdate(
_writableValues(row, only: columns, excludeKey: true),
);
if (values.isEmpty) {
throw StateError(
'Updating ${binding.qualifiedName} would write no columns.',
);
}
final outcome = await _updateKeyed(row, values);
return outcome.affectedRows;
}