query iterator using items is breaks when the DS isn't blocking

This commit is contained in:
Jaremy Creechley 2023-08-29 20:34:30 -07:00 committed by Dmitriy Ryajov
parent 9b004cde03
commit 8fccc77387
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
2 changed files with 6 additions and 20 deletions

View File

@ -29,9 +29,11 @@ type
next*: GetNext
dispose*: IterDispose
proc waitForAllQueryResults*(iter: QueryIter): Future[?!seq[QueryResponse]] {.async.} =
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()
@ -45,12 +47,6 @@ proc waitForAllQueryResults*(iter: QueryIter): Future[?!seq[QueryResponse]] {.as
await iter.dispose()
return success res
proc waitForAllQueryResults*(qi: Future[?!QueryIter]): Future[?!seq[QueryResponse]] {.async.} =
without iter =? (await qi), err:
return failure err
await waitForAllQueryResults(iter)
proc defaultDispose(): Future[?!void] {.upraises: [], gcsafe, async.} =
return success()

View File

@ -9,7 +9,6 @@ import pkg/stew/byteutils
import pkg/datastore
import pretty
template queryTests*(ds: Datastore, extended = true) {.dirty.} =
var
@ -91,8 +90,7 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
(await ds.put(key3, val3)).tryGet
let
iter = tryGet(await ds.query(q))
res = tryGet(await iter.waitForAllQueryResults())
res = tryGet(await ds.query(q).waitForAllQueryResults())
check:
res.len == 2
@ -102,8 +100,6 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
res[1].key.get == key3
res[1].data == val3
(await iter.dispose()).tryGet
test "Key should all list all keys at the same level":
let
queryKey = Key.init("/a").tryGet
@ -185,8 +181,7 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
(await ds.put(key, val)).tryGet
let
iter = tryGet(await ds.query(q))
res = tryGet(await iter.waitForAllQueryResults())
res = tryGet(await ds.query(q).waitForAllQueryResults())
check:
res.len == 5
@ -200,8 +195,6 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
res[i].key.get == key
res[i].data == val
(await iter.dispose()).tryGet
test "Should apply sort order - descending":
let
key = Key.init("/a").tryGet
@ -222,8 +215,7 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
kvs = kvs.reversed
let
iter = tryGet(await ds.query(q))
res = tryGet(await iter.waitForAllQueryResults())
res = tryGet(await ds.query(q).waitForAllQueryResults())
check:
res.len == 100
@ -232,5 +224,3 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
check:
res[i].key.get == kvs[i].key.get
res[i].data == kvs[i].data
(await iter.dispose()).tryGet