Add DB.iterator helper api #1
2 changed files with 18 additions and 19 deletions
|
@ -1949,7 +1949,7 @@ cdef class DB(object):
|
|||
st = self.db.Write(opts, batch.batch)
|
||||
check_status(st)
|
||||
|
||||
def iterator(self, start: bytes, column_family: bytes = None, iterate_lower_bound: bytes = None,
|
||||
def iterator(self, start: bytes, column_family: ColumnFamilyHandle = None, iterate_lower_bound: bytes = None,
|
||||
iterate_upper_bound: bytes = None, reverse: bool = False, include_key: bool = True,
|
||||
include_value: bool = True, fill_cache: bool = True, prefix_same_as_start: bool = False,
|
||||
auto_prefix_mode: bool = False):
|
||||
|
@ -1957,7 +1957,7 @@ cdef class DB(object):
|
|||
RocksDB Iterator
|
||||
|
||||
Args:
|
||||
column_family (bytes): the name of the column family
|
||||
column_family (ColumnFamilyHandle): column family handle
|
||||
start (bytes): prefix to seek to
|
||||
iterate_lower_bound (bytes): defines the smallest key at which the backward iterator can return an entry.
|
||||
Once the bound is passed, Valid() will be false. `iterate_lower_bound` is
|
||||
|
@ -2003,23 +2003,21 @@ cdef class DB(object):
|
|||
The iterator supports being `reversed`
|
||||
"""
|
||||
|
||||
cf = self.get_column_family(column_family)
|
||||
|
||||
if not include_value:
|
||||
iterator = self.iterkeys(
|
||||
column_family=cf, fill_cache=fill_cache, prefix_same_as_start=prefix_same_as_start,
|
||||
column_family=column_family, fill_cache=fill_cache, prefix_same_as_start=prefix_same_as_start,
|
||||
iterate_lower_bound=iterate_lower_bound, iterate_upper_bound=iterate_upper_bound,
|
||||
auto_prefix_mode=auto_prefix_mode
|
||||
)
|
||||
elif not include_key:
|
||||
iterator = self.itervalues(
|
||||
column_family=cf, fill_cache=fill_cache, prefix_same_as_start=prefix_same_as_start,
|
||||
column_family=column_family, fill_cache=fill_cache, prefix_same_as_start=prefix_same_as_start,
|
||||
iterate_lower_bound=iterate_lower_bound, iterate_upper_bound=iterate_upper_bound,
|
||||
auto_prefix_mode=auto_prefix_mode
|
||||
)
|
||||
else:
|
||||
iterator = self.iteritems(
|
||||
column_family=cf, fill_cache=fill_cache, prefix_same_as_start=prefix_same_as_start,
|
||||
column_family=column_family, fill_cache=fill_cache, prefix_same_as_start=prefix_same_as_start,
|
||||
iterate_lower_bound=iterate_lower_bound, iterate_upper_bound=iterate_upper_bound,
|
||||
auto_prefix_mode=auto_prefix_mode
|
||||
)
|
||||
|
|
|
@ -723,8 +723,9 @@ class TestDBColumnFamilies(TestHelper):
|
|||
b'A': rocksdb.ColumnFamilyOptions(),
|
||||
b'B': rocksdb.ColumnFamilyOptions()
|
||||
}
|
||||
secondary = rocksdb.get_db_with_options(
|
||||
os.path.join(self.db_loc, "test"), create_if_missing=True, max_open_files=-1,
|
||||
secondary = rocksdb.DB(
|
||||
os.path.join(self.db_loc, "test"),
|
||||
rocksdb.Options(create_if_missing=True, max_open_files=-1),
|
||||
secondary_name=secondary_location, column_families=cf
|
||||
)
|
||||
self.addCleanup(secondary.close)
|
||||
|
@ -781,11 +782,11 @@ class TestPrefixIterator(TestHelper):
|
|||
self.assertListEqual(
|
||||
[(b'a0', b'a0_value'), (b'a1', b'a1_value'), (b'a1b', b'a1b_value'), (b'a2b', b'a2b_value'),
|
||||
(b'a3', b'a3_value'), (b'a4', b'a4_value')],
|
||||
list(self.db.iterator(start=b'a', iterate_upper_bound=b'b', prefix_same_as_start=True))
|
||||
list(self.db.iterator(start=b'a', iterate_upper_bound=b'b'))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'a0', b'a1', b'a1b', b'a2b', b'a3', b'a4'],
|
||||
list(self.db.iterator(start=b'a', iterate_upper_bound=b'b', prefix_same_as_start=True, include_value=False))
|
||||
list(self.db.iterator(start=b'a', iterate_upper_bound=b'b', include_value=False))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'a0', b'a1', b'a1b', b'a2b', b'a3', b'a4'],
|
||||
|
@ -885,37 +886,37 @@ class TestPrefixIteratorWithExtractor(TestHelper):
|
|||
self.assertListEqual(
|
||||
[(b'a0', b'a0_value'), (b'a1', b'a1_value'), (b'a1b', b'a1b_value'), (b'a2b', b'a2b_value'),
|
||||
(b'a3', b'a3_value'), (b'a4', b'a4_value')],
|
||||
list(map(lambda x: (x[0][-1], x[1]), self.db.iterator(column_family=b'first', start=b'a', prefix_same_as_start=True)))
|
||||
list(map(lambda x: (x[0][-1], x[1]), self.db.iterator(column_family=cf_a, start=b'a', prefix_same_as_start=True)))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'a0', b'a1', b'a1b', b'a2b', b'a3', b'a4'],
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=b'first', start=b'a', include_value=False, prefix_same_as_start=True)))
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=cf_a, start=b'a', include_value=False, prefix_same_as_start=True)))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'a0', b'a1', b'a1b', b'a2b', b'a3', b'a4'],
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=b'first', start=b'a0', iterate_upper_bound=b'a5', include_value=False)))
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=cf_a, start=b'a0', iterate_upper_bound=b'a5', include_value=False)))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'a4', b'a3', b'a2b', b'a1b', b'a1', b'a0'],
|
||||
list(map(lambda x: x[-1],
|
||||
reversed(self.db.iterator(
|
||||
column_family=b'first', start=b'a0', iterate_upper_bound=b'a5', include_value=False
|
||||
column_family=cf_a, start=b'a0', iterate_upper_bound=b'a5', include_value=False
|
||||
))))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'a0', b'a1', b'a1b', b'a2b', b'a3'],
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=b'first', start=b'a0', iterate_upper_bound=b'a4', include_value=False)))
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=cf_a, start=b'a0', iterate_upper_bound=b'a4', include_value=False)))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'a0', b'a1', b'a1b'],
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=b'first', start=b'a0', iterate_upper_bound=b'a2', include_value=False)))
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=cf_a, start=b'a0', iterate_upper_bound=b'a2', include_value=False)))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'a1b', b'a1', b'a0'],
|
||||
list(map(lambda x: x[-1], reversed(
|
||||
self.db.iterator(column_family=b'first', start=b'a0', iterate_upper_bound=b'a2', include_value=False))))
|
||||
self.db.iterator(column_family=cf_a, start=b'a0', iterate_upper_bound=b'a2', include_value=False))))
|
||||
)
|
||||
self.assertListEqual(
|
||||
[b'b0'],
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=b'second', start=b'b', include_value=False)))
|
||||
list(map(lambda x: x[-1], self.db.iterator(column_family=cf_b, start=b'b', include_value=False)))
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue