summaryrefslogtreecommitdiff
path: root/src/couchdb/couch_util.erl
diff options
context:
space:
mode:
authorAdam Kocoloski <kocolosk@apache.org>2010-06-16 16:49:36 +0000
committerAdam Kocoloski <kocolosk@apache.org>2010-06-16 16:49:36 +0000
commit78017574afd5796316a9f68cfc7f369e125fa36c (patch)
tree49cd3bbc3ff373625962ed5cd9469a51475ecb54 /src/couchdb/couch_util.erl
parent4ccf61a343c2437fb574bf00e4e3da5e48e17548 (diff)
small optimization for reordering result lists
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@955297 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_util.erl')
-rw-r--r--src/couchdb/couch_util.erl8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/couchdb/couch_util.erl b/src/couchdb/couch_util.erl
index 881ea2fb..b334c961 100644
--- a/src/couchdb/couch_util.erl
+++ b/src/couchdb/couch_util.erl
@@ -25,6 +25,7 @@
-export([compressible_att_type/1]).
-export([get_value/2, get_value/3]).
-export([md5/1, md5_init/0, md5_update/2, md5_final/1]).
+-export([reorder_results/2]).
-include("couch_db.hrl").
-include_lib("kernel/include/file.hrl").
@@ -430,3 +431,10 @@ md5_update(Ctx, D) ->
-spec md5_final(Context::binary()) -> Digest::binary().
md5_final(Ctx) ->
try crypto:md5_final(Ctx) catch error:_ -> erlang:md5_final(Ctx) end.
+
+% linear search is faster for small lists, length() is 0.5 ms for 100k list
+reorder_results(Keys, SortedResults) when length(Keys) < 100 ->
+ [couch_util:get_value(Key, SortedResults) || Key <- Keys];
+reorder_results(Keys, SortedResults) ->
+ KeyDict = dict:from_list(SortedResults),
+ [dict:fetch(Key, KeyDict) || Key <- Keys].