mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-05-21 09:09:25 +00:00
simplifying
This commit is contained in:
parent
575d973118
commit
77e53d2bf6
@ -26,7 +26,7 @@ proc readOnly*[K,V](self: SQLiteBackend[K,V]): bool = self.db.readOnly
|
|||||||
proc timestamp*(t = epochTime()): int64 =
|
proc timestamp*(t = epochTime()): int64 =
|
||||||
(t * 1_000_000).int64
|
(t * 1_000_000).int64
|
||||||
|
|
||||||
proc has*[K,V](self: SQLiteBackend[K,V], key: DbKey): ?!bool =
|
proc has*[K,V](self: SQLiteBackend[K,V], key: K): ?!bool =
|
||||||
var
|
var
|
||||||
exists = false
|
exists = false
|
||||||
key = key
|
key = key
|
||||||
@ -42,7 +42,7 @@ proc has*[K,V](self: SQLiteBackend[K,V], key: DbKey): ?!bool =
|
|||||||
proc delete*[K,V](self: SQLiteBackend[K,V], key: K): ?!void =
|
proc delete*[K,V](self: SQLiteBackend[K,V], key: K): ?!void =
|
||||||
return self.db.deleteStmt.exec((key))
|
return self.db.deleteStmt.exec((key))
|
||||||
|
|
||||||
proc delete*[K,V](self: SQLiteBackend[K,V], keys: openArray[DbKey]): ?!void =
|
proc delete*[K,V](self: SQLiteBackend[K,V], keys: openArray[K]): ?!void =
|
||||||
if err =? self.db.beginStmt.exec().errorOption:
|
if err =? self.db.beginStmt.exec().errorOption:
|
||||||
return failure(err)
|
return failure(err)
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ proc get*[K,V](self: SQLiteBackend[K,V], key: K): ?!seq[byte] =
|
|||||||
|
|
||||||
if bytes.len <= 0:
|
if bytes.len <= 0:
|
||||||
return failure(
|
return failure(
|
||||||
newException(DatastoreKeyNotFound, "DbKey doesn't exist"))
|
newException(DatastoreKeyNotFound, "key doesn't exist"))
|
||||||
|
|
||||||
return success bytes
|
return success bytes
|
||||||
|
|
||||||
@ -212,7 +212,7 @@ iterator iter*[K, V](handle: var DbQueryHandle[K, V, RawStmtPtr]): ?!DbQueryResp
|
|||||||
handle.close()
|
handle.close()
|
||||||
|
|
||||||
|
|
||||||
proc contains*[K,V](self: SQLiteBackend[K,V], key: DbKey): bool =
|
proc contains*[K,V](self: SQLiteBackend[K,V], key: K): bool =
|
||||||
return self.has(key).get()
|
return self.has(key).get()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -50,7 +50,7 @@ type
|
|||||||
|
|
||||||
|
|
||||||
TaskCtx[D; T: ThreadTypes] = object
|
TaskCtx[D; T: ThreadTypes] = object
|
||||||
ds: D
|
key: KeyId
|
||||||
res: ThreadResult[T]
|
res: ThreadResult[T]
|
||||||
signal: ThreadSignalPtr
|
signal: ThreadSignalPtr
|
||||||
running: bool
|
running: bool
|
||||||
@ -74,14 +74,20 @@ proc setCancelled(ctx: var TaskCtx): bool =
|
|||||||
ctx.cancelled = true
|
ctx.cancelled = true
|
||||||
return true
|
return true
|
||||||
|
|
||||||
proc dispatchTask[D, T](self: ThreadDatastore,
|
template dispatchTask(self: ThreadDatastore,
|
||||||
ctx: var TaskCtx[D, T],
|
signal: ThreadSignalPtr,
|
||||||
key: ?KeyId = KeyId.none,
|
fn: untyped): auto =
|
||||||
runTask: proc(): void
|
var
|
||||||
): Future[?!T] {.async.} =
|
ctx = TaskCtx[SqliteDB, bool](signal: signal)
|
||||||
try:
|
try:
|
||||||
runTask()
|
case self.backend.kind:
|
||||||
await wait(ctx.signal)
|
of Sqlite:
|
||||||
|
var ds = self.backend.sql
|
||||||
|
proc runTask() =
|
||||||
|
`fn`(addr ctx, ds)
|
||||||
|
runTask()
|
||||||
|
|
||||||
|
await wait(ctx.signal)
|
||||||
except CancelledError as exc:
|
except CancelledError as exc:
|
||||||
trace "Cancelling thread future!", exc = exc.msg
|
trace "Cancelling thread future!", exc = exc.msg
|
||||||
while not ctx.setCancelled():
|
while not ctx.setCancelled():
|
||||||
@ -98,13 +104,13 @@ proc acquireSignal(): ?!ThreadSignalPtr =
|
|||||||
else:
|
else:
|
||||||
success signal.get()
|
success signal.get()
|
||||||
|
|
||||||
proc hasTask(ctx: ptr TaskCtx, key: KeyId) =
|
proc hasTask[D](ctx: ptr TaskCtx, ds: D) =
|
||||||
defer:
|
defer:
|
||||||
if not ctx.isNil:
|
if not ctx.isNil:
|
||||||
discard ctx[].signal.fireSync()
|
discard ctx[].signal.fireSync()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
let res = has(ctx.ds, key)
|
let res = has(ds, key)
|
||||||
ctx.res = res.mapErr() do(e: ref CatchableError) -> ThreadResErr:
|
ctx.res = res.mapErr() do(e: ref CatchableError) -> ThreadResErr:
|
||||||
e.toThreadErr()
|
e.toThreadErr()
|
||||||
except CatchableError as exc:
|
except CatchableError as exc:
|
||||||
@ -118,16 +124,7 @@ method has*(self: ThreadDatastore, key: Key): Future[?!bool] {.async.} =
|
|||||||
without signal =? acquireSignal(), err:
|
without signal =? acquireSignal(), err:
|
||||||
return bool.failure err
|
return bool.failure err
|
||||||
|
|
||||||
case self.backend.kind:
|
dispatchTask(self, signal, hasTask)
|
||||||
of Sqlite:
|
|
||||||
var
|
|
||||||
ds = self.backend.sql
|
|
||||||
ctx = TaskCtx[SqliteDB, bool](ds: self.backend.sql, signal: signal)
|
|
||||||
|
|
||||||
proc runTask() =
|
|
||||||
self.tp.spawn hasTask(addr ctx, key)
|
|
||||||
|
|
||||||
return await self.dispatchTask(ctx, key.some, runTask)
|
|
||||||
|
|
||||||
# proc asyncDelTask(ctx: ptr TaskCtx[void], key: ptr Key) {.async.} =
|
# proc asyncDelTask(ctx: ptr TaskCtx[void], key: ptr Key) {.async.} =
|
||||||
# if ctx.isNil:
|
# if ctx.isNil:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user