mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-04 06:33:11 +00:00
add proper query interface
This commit is contained in:
parent
b380d09d6b
commit
437ae2e035
@ -11,35 +11,29 @@ export key, query
|
|||||||
push: {.upraises: [].}
|
push: {.upraises: [].}
|
||||||
|
|
||||||
type
|
type
|
||||||
|
DatastoreError* = object of CatchableError
|
||||||
|
DatastoreKeyNotFound* = object of DatastoreError
|
||||||
|
|
||||||
|
CodexResult*[T] = Result[T, ref DatastoreError]
|
||||||
Datastore* = ref object of RootObj
|
Datastore* = ref object of RootObj
|
||||||
|
|
||||||
method contains*(
|
method contains*(self: Datastore, key: Key): Future[?!bool] {.base, locks: "unknown".} =
|
||||||
self: Datastore,
|
|
||||||
key: Key): Future[?!bool] {.base, locks: "unknown".} =
|
|
||||||
|
|
||||||
raiseAssert("Not implemented!")
|
raiseAssert("Not implemented!")
|
||||||
|
|
||||||
method delete*(
|
method delete*(self: Datastore, key: Key): Future[?!void] {.base, locks: "unknown".} =
|
||||||
self: Datastore,
|
|
||||||
key: Key): Future[?!void] {.base, locks: "unknown".} =
|
|
||||||
|
|
||||||
raiseAssert("Not implemented!")
|
raiseAssert("Not implemented!")
|
||||||
|
|
||||||
method get*(
|
method get*(self: Datastore, key: Key): Future[?!seq[byte]] {.base, locks: "unknown".} =
|
||||||
self: Datastore,
|
|
||||||
key: Key): Future[?!(?seq[byte])] {.base, locks: "unknown".} =
|
|
||||||
|
|
||||||
raiseAssert("Not implemented!")
|
raiseAssert("Not implemented!")
|
||||||
|
|
||||||
method put*(
|
method put*(self: Datastore, key: Key, data: seq[byte]): Future[?!void] {.base, locks: "unknown".} =
|
||||||
self: Datastore,
|
|
||||||
key: Key,
|
|
||||||
data: seq[byte]): Future[?!void] {.base, locks: "unknown".} =
|
|
||||||
|
|
||||||
raiseAssert("Not implemented!")
|
raiseAssert("Not implemented!")
|
||||||
|
|
||||||
iterator query*(
|
method close*(self: Datastore): Future[?!void] {.base, locks: "unknown".} =
|
||||||
|
raiseAssert("Not implemented!")
|
||||||
|
|
||||||
|
method query*(
|
||||||
self: Datastore,
|
self: Datastore,
|
||||||
query: Query): Future[QueryResponse] =
|
query: Query): Future[QueryIter] =
|
||||||
|
|
||||||
raiseAssert("Not implemented!")
|
raiseAssert("Not implemented!")
|
||||||
|
|||||||
@ -1,61 +1,31 @@
|
|||||||
import ./key
|
import ./key
|
||||||
|
|
||||||
type
|
type
|
||||||
Node* = object of RootObj
|
|
||||||
next*: Node
|
|
||||||
prev*: Node
|
|
||||||
|
|
||||||
Filter* = object of Node
|
|
||||||
field*: string
|
|
||||||
value*: string
|
|
||||||
|
|
||||||
FilterBool* = object of Filter
|
|
||||||
a*, b*: Filter
|
|
||||||
|
|
||||||
FilterAnd = object of FilterBool
|
|
||||||
FilterOr = object of FilterBool
|
|
||||||
|
|
||||||
Eq = object of Filter
|
|
||||||
Lt = object of Filter
|
|
||||||
Gt = object of Filter
|
|
||||||
Not = object of Filter
|
|
||||||
|
|
||||||
SortOrder* {.pure.} = enum
|
SortOrder* {.pure.} = enum
|
||||||
Assending,
|
Assending,
|
||||||
Descensing
|
Descensing
|
||||||
|
|
||||||
Order* = object
|
|
||||||
field*: string
|
|
||||||
sort*: SortOrder
|
|
||||||
|
|
||||||
Query* = object
|
Query* = object
|
||||||
key*: Key
|
key*: Key
|
||||||
|
value*: bool
|
||||||
limit*: int
|
limit*: int
|
||||||
skip*: int
|
skip*: int
|
||||||
orders*: seq[Order]
|
sort*: SortOrder
|
||||||
filters*: seq[Filter]
|
|
||||||
|
|
||||||
QueryResponse* = tuple[key: Key, data: seq[byte]]
|
QueryResponse* = tuple[key: Key, data: seq[byte]]
|
||||||
|
QueryIter* = iterator(): QueryResponse {.closure.}
|
||||||
proc `==`*(a, b: Filter): Filter = discard
|
|
||||||
|
|
||||||
proc `!=`*(a, b: Filter): Filter = discard
|
|
||||||
proc `>`*(a, b: Filter): Filter = discard
|
|
||||||
proc `>=`*(a, b: Filter): Filter = discard
|
|
||||||
proc `<`*(a, b: Filter): Filter = discard
|
|
||||||
proc `<=`*(a, b: Filter): Filter = discard
|
|
||||||
|
|
||||||
proc init*(
|
proc init*(
|
||||||
T: type Query,
|
T: type Query,
|
||||||
key: Key,
|
key: Key,
|
||||||
orders: openArray[Order] = [],
|
value = false,
|
||||||
filters: openArray[Filter] = [],
|
sort = SortOrder.Descensing,
|
||||||
skip = 0,
|
skip = 0,
|
||||||
limit = 0): T =
|
limit = 0): T =
|
||||||
|
|
||||||
T(
|
T(
|
||||||
key: key,
|
key: key,
|
||||||
filters: @filters,
|
value: value,
|
||||||
orders: @orders,
|
sort: sort,
|
||||||
skip: skip,
|
skip: skip,
|
||||||
limit: limit)
|
limit: limit)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user