updateMany method
Implementation
@override
Future<bool> updateMany(
List<Map<String, dynamic>> updates,
String column,
) async {
try {
if (updates.isEmpty) return false;
Set<String> columns = {};
for (var row in updates) {
columns.addAll(row.keys.where((key) => key != column));
}
List<String> setClauses = [];
var caseCounter = 0;
for (var col in columns) {
List<String> cases = [];
for (var row in updates) {
if (row.containsKey(col)) {
final keyParamName = 'p$caseCounter';
final valueParamName = 'p$caseCounter';
bindings[keyParamName] = row[column];
bindings[valueParamName] = row[col];
cases.add("WHEN $column = :$keyParamName THEN :$valueParamName");
caseCounter++;
}
}
setClauses.add("$col = CASE ${cases.join(" ")} ELSE $col END");
}
List<String> whereValues = [];
for (var i = 0; i < updates.length; i++) {
final paramName = 'p$i';
bindings[paramName] = updates[i][column];
whereValues.add(":$paramName");
}
String sql =
"UPDATE $getTable${buildJoins()} SET ${setClauses.join(", ")} WHERE $column IN (${whereValues.join(", ")})";
conn = await getConnection();
return await conn.execute(sql, bindings);
} catch (e) {
rethrow;
}
}