mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-08 00:23:10 +00:00
fix compiler issue -- wasn't detecting discard on result correctly
This commit is contained in:
parent
2d2b663516
commit
1f0012530d
@ -29,12 +29,11 @@ type
|
|||||||
next*: GetNext
|
next*: GetNext
|
||||||
dispose*: IterDispose
|
dispose*: IterDispose
|
||||||
|
|
||||||
proc waitForAllQueryResults*(iter: QueryIter): Future[?!seq[QueryResponse]] {.async.} =
|
proc waitForAllQueryResults*(qi: ?!QueryIter): Future[?!seq[QueryResponse]] {.async.} =
|
||||||
## for large blocks this would be *expensive*
|
## for large blocks this would be *expensive*
|
||||||
var res: seq[QueryResponse]
|
var res: seq[QueryResponse]
|
||||||
# if qi.isErr():
|
without iter =? qi, err:
|
||||||
# return failure qi.error()
|
return failure err
|
||||||
# let iter = qi.get()
|
|
||||||
|
|
||||||
while not iter.finished:
|
while not iter.finished:
|
||||||
let val = await iter.next()
|
let val = await iter.next()
|
||||||
@ -45,9 +44,15 @@ proc waitForAllQueryResults*(iter: QueryIter): Future[?!seq[QueryResponse]] {.as
|
|||||||
else:
|
else:
|
||||||
return failure val.error()
|
return failure val.error()
|
||||||
|
|
||||||
await iter.dispose()
|
let rd = await iter.dispose()
|
||||||
|
if rd.isErr():
|
||||||
|
return failure(rd.error())
|
||||||
return success res
|
return success res
|
||||||
|
|
||||||
|
proc waitForAllQueryResults*(iter: Future[?!QueryIter]): Future[?!seq[QueryResponse]] {.async.} =
|
||||||
|
let res = await iter
|
||||||
|
await waitForAllQueryResults(res)
|
||||||
|
|
||||||
proc defaultDispose(): Future[?!void] {.upraises: [], gcsafe, async.} =
|
proc defaultDispose(): Future[?!void] {.upraises: [], gcsafe, async.} =
|
||||||
return success()
|
return success()
|
||||||
|
|
||||||
|
|||||||
@ -67,7 +67,7 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
|
|||||||
(await ds.put(key3, val3)).tryGet
|
(await ds.put(key3, val3)).tryGet
|
||||||
|
|
||||||
let
|
let
|
||||||
all = waitForAllQueryResults(tryGet(await ds.query(q)))
|
all = waitForAllQueryResults(await ds.query(q))
|
||||||
res = tryGet(await all)
|
res = tryGet(await all)
|
||||||
|
|
||||||
check:
|
check:
|
||||||
@ -82,146 +82,146 @@ template queryTests*(ds: Datastore, extended = true) {.dirty.} =
|
|||||||
res[2].data.len == 0
|
res[2].data.len == 0
|
||||||
|
|
||||||
|
|
||||||
# test "Key should not query parent":
|
test "Key should not query parent":
|
||||||
# let
|
let
|
||||||
# q = Query.init(key2)
|
q = Query.init(key2)
|
||||||
|
|
||||||
# (await ds.put(key1, val1)).tryGet
|
(await ds.put(key1, val1)).tryGet
|
||||||
# (await ds.put(key2, val2)).tryGet
|
(await ds.put(key2, val2)).tryGet
|
||||||
# (await ds.put(key3, val3)).tryGet
|
(await ds.put(key3, val3)).tryGet
|
||||||
|
|
||||||
# let
|
let
|
||||||
# res = tryGet(await ds.query(q).waitForAllQueryResults())
|
res = tryGet(await ds.query(q).waitForAllQueryResults())
|
||||||
|
|
||||||
# check:
|
check:
|
||||||
# res.len == 2
|
res.len == 2
|
||||||
# res[0].key.get == key2
|
res[0].key.get == key2
|
||||||
# res[0].data == val2
|
res[0].data == val2
|
||||||
|
|
||||||
# res[1].key.get == key3
|
res[1].key.get == key3
|
||||||
# res[1].data == val3
|
res[1].data == val3
|
||||||
|
|
||||||
# test "Key should all list all keys at the same level":
|
test "Key should all list all keys at the same level":
|
||||||
# let
|
let
|
||||||
# queryKey = Key.init("/a").tryGet
|
queryKey = Key.init("/a").tryGet
|
||||||
# q = Query.init(queryKey)
|
q = Query.init(queryKey)
|
||||||
|
|
||||||
# (await ds.put(key1, val1)).tryGet
|
(await ds.put(key1, val1)).tryGet
|
||||||
# (await ds.put(key2, val2)).tryGet
|
(await ds.put(key2, val2)).tryGet
|
||||||
# (await ds.put(key3, val3)).tryGet
|
(await ds.put(key3, val3)).tryGet
|
||||||
|
|
||||||
# let
|
let
|
||||||
# iter = (await ds.query(q)).tryGet
|
iter = (await ds.query(q)).tryGet
|
||||||
|
|
||||||
# var
|
var
|
||||||
# res = tryGet(await ds.query(q).waitForAllQueryResults())
|
res = tryGet(await ds.query(q).waitForAllQueryResults())
|
||||||
|
|
||||||
# res.sort do (a, b: QueryResponse) -> int:
|
res.sort do (a, b: QueryResponse) -> int:
|
||||||
# cmp(a.key.get.id, b.key.get.id)
|
cmp(a.key.get.id, b.key.get.id)
|
||||||
|
|
||||||
# check:
|
check:
|
||||||
# res.len == 3
|
res.len == 3
|
||||||
# res[0].key.get == key1
|
res[0].key.get == key1
|
||||||
# res[0].data == val1
|
res[0].data == val1
|
||||||
|
|
||||||
# res[1].key.get == key2
|
res[1].key.get == key2
|
||||||
# res[1].data == val2
|
res[1].data == val2
|
||||||
|
|
||||||
# res[2].key.get == key3
|
res[2].key.get == key3
|
||||||
# res[2].data == val3
|
res[2].data == val3
|
||||||
|
|
||||||
# (await iter.dispose()).tryGet
|
(await iter.dispose()).tryGet
|
||||||
|
|
||||||
# if extended:
|
if extended:
|
||||||
# test "Should apply limit":
|
test "Should apply limit":
|
||||||
# let
|
let
|
||||||
# key = Key.init("/a").tryGet
|
key = Key.init("/a").tryGet
|
||||||
# q = Query.init(key, limit = 10)
|
q = Query.init(key, limit = 10)
|
||||||
|
|
||||||
# for i in 0..<100:
|
for i in 0..<100:
|
||||||
# let
|
let
|
||||||
# key = Key.init(key, Key.init("/" & $i).tryGet).tryGet
|
key = Key.init(key, Key.init("/" & $i).tryGet).tryGet
|
||||||
# val = ("val " & $i).toBytes
|
val = ("val " & $i).toBytes
|
||||||
|
|
||||||
# (await ds.put(key, val)).tryGet
|
(await ds.put(key, val)).tryGet
|
||||||
|
|
||||||
# let
|
let
|
||||||
# res = tryGet(await ds.query(q).waitForAllQueryResults())
|
res = tryGet(await ds.query(q).waitForAllQueryResults())
|
||||||
|
|
||||||
# check:
|
check:
|
||||||
# res.len == 10
|
res.len == 10
|
||||||
|
|
||||||
# test "Should not apply offset":
|
test "Should not apply offset":
|
||||||
# let
|
let
|
||||||
# key = Key.init("/a").tryGet
|
key = Key.init("/a").tryGet
|
||||||
# q = Query.init(key, offset = 90)
|
q = Query.init(key, offset = 90)
|
||||||
|
|
||||||
# for i in 0..<100:
|
for i in 0..<100:
|
||||||
# let
|
let
|
||||||
# key = Key.init(key, Key.init("/" & $i).tryGet).tryGet
|
key = Key.init(key, Key.init("/" & $i).tryGet).tryGet
|
||||||
# val = ("val " & $i).toBytes
|
val = ("val " & $i).toBytes
|
||||||
|
|
||||||
# (await ds.put(key, val)).tryGet
|
(await ds.put(key, val)).tryGet
|
||||||
|
|
||||||
# let
|
let
|
||||||
# res = tryGet(await ds.query(q).waitForAllQueryResults())
|
res = tryGet(await ds.query(q).waitForAllQueryResults())
|
||||||
|
|
||||||
# check:
|
check:
|
||||||
# res.len == 10
|
res.len == 10
|
||||||
|
|
||||||
# test "Should not apply offset and limit":
|
test "Should not apply offset and limit":
|
||||||
# let
|
let
|
||||||
# key = Key.init("/a").tryGet
|
key = Key.init("/a").tryGet
|
||||||
# q = Query.init(key, offset = 95, limit = 5)
|
q = Query.init(key, offset = 95, limit = 5)
|
||||||
|
|
||||||
# for i in 0..<100:
|
for i in 0..<100:
|
||||||
# let
|
let
|
||||||
# key = Key.init(key, Key.init("/" & $i).tryGet).tryGet
|
key = Key.init(key, Key.init("/" & $i).tryGet).tryGet
|
||||||
# val = ("val " & $i).toBytes
|
val = ("val " & $i).toBytes
|
||||||
|
|
||||||
# (await ds.put(key, val)).tryGet
|
(await ds.put(key, val)).tryGet
|
||||||
|
|
||||||
# let
|
let
|
||||||
# res = tryGet(await ds.query(q).waitForAllQueryResults())
|
res = tryGet(await ds.query(q).waitForAllQueryResults())
|
||||||
|
|
||||||
# check:
|
check:
|
||||||
# res.len == 5
|
res.len == 5
|
||||||
|
|
||||||
# for i in 0..<res.high:
|
for i in 0..<res.high:
|
||||||
# let
|
let
|
||||||
# val = ("val " & $(i + 95)).toBytes
|
val = ("val " & $(i + 95)).toBytes
|
||||||
# key = Key.init(key, Key.init("/" & $(i + 95)).tryGet).tryGet
|
key = Key.init(key, Key.init("/" & $(i + 95)).tryGet).tryGet
|
||||||
|
|
||||||
# check:
|
check:
|
||||||
# res[i].key.get == key
|
res[i].key.get == key
|
||||||
# res[i].data == val
|
res[i].data == val
|
||||||
|
|
||||||
# test "Should apply sort order - descending":
|
test "Should apply sort order - descending":
|
||||||
# let
|
let
|
||||||
# key = Key.init("/a").tryGet
|
key = Key.init("/a").tryGet
|
||||||
# q = Query.init(key, sort = SortOrder.Descending)
|
q = Query.init(key, sort = SortOrder.Descending)
|
||||||
|
|
||||||
# var kvs: seq[QueryResponse]
|
var kvs: seq[QueryResponse]
|
||||||
# for i in 0..<100:
|
for i in 0..<100:
|
||||||
# let
|
let
|
||||||
# k = Key.init(key, Key.init("/" & $i).tryGet).tryGet
|
k = Key.init(key, Key.init("/" & $i).tryGet).tryGet
|
||||||
# val = ("val " & $i).toBytes
|
val = ("val " & $i).toBytes
|
||||||
|
|
||||||
# kvs.add((k.some, val))
|
kvs.add((k.some, val))
|
||||||
# (await ds.put(k, val)).tryGet
|
(await ds.put(k, val)).tryGet
|
||||||
|
|
||||||
# # lexicographic sort, as it comes from the backend
|
# lexicographic sort, as it comes from the backend
|
||||||
# kvs.sort do (a, b: QueryResponse) -> int:
|
kvs.sort do (a, b: QueryResponse) -> int:
|
||||||
# cmp(a.key.get.id, b.key.get.id)
|
cmp(a.key.get.id, b.key.get.id)
|
||||||
|
|
||||||
# kvs = kvs.reversed
|
kvs = kvs.reversed
|
||||||
# let
|
let
|
||||||
# res = tryGet(await ds.query(q).waitForAllQueryResults())
|
res = tryGet(await ds.query(q).waitForAllQueryResults())
|
||||||
|
|
||||||
# check:
|
check:
|
||||||
# res.len == 100
|
res.len == 100
|
||||||
|
|
||||||
# for i, r in res[1..^1]:
|
for i, r in res[1..^1]:
|
||||||
# check:
|
check:
|
||||||
# res[i].key.get == kvs[i].key.get
|
res[i].key.get == kvs[i].key.get
|
||||||
# res[i].data == kvs[i].data
|
res[i].data == kvs[i].data
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user