executeUpdate method

Future<int> executeUpdate(
  1. String table, {
  2. required Map<String, Object?> set,
  3. required Map<String, Object> where,
  4. bool setContainsOptional = false,
})

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