lazy method

Stream<MssqlRow> lazy(
  1. MssqlSession session, {
  2. int size = 500,
  3. MssqlDialect dialect = MssqlDialect.sql2012,
})

chunk as a stream, for a caller that would rather iterate than pass a callback.

Implementation

Stream<MssqlRow> lazy(
  MssqlSession session, {
  int size = 500,
  MssqlDialect dialect = MssqlDialect.sql2012,
}) async* {
  if (size <= 0) {
    throw ArgumentError.value(size, 'size', 'Must be positive.');
  }
  if (ordering.isEmpty) {
    throw StateError(
      'lazy() needs orderBy(); see chunk(). Source: ${source.quoted}.',
    );
  }
  MssqlKeyset.requireNamedColumns(ordering, 'lazy()');
  List<Object?>? after;
  while (true) {
    var query = this;
    if (after != null) {
      query = query.where(MssqlKeyset.after(ordering, after));
    }
    final page = await query.top(size).get(session, dialect: dialect);
    for (final row in page) {
      yield row;
    }
    if (page.length < size) return;
    after = MssqlKeyset.keysFromRow(page.last, ordering);
  }
}