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-29 15:25:00 -0500 |
commit | a57d73b00d2cfdf4cfa1d7fd5478db99af1efb5c (patch) | |
tree | aeec9d8804135ba87c2d6bc101208e6c8e82399b | |
parent | 1460d4f035cddb7684c709e16aa8652e12ce6083 (diff) | |
download | couchdb-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.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), |