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
9b004cde03
commit
8fccc77387
@ -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()
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user