fetch method
Run the query and return matching entities.
limit and offset are applied in Dart after the native query runs.
Implementation
NSQueryResults fetch({int? limit, int offset = 0}) {
_checkNotDisposed();
final resultset = _executeQuery();
try {
_checkResultsetError(resultset);
final iterator = nosqueel.ns_resultset_iterator_create(resultset);
final entities = <NSEntity>[];
try {
while (true) {
final entity = nosqueel.ns_resultset_iterator_next(iterator);
if (entity == nullptr) {
break;
}
entities.add(NSEntity.borrowed(entity));
}
} finally {
nosqueel.ns_resultset_iterator_destroy(iterator);
}
final sliced = entities.skip(offset);
final limited = limit == null ? sliced : sliced.take(limit);
return NSQueryResults._(resultset, limited.toList());
} catch (error) {
nosqueel.ns_resultset_destroy(resultset);
rethrow;
}
}