mirror of
https://github.com/codex-storage/nim-leveldb.git
synced 2025-02-22 04:18:18 +00:00
Merge pull request #6 from xyb/prefix
iterating with special prefix or range
This commit is contained in:
commit
068b9822d3
@ -1,4 +1,4 @@
|
|||||||
import options, leveldb/raw
|
import options, strutils, leveldb/raw
|
||||||
|
|
||||||
type
|
type
|
||||||
LevelDb* = ref object
|
LevelDb* = ref object
|
||||||
@ -122,6 +122,24 @@ iterator iter*(self: LevelDb, seek: string = "", reverse: bool = false): (
|
|||||||
else:
|
else:
|
||||||
leveldb_iter_next(iterPtr)
|
leveldb_iter_next(iterPtr)
|
||||||
|
|
||||||
|
iterator iterPrefix*(self: LevelDb, prefix: string): (string, string) =
|
||||||
|
for (key, value) in iter(self, prefix, reverse = false):
|
||||||
|
if key.startsWith(prefix):
|
||||||
|
yield (key, value)
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
iterator iterRange*(self: LevelDb, start, limit: string): (string, string) =
|
||||||
|
let reverse: bool = limit < start
|
||||||
|
for (key, value) in iter(self, start, reverse = reverse):
|
||||||
|
if reverse:
|
||||||
|
if key < limit:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if key > limit:
|
||||||
|
break
|
||||||
|
yield (key, value)
|
||||||
|
|
||||||
proc removeDb*(name: string) =
|
proc removeDb*(name: string) =
|
||||||
var err: cstring = nil
|
var err: cstring = nil
|
||||||
let options = leveldb_options_create()
|
let options = leveldb_options_create()
|
||||||
|
@ -52,3 +52,18 @@ suite "leveldb":
|
|||||||
initData(db)
|
initData(db)
|
||||||
check(toSeq(db.iter(seek = "ab", reverse = true)) ==
|
check(toSeq(db.iter(seek = "ab", reverse = true)) ==
|
||||||
@[("ba", "2"), ("aa", "1")])
|
@[("ba", "2"), ("aa", "1")])
|
||||||
|
|
||||||
|
test "iter prefix":
|
||||||
|
initData(db)
|
||||||
|
check(toSeq(db.iterPrefix(prefix = "b")) ==
|
||||||
|
@[("ba", "2"), ("bb", "3")])
|
||||||
|
|
||||||
|
test "iter range":
|
||||||
|
initData(db)
|
||||||
|
check(toSeq(db.iterRange(start = "a", limit = "ba")) ==
|
||||||
|
@[("aa", "1"), ("ba", "2")])
|
||||||
|
|
||||||
|
test "iter range reverse":
|
||||||
|
initData(db)
|
||||||
|
check(toSeq(db.iterRange(start = "bb", limit = "b")) ==
|
||||||
|
@[("bb", "3"), ("ba", "2")])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user