diff --git a/datastore/datastore.nim b/datastore/datastore.nim index b038165..3ced9ee 100644 --- a/datastore/datastore.nim +++ b/datastore/datastore.nim @@ -25,6 +25,9 @@ method delete*(self: Datastore, key: Key): Future[?!void] {.base, gcsafe, locks: method delete*(self: Datastore, keys: seq[Key]): Future[?!void] {.base, gcsafe, locks: "unknown".} = raiseAssert("Not implemented!") +method batchDelete*(self: Datastore, keys: seq[Key]): Future[?!void] {.base, gcsafe, locks: "unknown".} = + raiseAssert("Not implemented!") + method get*(self: Datastore, key: Key): Future[?!seq[byte]] {.base, gcsafe, locks: "unknown".} = raiseAssert("Not implemented!") diff --git a/datastore/leveldb/leveldbds.nim b/datastore/leveldb/leveldbds.nim index afa07ae..22f29ae 100644 --- a/datastore/leveldb/leveldbds.nim +++ b/datastore/leveldb/leveldbds.nim @@ -40,6 +40,16 @@ method delete*(self: LevelDbDatastore, keys: seq[Key]): Future[?!void] {.async.} return failure(err.msg) return success() +method batchDelete*(self: LevelDbDatastore, keys: seq[Key]): Future[?!void] {.async.} = + try: + let b = newBatch() + for key in keys: + b.delete($key) + self.db.write(b) + return success() + except LevelDbException as e: + return failure("LevelDbDatastore.batchDelete exception: " & e.msg) + method get*(self: LevelDbDatastore, key: Key): Future[?!seq[byte]] {.async.} = try: let str = self.db.get($key) diff --git a/datastore/typedds.nim b/datastore/typedds.nim index 21dc2a2..adffb9c 100644 --- a/datastore/typedds.nim +++ b/datastore/typedds.nim @@ -83,6 +83,9 @@ proc delete*(self: TypedDatastore, key: Key): Future[?!void] {.async.} = proc delete*(self: TypedDatastore, keys: seq[Key]): Future[?!void] {.async.} = await self.ds.delete(keys) +proc batchDelete*(self: TypedDatastore, keys: seq[Key]): Future[?!void] {.async.} = + await self.ds.batchDelete(keys) + proc close*(self: TypedDatastore): Future[?!void] {.async.} = await self.ds.close()