diff --git a/datastore/datastore.nim b/datastore/datastore.nim index 7535d80..f441a4c 100644 --- a/datastore/datastore.nim +++ b/datastore/datastore.nim @@ -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!") diff --git a/datastore/query.nim b/datastore/query.nim index decfcba..d89c3f0 100644 --- a/datastore/query.nim +++ b/datastore/query.nim @@ -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)