mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-08 08:33:10 +00:00
change to non-closure iterator
This commit is contained in:
parent
f0fc8ce224
commit
0efc7f6c4b
@ -178,7 +178,6 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse =
|
||||
|
||||
case v
|
||||
of SQLITE_ROW:
|
||||
echo "SQLITE ROW"
|
||||
let
|
||||
key = KeyId.new(sqlite3_column_text_not_null(handle.env, QueryStmtIdCol))
|
||||
|
||||
@ -195,7 +194,6 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse =
|
||||
# error it is necessary to check that the result is a null pointer and
|
||||
# that the result code is an error code
|
||||
if blob.isSome and blob.get().isNil:
|
||||
echo "BLOB: isSome"
|
||||
let v = sqlite3_errcode(sqlite3_db_handle(handle.env))
|
||||
|
||||
if not (v in [SQLITE_OK, SQLITE_ROW, SQLITE_DONE]):
|
||||
@ -210,14 +208,11 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse =
|
||||
DataBuffer.new(arr.toOpenArray(0, dataLen-1))
|
||||
else: DataBuffer.new("")
|
||||
|
||||
echo "SQLITE ROW: yield"
|
||||
yield success (key.some, data)
|
||||
of SQLITE_DONE:
|
||||
echo "SQLITE DONE: yield"
|
||||
handle.close()
|
||||
break
|
||||
else:
|
||||
echo "SQLITE ERROR: yield"
|
||||
handle.cancel = true
|
||||
yield DbQueryResponse.failure newException(DatastoreError, $sqlite3_errstr(v))
|
||||
break
|
||||
|
||||
@ -131,11 +131,7 @@ suite "queryTests":
|
||||
|
||||
var
|
||||
handle = ds.query(q).tryGet
|
||||
# res = handle.iter().mapIt(it.tryGet()).reversed()
|
||||
|
||||
var res: seq[DbQueryResponse]
|
||||
for item in handle.iter():
|
||||
res.insert(item.tryGet(), 0)
|
||||
res = handle.iter().toSeq().mapIt(it.tryGet()).reversed()
|
||||
|
||||
check:
|
||||
res.len == 3
|
||||
@ -148,6 +144,36 @@ suite "queryTests":
|
||||
res[2].key.get == key3
|
||||
res[2].data == val3
|
||||
|
||||
test "query should cancel":
|
||||
let
|
||||
q = DbQuery(key: key1, value: true)
|
||||
|
||||
ds.put(key1, val1).tryGet
|
||||
ds.put(key2, val2).tryGet
|
||||
ds.put(key3, val3).tryGet
|
||||
|
||||
var
|
||||
handle = ds.query(q).tryGet
|
||||
|
||||
var res: seq[DbQueryResponse]
|
||||
var cnt = 0
|
||||
for item in handle.iter():
|
||||
cnt.inc
|
||||
res.insert(item.tryGet(), 0)
|
||||
if cnt > 1:
|
||||
handle.cancel = true
|
||||
|
||||
check:
|
||||
handle.cancel == true
|
||||
handle.closed == true
|
||||
res.len == 2
|
||||
|
||||
res[0].key.get == key2
|
||||
res[0].data == val2
|
||||
|
||||
res[1].key.get == key3
|
||||
res[1].data == val3
|
||||
|
||||
# test "Key should query all keys without values":
|
||||
# let
|
||||
# q = DbQuery(key: key1, value: false)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user