read<T2 extends AbstractKey<Comparable> > method
Future<ReadResult<T2> >
read<T2 extends AbstractKey<Comparable> >(
- T2 keyType, {
- T2? startkey,
- T2? endkey,
- KeyValueAdapterSession? session,
- required bool desc,
- required bool inclusiveStart,
- required bool inclusiveEnd,
- int? skip,
- int? limit,
override
Implementation
@override
Future<ReadResult<T2>> read<T2 extends AbstractKey<Comparable>>(T2 keyType,
{T2? startkey,
T2? endkey,
KeyValueAdapterSession? session,
required bool desc,
required bool inclusiveStart,
required bool inclusiveEnd,
int? skip,
int? limit}) async {
var boxName = await getBoxName(keyType);
var tree = _avlTrees[boxName]!;
var box = _boxes[boxName]!;
var iterator = desc ? tree.reverseIterator : tree.iterator;
if (startkey?.key != null) {
iterator = tree.fromIterator(startkey!,
reversed: desc, inclusive: inclusiveStart);
}
var result = <T2, Map<String, dynamic>>{};
var keys = tree.map((e) => e).toList();
while (iterator.moveNext()) {
if (endkey?.key != null) {
var matching = (inclusiveEnd ? 1 : 0) * (desc ? -1 : 1);
var endKeyCmp = iterator.current.compareTo(endkey);
if (desc && endKeyCmp <= matching) {
break;
}
if (!desc && endKeyCmp >= matching) {
break;
}
}
if (skip != null && skip > 0) {
--skip;
} else {
var exist = await box.get(encodeKey(iterator.current));
if (exist != null) {
result[iterator.current as T2] = jsonDecode(exist);
}
if (limit != null) {
--limit;
}
}
if (limit == 0) {
break;
}
}
return ReadResult(
totalRows: await tableSize(keyType), offset: 0, records: result);
}