chunkById method
Process results in chunks by ID (more efficient for large datasets)
Implementation
@override
Future<void> chunkById(
int size,
Future<void> Function(List<T> items) callback, {
String column = 'id',
String? alias,
}) async {
dynamic lastId;
List<T> results;
do {
final q = clone();
if (lastId != null) {
q.where(alias ?? column, '>', lastId);
}
q.orderBy(alias ?? column, direction: 'ASC');
q.limit(size);
results = await q.get();
if (results.isNotEmpty) {
await callback(results);
final lastItem = results.last;
final key = alias ?? column;
if (lastItem is Map) {
lastId = lastItem[key];
} else if (lastItem is KhademModel) {
lastId = (lastItem as KhademModel).getAttribute(key);
} else {
try {
lastId = (lastItem as dynamic)[key];
} catch (_) {
throw Exception(
'Could not determine the value of the chunk column "$key" from the result.',
);
}
}
}
} while (results.length == size);
}