fixup backend types

This commit is contained in:
Jaremy Creechley 2023-09-26 17:01:21 -07:00
parent c31f1890b2
commit 36e6679a79
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
5 changed files with 23 additions and 36 deletions

View File

@ -44,4 +44,4 @@ proc init*(T: type Query,
dbQuery[Key](key, value, sort, offset, limit)
proc toKey*(key: KeyId): Key {.inline, raises: [].} =
Key.init(key.data).expect("expected valid key here for but got `" & $key.data & "`")
Key.init($key.data).expect("expected valid key here for but got `" & $key.data & "`")

View File

@ -58,13 +58,12 @@ proc delete*[K,V](self: SQLiteBackend[K,V], keys: openArray[K]): ?!void =
return success()
proc get*[K,V](self: SQLiteBackend[K,V], key: K): ?!seq[byte] =
proc get*[K,V](self: SQLiteBackend[K,V], key: K): ?!V =
# see comment in ./filesystem_datastore re: finer control of memory
# allocation in `proc get`, could apply here as well if bytes were read
# incrementally with `sqlite3_blob_read`
var
bytes: seq[byte]
var bytes: V
proc onData(s: RawStmtPtr) =
bytes = dataCol[V](self.db.getDataCol)

View File

@ -87,7 +87,7 @@ proc setData*[T: byte | char](db: DataBuffer, data: openArray[T]) =
copyMem(db[].buf, baseAddr data, data.len())
db[].size = data.len()
converter toSeq*(self: DataBuffer): seq[byte] =
proc toSeq*(self: DataBuffer): seq[byte] =
## convert buffer to a seq type using copy and either a byte or char
##
@ -102,7 +102,7 @@ proc `@`*(self: DataBuffer): seq[byte] =
self.toSeq()
converter toString*(data: DataBuffer): string =
proc toString*(data: DataBuffer): string =
## convert buffer to string type using copy
##

View File

@ -122,14 +122,11 @@ template dispatchTaskWrap[T](self: ThreadDatastore,
try:
case self.backend.kind:
of Sqlite:
echo "dispatchTask:sql:"
var ds {.used, inject.} = self.backend.sql
proc runTask() =
`blk`
runTask()
echo "dispatchTask:wait:start"
await wait(ctx[].signal)
echo "dispatchTask:wait:done"
except CancelledError as exc:
trace "Cancelling thread future!", exc = exc.msg
@ -191,14 +188,8 @@ proc putTask[T, DB](ctx: TaskCtx[T], ds: DB;
key: KeyId,
data: DataBuffer) {.gcsafe, nimcall.} =
## run backend command
echo "\n\nputTask:start "
executeTask(ctx):
echo "putTask:key: ", key
echo "putTask:data: ", data
echo "putTask:ctx: ", ctx.repr()
echo ""
put(ds, key, data)
echo "putTask:done"
method put*(self: ThreadDatastore,
key: Key,
@ -209,14 +200,8 @@ method put*(self: ThreadDatastore,
let key = KeyId.new key.id()
let data = DataBuffer.new data
dispatchTask[void](self, signal):
echo "put:key: ", key
echo "put:data: ", data
echo "put:ctx: ", ctx.repr()
echo ""
self.tp.spawn putTask(ctx, ds, key, data)
return ctx[].res
method put*(
@ -227,12 +212,14 @@ method put*(
if err =? (await self.put(entry.key, entry.data)).errorOption:
return failure err
proc getTask[T, DB](ctx: TaskCtx[T], ds: DB;
proc getTask[DB](ctx: TaskCtx[DataBuffer], ds: DB;
key: KeyId) {.gcsafe, nimcall.} =
## run backend command
executeTask(ctx):
get(ds, key)
let res = get(ds, key)
static:
echo "getTask:type: ", res.typeof
res
method get*(self: ThreadDatastore,
key: Key,
@ -242,8 +229,9 @@ method get*(self: ThreadDatastore,
return failure err
let key = KeyId.new key.id()
dispatchTask[void](self, signal):
dispatchTask[DataBuffer](self, signal):
self.tp.spawn getTask(ctx, ds, key)
# return ctx[].res
method close*(self: ThreadDatastore): Future[?!void] {.async.} =
await self.semaphore.closeAll()

View File

@ -46,17 +46,17 @@ suite "Test Basic ThreadProxyDatastore":
echo "res1: ", res1.repr
check res1.isOk
# test "check get":
# echo "\n\n=== get ==="
# echo "get send key: ", key.repr
# let res2 = await ds.get(key)
# echo "get key post: ", key.repr
# echo "get res2: ", res2.repr
# echo res2.get() == data
# var val = ""
# for c in res2.get():
# val &= char(c)
# echo "get res2: ", $val
test "check get":
echo "\n\n=== get ==="
echo "get send key: ", key.repr
let res2 = await ds.get(key)
echo "get key post: ", key.repr
echo "get res2: ", res2.repr
echo res2.get() == data
var val = ""
for c in res2.get():
val &= char(c)
echo "get res2: ", $val
# suite "Test Basic ThreadDatastore with SQLite":