You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2018/01/15 22:50:10 UTC

[couchdb] 01/02: In couch_key_tree:stem/4 also update `Seen` set for a leaf child.

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

vatamane pushed a commit to branch optimize-doc-updates-3
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 49265987f047d20e6d57cbcc81c9a373bb236166
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Mon Jan 15 17:24:45 2018 -0500

    In couch_key_tree:stem/4 also update `Seen` set for a leaf child.
    
    Moved set update to a separate function since it's common code.
---
 src/couch/src/couch_key_tree.erl | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/couch/src/couch_key_tree.erl b/src/couch/src/couch_key_tree.erl
index 24c48d2..c05ebe2 100644
--- a/src/couch/src/couch_key_tree.erl
+++ b/src/couch/src/couch_key_tree.erl
@@ -500,14 +500,11 @@ stem_tree({Depth, Child}, Limit, Seen) ->
     end.
 
 
-stem_tree(_Depth, {_Key, _Val, []} = Leaf, Limit, Seen) ->
-    {Seen, Limit - 1, Leaf, []};
+stem_tree(_Depth, {Key, _Val, []} = Leaf, Limit, Seen) ->
+    {check_key(Key, Seen), Limit - 1, Leaf, []};
 
 stem_tree(Depth, {Key, Val, Children}, Limit, Seen0) ->
-    Seen1 = case sets:is_element(Key, Seen0) of
-        true -> throw(dupe_keys);
-        false -> sets:add_element(Key, Seen0)
-    end,
+    Seen1 = check_key(Key, Seen0),
     FinalAcc = lists:foldl(fun(Child, Acc) ->
         {SeenAcc, LimitPosAcc, ChildAcc, BranchAcc} = Acc,
         case stem_tree(Depth + 1, Child, Limit, SeenAcc) of
@@ -537,6 +534,15 @@ stem_tree(Depth, {Key, Val, Children}, Limit, Seen0) ->
     end.
 
 
+check_key(Key, Seen) ->
+    case sets:is_element(Key, Seen) of
+        true ->
+            throw(dupe_keys);
+        false ->
+            sets:add_element(Key, Seen)
+    end.
+
+
 repair_tree(Trees, Limit) ->
     % flatten each branch in a tree into a tree path, sort by starting rev #
     Paths = lists:sort(lists:map(fun({Pos, Path}) ->

-- 
To stop receiving notification emails like this one, please contact
"commits@couchdb.apache.org" <co...@couchdb.apache.org>.