mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-05 23:23:10 +00:00
change to non-closure iterator
This commit is contained in:
parent
f8ba1e7684
commit
598f63c651
@ -171,13 +171,7 @@ proc close*(handle: DbQueryHandle[RawStmtPtr]) =
|
||||
return
|
||||
|
||||
iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse =
|
||||
let iter = iterator(): ?!DbQueryResponse {.closure.} =
|
||||
|
||||
while true:
|
||||
|
||||
if handle.cancel:
|
||||
handle.close()
|
||||
return
|
||||
while not handle.cancel:
|
||||
|
||||
let v = sqlite3_step(handle.env)
|
||||
|
||||
@ -203,7 +197,8 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse =
|
||||
let v = sqlite3_errcode(sqlite3_db_handle(handle.env))
|
||||
|
||||
if not (v in [SQLITE_OK, SQLITE_ROW, SQLITE_DONE]):
|
||||
return failure newException(DatastoreError, $sqlite3_errstr(v))
|
||||
handle.cancel = true
|
||||
yield DbQueryResponse.failure newException(DatastoreError, $sqlite3_errstr(v))
|
||||
|
||||
let
|
||||
dataLen = sqlite3_column_bytes(handle.env, QueryStmtDataCol)
|
||||
@ -217,12 +212,13 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse =
|
||||
yield success (key.some, data)
|
||||
of SQLITE_DONE:
|
||||
echo "SQLITE DONE: return"
|
||||
handle.close()
|
||||
return
|
||||
break
|
||||
else:
|
||||
echo "SQLITE ERROR: return"
|
||||
handle.cancel = true
|
||||
yield DbQueryResponse.failure newException(DatastoreError, $sqlite3_errstr(v))
|
||||
|
||||
handle.close()
|
||||
return failure newException(DatastoreError, $sqlite3_errstr(v))
|
||||
|
||||
|
||||
|
||||
|
||||
@ -129,9 +129,13 @@ suite "queryTests":
|
||||
ds.put(key2, val2).tryGet
|
||||
ds.put(key3, val3).tryGet
|
||||
|
||||
let
|
||||
(handle, iter) = ds.query(q).tryGet
|
||||
res = iter.mapIt(it.tryGet()).reversed()
|
||||
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)
|
||||
|
||||
check:
|
||||
res.len == 3
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user