batchKeys function
List<List<MssqlRelationKey> >
batchKeys(
- List<
MssqlRelationKey> keys, - int columnsPerKey, {
- int extraParameters = 0,
Splits keys into batches that stay under the parameter ceiling.
Hitting the ceiling would otherwise surface as a server error on whichever customer happened to have too many orders.
Implementation
List<List<MssqlRelationKey>> batchKeys(
List<MssqlRelationKey> keys,
int columnsPerKey, {
int extraParameters = 0,
}) {
if (columnsPerKey <= 0) {
throw ArgumentError.value(
columnsPerKey,
'columnsPerKey',
'A relation key needs at least one column.',
);
}
final budget = (relationParameterCeiling - extraParameters).clamp(
1,
relationParameterCeiling,
);
final perBatch = (budget ~/ columnsPerKey).clamp(1, 100000);
final out = <List<MssqlRelationKey>>[];
for (var start = 0; start < keys.length; start += perBatch) {
final end = start + perBatch < keys.length ? start + perBatch : keys.length;
out.add(keys.sublist(start, end));
}
return out;
}