summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2020-09-29 15:23:32 -0500
committerPaul J. Davis <paul.joseph.davis@gmail.com>2020-09-29 15:25:00 -0500
commita57d73b00d2cfdf4cfa1d7fd5478db99af1efb5c (patch)
treeaeec9d8804135ba87c2d6bc101208e6c8e82399b
parent1460d4f035cddb7684c709e16aa8652e12ce6083 (diff)
downloadcouchdb-feature-ebtree-views.tar.gz
Optimizations for reading reduce viewsfeature-ebtree-views
These are a few micro optimizations to avoid unnecessary work when reading from a single reduce function during a view read.
-rw-r--r--src/couch/src/couch_query_servers.erl7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/couch/src/couch_query_servers.erl b/src/couch/src/couch_query_servers.erl
index 447daea61..8eb07abbf 100644
--- a/src/couch/src/couch_query_servers.erl
+++ b/src/couch/src/couch_query_servers.erl
@@ -111,6 +111,8 @@ rereduce(Lang, RedSrcs, ReducedValues) ->
reduce(_Lang, [], _KVs) ->
{ok, []};
+reduce(Lang, [<<"_", _/binary>>] = RedSrcs, KVs) ->
+ builtin_reduce(reduce, RedSrcs, KVs, []);
reduce(Lang, RedSrcs, KVs) ->
{OsRedSrcs, BuiltinReds} = lists:partition(fun
(<<"_", _/binary>>) -> false;
@@ -171,7 +173,10 @@ builtin_reduce(_Re, [], _KVs, Acc) ->
{ok, lists:reverse(Acc)};
builtin_reduce(Re, [<<"_sum",_/binary>>|BuiltinReds], KVs, Acc) ->
Sum = builtin_sum_rows(KVs, 0),
- Red = check_sum_overflow(?term_size(KVs), ?term_size(Sum), Sum),
+ Red = case is_number(Sum) of
+ true -> Sum;
+ false -> check_sum_overflow(?term_size(KVs), ?term_size(Sum), Sum)
+ end,
builtin_reduce(Re, BuiltinReds, KVs, [Red|Acc]);
builtin_reduce(reduce, [<<"_count",_/binary>>|BuiltinReds], KVs, Acc) ->
Count = length(KVs),