You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2014/01/17 23:08:18 UTC

[04/32] git commit: Use #doc_info{} optimization for _all_docs.

Use #doc_info{} optimization for _all_docs.

During the refactor I accidentally undid the optimization from
COUCHDB-1061 which uses a #doc_info{} to get a #doc{} from disk
which avoids a lookup in the id btree.



git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@1172309 13f79535-47bb-0310-9956-ffa450edef68


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-index/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-index/commit/b2f2ebe4
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-index/tree/b2f2ebe4
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-index/diff/b2f2ebe4

Branch: refs/heads/import
Commit: b2f2ebe43a51ec89191ba5d4bb815245b5a94fad
Parents: 0099815
Author: Paul Joseph Davis <da...@apache.org>
Authored: Sun Sep 18 17:57:16 2011 +0000
Committer: Paul Joseph Davis <da...@apache.org>
Committed: Sun Sep 18 17:57:16 2011 +0000

----------------------------------------------------------------------
 src/couch_index_util.erl | 38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-index/blob/b2f2ebe4/src/couch_index_util.erl
----------------------------------------------------------------------
diff --git a/src/couch_index_util.erl b/src/couch_index_util.erl
index ff79ce5..28ec8d2 100644
--- a/src/couch_index_util.erl
+++ b/src/couch_index_util.erl
@@ -13,7 +13,7 @@
 -module(couch_index_util).
 
 -export([root_dir/0, index_dir/2, index_file/3]).
--export([load_doc/4, sort_lib/1, hexsig/1]).
+-export([load_doc/3, sort_lib/1, hexsig/1]).
 
 -include("couch_db.hrl").
 
@@ -36,32 +36,34 @@ index_file(Module, DbName, FileName) ->
     filename:join(index_dir(Module, DbName), FileName).
 
 
-load_doc(Db, Id, {Props}, Opts) ->
-    DocId = couch_util:get_value(<<"_id">>, Props, Id),
-    Rev = case couch_util:get_value(<<"_rev">>, Props, undefined) of
-        Rev0 when is_binary(Rev0) -> couch_doc:parse_rev(Rev0);
-        _ -> nil
-    end,
-    load_doc_int(Db, DocId, Rev, Opts);
-load_doc(Db, Id, _Value, Opts) ->
-    load_doc_int(Db, Id, nil, Opts).
+load_doc(Db, #doc_info{}=DI, Opts) ->
+    Deleted = lists:member(deleted, Opts),
+    case (catch couch_db:open_doc(Db, DI, Opts)) of
+        {ok, #doc{deleted=false}=Doc} -> Doc;
+        {ok, #doc{deleted=true}=Doc} when Deleted -> Doc;
+        _Else -> null
+    end;
+load_doc(Db, {DocId, Rev}, Opts) ->
+    case (catch load_doc(Db, DocId, Rev, Opts)) of
+        #doc{deleted=false} = Doc -> Doc;
+        _ -> null
+    end.
 
 
-load_doc_int(Db, DocId, Rev, Options) ->
-    JsonDoc = case Rev of
+load_doc(Db, DocId, Rev, Options) ->
+    case Rev of
         nil -> % open most recent rev
-            case couch_db:open_doc(Db, DocId, Options) of
-                {ok, Doc} -> couch_doc:to_json_obj(Doc, Options);
+            case (catch couch_db:open_doc(Db, DocId, Options)) of
+                {ok, Doc} -> Doc;
                 _Error -> null
             end;
         _ -> % open a specific rev (deletions come back as stubs)
-            case couch_db:open_doc_revs(Db, DocId, [Rev], Options) of
-                {ok, [{ok, Doc}]} -> couch_doc:to_json_obj(Doc, Options);
+            case (catch couch_db:open_doc_revs(Db, DocId, [Rev], Options)) of
+                {ok, [{ok, Doc}]} -> Doc;
                 {ok, [{{not_found, missing}, Rev}]} -> null;
                 {ok, [_Else]} -> null
             end
-    end,
-    {doc, JsonDoc}.
+    end.
 
 
 sort_lib({Lib}) ->