trying to fixup query

This commit is contained in:
Jaremy Creechley 2023-09-21 18:29:07 -07:00
parent 4750ac69df
commit cbb38a51fb
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
2 changed files with 18 additions and 8 deletions

View File

@ -29,6 +29,9 @@ type
offset*: int # Offset from which to start querying - not available in all backends
sort*: SortOrder # Sort order - not available in all backends
DbQueryHandle* = ref object
cancel*: bool
DbQueryResponse* = tuple[key: Option[KeyId], val: DataBuffer]
proc `$`*(id: KeyId): string = $(id.data)

View File

@ -114,9 +114,11 @@ proc close*(self: SQLiteBackend): ?!void =
return success()
proc query*(self: SQLiteBackend,
query: DbQuery
): Result[iterator(): ?!DbQueryResponse {.closure.}, ref CatchableError] =
proc query*(
self: SQLiteBackend,
query: DbQuery
): Result[(DbQueryHandle, iterator(): ?!DbQueryResponse {.closure.}),
ref CatchableError] =
var
queryStr = if query.value:
@ -161,11 +163,14 @@ proc query*(self: SQLiteBackend,
if not (v == SQLITE_OK):
return failure newException(DatastoreError, $sqlite3_errstr(v))
success iterator(): ?!DbQueryResponse {.closure.} =
let handle = DbQueryHandle()
let iter = iterator(): ?!DbQueryResponse {.closure.} =
try:
let
v = sqlite3_step(s)
if handle.cancel:
return
let v = sqlite3_step(s)
case v
of SQLITE_ROW:
@ -196,9 +201,9 @@ proc query*(self: SQLiteBackend,
if blob.isSome: DataBuffer.new(blob.get(), 0, dataLen - 1)
else: DataBuffer.new(0)
return success (key.some, data)
yield success (key.some, data)
of SQLITE_DONE:
return success (KeyId.none, DataBuffer.new())
return
else:
return failure newException(DatastoreError, $sqlite3_errstr(v))
@ -208,6 +213,8 @@ proc query*(self: SQLiteBackend,
discard sqlite3_clear_bindings(s)
s.dispose()
return
success (handle, iter)
proc contains*(self: SQLiteBackend, key: DbKey): bool =