mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-03 22:23:10 +00:00
updating items
This commit is contained in:
parent
57450fe25a
commit
e592aaf74e
105
datastore/threadbackend.nim
Normal file
105
datastore/threadbackend.nim
Normal file
@ -0,0 +1,105 @@
|
||||
import std/tables
|
||||
|
||||
import pkg/chronos
|
||||
import pkg/questionable
|
||||
import pkg/questionable/results
|
||||
import pkg/upraises
|
||||
|
||||
import ./key
|
||||
import ./query
|
||||
import ./datastore
|
||||
import ./databuffer
|
||||
|
||||
export key, query
|
||||
|
||||
push: {.upraises: [].}
|
||||
|
||||
type
|
||||
ThreadDatastore* = ref object of Datastore
|
||||
# stores*: Table[KeyBuffer, ThreadDatastore]
|
||||
|
||||
proc has*(
|
||||
self: ThreadDatastore,
|
||||
key: KeyBuffer
|
||||
): Future[?!bool] {.async.} =
|
||||
|
||||
# without mounted =? self.dispatch(key):
|
||||
# return failure "No mounted datastore found"
|
||||
# return (await mounted.store.store.has(mounted.relative))
|
||||
return success(true)
|
||||
|
||||
proc delete*(
|
||||
self: ThreadDatastore,
|
||||
key: KeyBuffer
|
||||
): Future[?!void] {.async.} =
|
||||
|
||||
# without mounted =? self.dispatch(key), error:
|
||||
# return failure(error)
|
||||
# return (await mounted.store.store.delete(mounted.relative))
|
||||
return success()
|
||||
|
||||
proc delete*(
|
||||
self: ThreadDatastore,
|
||||
keys: seq[KeyBuffer]
|
||||
): Future[?!void] {.async.} =
|
||||
|
||||
# for key in keys:
|
||||
# if err =? (await self.delete(key)).errorOption:
|
||||
# return failure err
|
||||
|
||||
return success()
|
||||
|
||||
proc get*(
|
||||
self: ThreadDatastore,
|
||||
key: KeyBuffer
|
||||
): Future[?!DataBuffer] {.async.} =
|
||||
|
||||
# without mounted =? self.dispatch(key), error:
|
||||
# return failure(error)
|
||||
|
||||
# return await mounted.store.store.get(mounted.relative)
|
||||
return success(DataBuffer.new())
|
||||
|
||||
proc put*(
|
||||
self: ThreadDatastore,
|
||||
key: KeyBuffer,
|
||||
data: DataBuffer
|
||||
): Future[?!void] {.async.} =
|
||||
|
||||
# without mounted =? self.dispatch(key), error:
|
||||
# return failure(error)
|
||||
|
||||
# return (await mounted.store.store.put(mounted.relative, data))
|
||||
return success()
|
||||
|
||||
proc put*(
|
||||
self: ThreadDatastore,
|
||||
batch: seq[BatchEntry]
|
||||
): Future[?!void] {.async.} =
|
||||
|
||||
for entry in batch:
|
||||
if err =? (await self.put(entry.key, entry.data)).errorOption:
|
||||
return failure err
|
||||
|
||||
return success()
|
||||
|
||||
proc close*(
|
||||
self: ThreadDatastore
|
||||
): Future[?!void] {.async.} =
|
||||
|
||||
# for s in self.stores.values:
|
||||
# discard await s.store.close()
|
||||
|
||||
# TODO: how to handle failed close?
|
||||
return success()
|
||||
|
||||
func new*[S: ref Datastore](
|
||||
T: typedesc[ThreadDatastore],
|
||||
storeTp: typedesc[S]
|
||||
): ?!ThreadDatastore =
|
||||
|
||||
var self = T()
|
||||
# for (k, v) in stores.pairs:
|
||||
# self.stores[?k.path] = MountedStore(store: v, key: k)
|
||||
|
||||
success self
|
||||
Loading…
x
Reference in New Issue
Block a user