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}) ->