fetch method

NSQueryResults fetch({
  1. int? limit,
  2. int offset = 0,
})

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;
  }
}