rangeDigest method
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();
}