add proper query interface

This commit is contained in:
Dmitriy Ryajov 2022-09-19 15:52:34 -06:00
parent b380d09d6b
commit 437ae2e035
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
2 changed files with 20 additions and 56 deletions

View File

@ -11,35 +11,29 @@ export key, query
push: {.upraises: [].}
type
DatastoreError* = object of CatchableError
DatastoreKeyNotFound* = object of DatastoreError
CodexResult*[T] = Result[T, ref DatastoreError]
Datastore* = ref object of RootObj
method contains*(
self: Datastore,
key: Key): Future[?!bool] {.base, locks: "unknown".} =
method contains*(self: Datastore, key: Key): Future[?!bool] {.base, locks: "unknown".} =
raiseAssert("Not implemented!")
method delete*(
self: Datastore,
key: Key): Future[?!void] {.base, locks: "unknown".} =
method delete*(self: Datastore, key: Key): Future[?!void] {.base, locks: "unknown".} =
raiseAssert("Not implemented!")
method get*(
self: Datastore,
key: Key): Future[?!(?seq[byte])] {.base, locks: "unknown".} =
method get*(self: Datastore, key: Key): Future[?!seq[byte]] {.base, locks: "unknown".} =
raiseAssert("Not implemented!")
method put*(
self: Datastore,
key: Key,
data: seq[byte]): Future[?!void] {.base, locks: "unknown".} =
method put*(self: Datastore, key: Key, data: seq[byte]): Future[?!void] {.base, locks: "unknown".} =
raiseAssert("Not implemented!")
iterator query*(
method close*(self: Datastore): Future[?!void] {.base, locks: "unknown".} =
raiseAssert("Not implemented!")
method query*(
self: Datastore,
query: Query): Future[QueryResponse] =
query: Query): Future[QueryIter] =
raiseAssert("Not implemented!")

View File

@ -1,61 +1,31 @@
import ./key
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
Assending,
Descensing
Order* = object
field*: string
sort*: SortOrder
Query* = object
key*: Key
value*: bool
limit*: int
skip*: int
orders*: seq[Order]
filters*: seq[Filter]
sort*: SortOrder
QueryResponse* = tuple[key: Key, data: seq[byte]]
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
QueryIter* = iterator(): QueryResponse {.closure.}
proc init*(
T: type Query,
key: Key,
orders: openArray[Order] = [],
filters: openArray[Filter] = [],
value = false,
sort = SortOrder.Descensing,
skip = 0,
limit = 0): T =
T(
key: key,
filters: @filters,
orders: @orders,
value: value,
sort: sort,
skip: skip,
limit: limit)