mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-08 00:23:10 +00:00
query iterator using items is breaks when the DS isn't blocking
This commit is contained in:
parent
191aa3f558
commit
057493c809
@ -29,11 +29,23 @@ type
|
||||
next*: GetNext
|
||||
dispose*: IterDispose
|
||||
|
||||
proc collectAllQueries*(q: QueryIter) =
|
||||
var qr: Future[?!QueryResponse]
|
||||
while not q.finished:
|
||||
qr = q.next()
|
||||
yield qr
|
||||
proc waitForAllQueryResults*(qi: Future[?!QueryIter]): Future[?!seq[QueryResponse]] {.async.} =
|
||||
## for large blocks this would be *expensive*
|
||||
var res: seq[QueryResponse]
|
||||
without iter =? (await qi), err:
|
||||
return failure err
|
||||
|
||||
while not iter.finished:
|
||||
let val = await iter.next()
|
||||
if val.isOk():
|
||||
let qr = val.tryGet()
|
||||
if qr.key.isSome:
|
||||
res.add qr
|
||||
else:
|
||||
return failure val.error()
|
||||
|
||||
await iter.dispose()
|
||||
return success res
|
||||
|
||||
proc defaultDispose(): Future[?!void] {.upraises: [], gcsafe, async.} =
|
||||
return success()
|
||||
|
||||
@ -68,10 +68,7 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
|
||||
(await ds.put(key3, val3)).tryGet
|
||||
|
||||
let
|
||||
iter = (await ds.query(q)).tryGet
|
||||
res = (await allFinished(toSeq(iter)))
|
||||
.mapIt( it.read.tryGet )
|
||||
.filterIt( it.key.isSome )
|
||||
res = tryGet(await ds.query(q).waitForAllQueryResults())
|
||||
|
||||
check:
|
||||
res.len == 3
|
||||
@ -84,7 +81,6 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
|
||||
res[2].key.get == key3
|
||||
res[2].data.len == 0
|
||||
|
||||
(await iter.dispose()).tryGet
|
||||
|
||||
test "Key should not query parent":
|
||||
let
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user