diff --git a/src/leveldb.nim b/src/leveldb.nim index e50eddd..508ad3d 100644 --- a/src/leveldb.nim +++ b/src/leveldb.nim @@ -1,4 +1,4 @@ -import options, leveldb/raw +import options, strutils, leveldb/raw type LevelDb* = ref object @@ -122,6 +122,11 @@ iterator iter*(self: LevelDb, seek: string = "", reverse: bool = false): ( else: leveldb_iter_next(iterPtr) +iterator iterPrefix*(self: LevelDb, prefix: string = ""): (string, string) = + for (key, value) in iter(self, prefix): + if key.startsWith(prefix): + yield (key, value) + proc removeDb*(name: string) = var err: cstring = nil let options = leveldb_options_create() diff --git a/tests/test.nim b/tests/test.nim index 8bb8f3d..5d587cb 100644 --- a/tests/test.nim +++ b/tests/test.nim @@ -52,3 +52,8 @@ suite "leveldb": initData(db) check(toSeq(db.iter(seek = "ab", reverse = true)) == @[("ba", "2"), ("aa", "1")]) + + test "iter prefix": + initData(db) + check(toSeq(db.iterPrefix(prefix = "b")) == + @[("ba", "2"), ("bb", "3")])