onConflictUpdate method
Mutation<F>
onConflictUpdate({
- required List<
ReadField< target(Object?> >- F
- required List<
Assignment> set(- F existing,
- F incoming
Prepares a SQLite/PostgreSQL upsert against a declared unique target.
set distinguishes existing values from proposed incoming values and must
return at least one assignment. MySQL/MariaDB use onDuplicateKeyUpdate.
Implementation
Mutation<F> onConflictUpdate({
required List<ReadField<Object?>> Function(F) target,
required List<Assignment> Function(F existing, F incoming) set,
}) {
final fieldsFactory = this.fieldsFactory;
if (fieldsFactory == null) {
throw const OrmException(
'MUTATION.CONFLICT',
'Upsert applies to an insert.',
);
}
final incoming = fieldsFactory(TableRef(queryState.source.schema));
final assignments = set(queryFields, incoming);
if (assignments.isEmpty) {
throw const OrmException(
'MUTATION.EMPTY',
'Conflict update needs assignments.',
);
}
return _withConflict(target(queryFields), assignments, incoming.table);
}