mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-03 22:23:10 +00:00
adding serialization to query iter
This commit is contained in:
parent
71c704f0f5
commit
600dca6148
@ -188,10 +188,23 @@ method query*(
|
|||||||
var
|
var
|
||||||
iter = QueryIter.new()
|
iter = QueryIter.new()
|
||||||
|
|
||||||
|
let lock = newAsyncLock()
|
||||||
proc next(): Future[?!QueryResponse] {.async.} =
|
proc next(): Future[?!QueryResponse] {.async.} =
|
||||||
|
defer:
|
||||||
|
if lock.locked:
|
||||||
|
lock.release()
|
||||||
|
|
||||||
|
if lock.locked:
|
||||||
|
return failure (ref DatastoreError)(msg: "Should always await query features")
|
||||||
|
|
||||||
let
|
let
|
||||||
path = walker()
|
path = walker()
|
||||||
|
|
||||||
|
if iter.finished:
|
||||||
|
return failure "iterator is finished"
|
||||||
|
|
||||||
|
await lock.acquire()
|
||||||
|
|
||||||
if finished(walker):
|
if finished(walker):
|
||||||
iter.finished = true
|
iter.finished = true
|
||||||
return success (Key.none, EmptyBytes)
|
return success (Key.none, EmptyBytes)
|
||||||
|
|||||||
@ -151,9 +151,19 @@ method 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))
|
||||||
|
|
||||||
|
let lock = newAsyncLock()
|
||||||
proc next(): Future[?!QueryResponse] {.async.} =
|
proc next(): Future[?!QueryResponse] {.async.} =
|
||||||
|
defer:
|
||||||
|
if lock.locked:
|
||||||
|
lock.release()
|
||||||
|
|
||||||
|
if lock.locked:
|
||||||
|
return failure (ref DatastoreError)(msg: "Should always await query features")
|
||||||
|
|
||||||
if iter.finished:
|
if iter.finished:
|
||||||
return failure(newException(QueryEndedError, "Calling next on a finished query!"))
|
return failure((ref QueryEndedError)(msg: "Calling next on a finished query!"))
|
||||||
|
|
||||||
|
await lock.acquire()
|
||||||
|
|
||||||
let
|
let
|
||||||
v = sqlite3_step(s)
|
v = sqlite3_step(s)
|
||||||
|
|||||||
@ -287,6 +287,9 @@ method query*(
|
|||||||
if lock.locked:
|
if lock.locked:
|
||||||
lock.release()
|
lock.release()
|
||||||
|
|
||||||
|
if lock.locked:
|
||||||
|
return failure (ref DatastoreError)(msg: "Should always await query features")
|
||||||
|
|
||||||
if iter.finished == true:
|
if iter.finished == true:
|
||||||
return failure (ref QueryEndedError)(msg: "Calling next on a finished query!")
|
return failure (ref QueryEndedError)(msg: "Calling next on a finished query!")
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user