mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-03 06:03:06 +00:00
databuffer type
This commit is contained in:
parent
29ff227d37
commit
ab5f8da736
@ -4,7 +4,30 @@ import pkg/upraises
|
||||
import ./threads/databuffer
|
||||
import ./threads/threadresult
|
||||
import ./threads/semaphore
|
||||
import ./key
|
||||
import ./types
|
||||
|
||||
export databuffer, threadresult, semaphore, types
|
||||
export upraises, results
|
||||
|
||||
type
|
||||
KeyId* = object
|
||||
## serialized Key ID, equivalent to `key.id()`
|
||||
data: DataBuffer
|
||||
|
||||
DbKey* = string | KeyId
|
||||
DbVal* = seq[byte] | DataBuffer
|
||||
|
||||
proc `$`*(id: KeyId): string = $(id.data)
|
||||
|
||||
proc toDb*(key: Key): DbKey {.inline, raises: [].} =
|
||||
let id: string = key.id()
|
||||
let db = DataBuffer.new(id.len()+1) # include room for null for cstring compat
|
||||
db.setData(id)
|
||||
DbKey(data: db)
|
||||
|
||||
proc toKey*(key: DbKey): Key {.inline, raises: [].} =
|
||||
Key.init(key.data).expect("expected valid key here for but got `" & $key.data & "`")
|
||||
|
||||
template toOpenArray*(x: DbKey): openArray[char] =
|
||||
x.data.toOpenArray(char)
|
||||
|
||||
@ -26,7 +26,7 @@ proc readOnly*(self: SQLiteDatastore): bool = self.db.readOnly
|
||||
proc timestamp*(t = epochTime()): int64 =
|
||||
(t * 1_000_000).int64
|
||||
|
||||
proc has*(self: SQLiteDatastore, key: DbKey): ?!bool =
|
||||
proc has*(self: SQLiteDatastore, key: DbKey|string): ?!bool =
|
||||
var
|
||||
exists = false
|
||||
key = $key
|
||||
|
||||
@ -20,7 +20,8 @@ type
|
||||
ContainsStmt* = SQLiteStmt[(string), void]
|
||||
DeleteStmt* = SQLiteStmt[(string), void]
|
||||
GetStmt* = SQLiteStmt[(string), void]
|
||||
PutStmt* = SQLiteStmt[(string, DataBuffer, int64), void]
|
||||
PutStmt* = SQLiteStmt[(string, seq[byte], int64), void]
|
||||
PutBufferStmt* = SQLiteStmt[(string, DataBuffer, int64), void]
|
||||
QueryStmt* = SQLiteStmt[(string), void]
|
||||
BeginStmt* = NoParamsStmt
|
||||
EndStmt* = NoParamsStmt
|
||||
@ -268,6 +269,7 @@ proc open*(
|
||||
deleteStmt: DeleteStmt
|
||||
getStmt: GetStmt
|
||||
putStmt: PutStmt
|
||||
putBufferStmt: PutStmt
|
||||
beginStmt: BeginStmt
|
||||
endStmt: EndStmt
|
||||
rollbackStmt: RollbackStmt
|
||||
@ -281,6 +283,9 @@ proc open*(
|
||||
putStmt = ? PutStmt.prepare(
|
||||
env.val, PutStmtStr, SQLITE_PREPARE_PERSISTENT)
|
||||
|
||||
putBufferStmt = ? PutBufferStmt.prepare(
|
||||
env.val, PutStmtStr, SQLITE_PREPARE_PERSISTENT)
|
||||
|
||||
beginStmt = ? BeginStmt.prepare(
|
||||
env.val, BeginTransactionStr, SQLITE_PREPARE_PERSISTENT)
|
||||
|
||||
|
||||
@ -22,30 +22,6 @@ type
|
||||
ThreadQueryRes* = (DataBuffer, DataBuffer)
|
||||
ThreadResult*[T: ThreadTypes] = Result[T, ThreadResErr]
|
||||
|
||||
DbKey* = object
|
||||
data: DataBuffer
|
||||
DbVal* = object
|
||||
data: DataBuffer
|
||||
|
||||
proc toDb*(key: Key): DbKey {.inline, raises: [].} =
|
||||
let id: string = key.id()
|
||||
let db = DataBuffer.new(id.len()+1) # include room for null for cstring compat
|
||||
db.setData(id)
|
||||
DbKey(data: db)
|
||||
|
||||
proc toKey*(key: DbKey): Key {.inline, raises: [].} =
|
||||
Key.init(key.data).expect("expected valid key here for but got `" & $key.data & "`")
|
||||
|
||||
proc toDb*(value: sink seq[byte]): DbVal {.inline, raises: [].} =
|
||||
DbVal(data: DataBuffer.new(value))
|
||||
|
||||
proc toValue*(value: DbVal): seq[byte] {.inline, raises: [].} =
|
||||
value.data.toSeq()
|
||||
|
||||
template toOpenArray*(x: DbKey): openArray[char] =
|
||||
x.data.toOpenArray(char)
|
||||
template toOpenArray*(x: DbVal): openArray[byte] =
|
||||
x.data.toOpenArray(byte)
|
||||
|
||||
converter toThreadErr*(e: ref CatchableError): ThreadResErr {.inline, raises: [].} =
|
||||
if e of DatastoreKeyNotFound: (ErrorEnum.DatastoreKeyNotFoundErr, DataBuffer.new(e.msg))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user