diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2020-09-29 15:23:32 -0500 |
---|---|---|
committer | Paul J. Davis <paul.joseph.davis@gmail.com> | 2020-09-30 10:08:44 -0500 |
commit | 4a4515e01d82a6f88ecd3a6b61b5beeab6127424 (patch) | |
tree | aeec9d8804135ba87c2d6bc101208e6c8e82399b | |
parent | 811741d9b6dce3403b0330d9bdb860518764e1a9 (diff) | |
download | couchdb-4a4515e01d82a6f88ecd3a6b61b5beeab6127424.tar.gz |
Optimizations for reading reduce 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.erl | 7 |
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), |