diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2020-08-05 13:20:36 -0500 |
---|---|---|
committer | Paul J. Davis <paul.joseph.davis@gmail.com> | 2020-08-05 15:08:42 -0500 |
commit | 29d649850874735de919ad39a9e04bef29c96267 (patch) | |
tree | 7a4f0a62ebf369ae99a1a6975b74fe817bfe4943 | |
parent | a32bc83084e8b927931fe23fb234f5c9fa3f8dbd (diff) | |
download | couchdb-29d649850874735de919ad39a9e04bef29c96267.tar.gz |
Fix range scans over an empty tree
-rw-r--r-- | src/ebtree/src/ebtree.erl | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/ebtree/src/ebtree.erl b/src/ebtree/src/ebtree.erl index cd08e753e..15a21a695 100644 --- a/src/ebtree/src/ebtree.erl +++ b/src/ebtree/src/ebtree.erl @@ -415,6 +415,9 @@ range(Db, #tree{} = Tree, StartKey, EndKey, AccFun, Acc0) -> end). +range(_Tx, #tree{}, #node{id = ?NODE_ROOT_ID, members = []}, _StartKey, _EndKey, _AccFun, Acc0) -> + Acc0; + range(Tx, #tree{} = Tree, #node{level = 0} = Node, StartKey, EndKey, AccFun, Acc0) -> InRange = [{K, V} || {K, V} <- Node#node.members, collate(Tree, StartKey, K, [lt, eq]), collate(Tree, K, EndKey, [lt, eq])], @@ -448,6 +451,9 @@ reverse_range(Db, #tree{} = Tree, StartKey, EndKey, AccFun, Acc0) -> end). +reverse_range(_Tx, #tree{}, #node{id = ?NODE_ROOT_ID, members = []}, _StartKey, _EndKey, _AccFun, Acc0) -> + Acc0; + reverse_range(Tx, #tree{} = Tree, #node{level = 0} = Node, StartKey, EndKey, AccFun, Acc0) -> InRange = [{K, V} || {K, V} <- Node#node.members, collate(Tree, StartKey, K, [lt, eq]), collate(Tree, K, EndKey, [lt, eq])], @@ -1301,6 +1307,15 @@ lookup_test_fun(Max, Order) -> [Order, Max, 1000 * (Max / msec(T1 - T0)), 1000 * (Max / msec(T2 - T1))]). +empty_range_test() -> + Db = erlfdb_util:get_test_db([empty]), + Tree = open(Db, <<1, 2, 3>>, 10), + ?assertEqual( + blah, + range(Db, Tree, min(), max(), fun(_, A) -> A end, blah) + ). + + range_test_() -> {timeout, 1000, fun() -> Db = erlfdb_util:get_test_db([empty]), @@ -1317,6 +1332,15 @@ range_test_() -> end}. +empty_reverse_range_test() -> + Db = erlfdb_util:get_test_db([empty]), + Tree = open(Db, <<1, 2, 3>>, 10), + ?assertEqual( + blah, + reverse_range(Db, Tree, min(), max(), fun(_, A) -> A end, blah) + ). + + reverse_range_test_() -> {timeout, 1000, fun() -> Db = erlfdb_util:get_test_db([empty]), |