You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2020/08/05 20:08:56 UTC

[couchdb] 03/03: Fix range scans over an empty tree

This is an automated email from the ASF dual-hosted git repository.

davisp pushed a commit to branch prototype/fdb-layer
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 29d649850874735de919ad39a9e04bef29c96267
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Wed Aug 5 13:20:36 2020 -0500

    Fix range scans over an empty tree
---
 src/ebtree/src/ebtree.erl | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/ebtree/src/ebtree.erl b/src/ebtree/src/ebtree.erl
index cd08e75..15a21a6 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]),