upsertAllValues method
Implementation
Future<List<RowData>> upsertAllValues(
Object table, {
required Iterable<Object> columns,
required Iterable<Object> constraints,
required List<List<dynamic>> rows,
Returning? returning,
}) async {
assert(columns.isNotEmpty && rows.isNotEmpty && columns.length == rows[0].length);
returning ??= Returning.ALL;
if (constraints.isEmpty) {
constraints = columns.filter((e) {
if (e is TableColumn) {
var p = e.proto;
return p.primaryKey || p.unique;
} else {
return false;
}
});
}
List<String> columnNames = columns.mapList((e) => _columnNameOf(e));
List<String> constraintNames = constraints.mapList((e) => _columnNameOf(e));
List<String> otherNames = columnNames.filter((e) => !constraintNames.contains(e));
SpaceBuffer buf = _upsertBuffer(table, columnNames, constraints: constraintNames, otherColumns: otherNames);
buf << returning.clause;
final argss = rows.map((row) => [...row, ...otherNames.mapList((e) => row[columnNames.indexOf(e)])]);
List<QueryResult> ls = await multiQuery(buf.toString(), argss);
return ls.mapList((e) => e.firstRow()!);
}