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: [].} 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!")

View File

@ -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)