update method

Future<int> update(
  1. TRow row, {
  2. Set<String>? columns,
})

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;
}