mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-07 16:13:07 +00:00
change to non-closure iterator
This commit is contained in:
parent
0a86a3466a
commit
f8ba1e7684
@ -30,6 +30,7 @@ type
|
|||||||
sort*: SortOrder # Sort order - not available in all backends
|
sort*: SortOrder # Sort order - not available in all backends
|
||||||
|
|
||||||
DbQueryHandle*[T] = object
|
DbQueryHandle*[T] = object
|
||||||
|
query*: DbQuery
|
||||||
cancel*: bool
|
cancel*: bool
|
||||||
env*: T
|
env*: T
|
||||||
|
|
||||||
|
|||||||
@ -116,7 +116,7 @@ proc close*(self: SQLiteBackend): ?!void =
|
|||||||
proc query*(
|
proc query*(
|
||||||
self: SQLiteBackend,
|
self: SQLiteBackend,
|
||||||
query: DbQuery
|
query: DbQuery
|
||||||
): Result[DbQueryHandle, ref CatchableError] =
|
): Result[DbQueryHandle[RawStmtPtr], ref CatchableError] =
|
||||||
|
|
||||||
var
|
var
|
||||||
queryStr = if query.value:
|
queryStr = if query.value:
|
||||||
@ -161,6 +161,8 @@ proc query*(
|
|||||||
if not (v == SQLITE_OK):
|
if not (v == SQLITE_OK):
|
||||||
return failure newException(DatastoreError, $sqlite3_errstr(v))
|
return failure newException(DatastoreError, $sqlite3_errstr(v))
|
||||||
|
|
||||||
|
success DbQueryHandle[RawStmtPtr](query: query, env: s)
|
||||||
|
|
||||||
proc close*(handle: DbQueryHandle[RawStmtPtr]) =
|
proc close*(handle: DbQueryHandle[RawStmtPtr]) =
|
||||||
echo "sqlite backend: query: finally close"
|
echo "sqlite backend: query: finally close"
|
||||||
discard sqlite3_reset(handle.env)
|
discard sqlite3_reset(handle.env)
|
||||||
@ -168,7 +170,7 @@ proc close*(handle: DbQueryHandle[RawStmtPtr]) =
|
|||||||
handle.env.dispose()
|
handle.env.dispose()
|
||||||
return
|
return
|
||||||
|
|
||||||
iterator iter*(handle: var DbQueryHandle): ?!DbQueryResponse =
|
iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse =
|
||||||
let iter = iterator(): ?!DbQueryResponse {.closure.} =
|
let iter = iterator(): ?!DbQueryResponse {.closure.} =
|
||||||
|
|
||||||
while true:
|
while true:
|
||||||
@ -186,7 +188,7 @@ iterator iter*(handle: var DbQueryHandle): ?!DbQueryResponse =
|
|||||||
key = KeyId.new(sqlite3_column_text_not_null(handle.env, QueryStmtIdCol))
|
key = KeyId.new(sqlite3_column_text_not_null(handle.env, QueryStmtIdCol))
|
||||||
|
|
||||||
blob: ?pointer =
|
blob: ?pointer =
|
||||||
if query.value: sqlite3_column_blob(handle.env, QueryStmtDataCol).some
|
if handle.query.value: sqlite3_column_blob(handle.env, QueryStmtDataCol).some
|
||||||
else: pointer.none
|
else: pointer.none
|
||||||
|
|
||||||
# detect out-of-memory error
|
# detect out-of-memory error
|
||||||
@ -222,7 +224,6 @@ iterator iter*(handle: var DbQueryHandle): ?!DbQueryResponse =
|
|||||||
handle.close()
|
handle.close()
|
||||||
return failure newException(DatastoreError, $sqlite3_errstr(v))
|
return failure newException(DatastoreError, $sqlite3_errstr(v))
|
||||||
|
|
||||||
success (handle, iter)
|
|
||||||
|
|
||||||
|
|
||||||
proc contains*(self: SQLiteBackend, key: DbKey): bool =
|
proc contains*(self: SQLiteBackend, key: DbKey): bool =
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user