rangeDigest method

  1. @override
Future<RangeDigest> rangeDigest(
  1. String table, {
  2. String? fromHlc,
  3. String? toHlc,
})
override

One indexed range scan over (collection, hlc_key); O(1) memory.

Implementation

@override
Future<RangeDigest> rangeDigest(
  String table, {
  String? fromHlc,
  String? toHlc,
}) async {
  if (_db == null) return RangeDigest.empty;
  final conditions = ['collection = ?'];
  final params = <Object?>[table];
  if (fromHlc != null) {
    conditions.add('hlc_key > ?');
    params.add(_hlcKey(Hlc.parse(fromHlc)));
  }
  if (toHlc != null) {
    conditions.add('hlc_key <= ?');
    params.add(_hlcKey(Hlc.parse(toHlc)));
  }
  final builder = RangeDigestBuilder();
  final rows = _open.select(
    'SELECT key, hlc FROM crdt_records WHERE ${conditions.join(' AND ')}',
    params,
  );
  for (final row in rows) {
    builder.add(row['key'] as String, Hlc.parse(row['hlc'] as String));
  }
  return builder.build();
}