diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2018-12-05 13:42:47 -0600 |
---|---|---|
committer | Jan Lehnardt <jan@apache.org> | 2019-02-17 18:33:19 +0100 |
commit | 7d889f4bc14e8e22d7648ed666bd3dd96feae949 (patch) | |
tree | 8bfd6485fdde4a9ffe630b5cec8083d442baeecc | |
parent | dd9976d3778e8e7c66b666863ccf6b9fd18b0319 (diff) | |
download | couchdb-7d889f4bc14e8e22d7648ed666bd3dd96feae949.tar.gz |
Add `couch_db:get_design_doc/2`
This adds an API call for looking up a single design doc regardless of
whether the database is clustered or not.
-rw-r--r-- | src/couch/src/couch_db.erl | 14 | ||||
-rw-r--r-- | src/couch/src/couch_util.erl | 5 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl index 0df04db3a..0ae164d9b 100644 --- a/src/couch/src/couch_db.erl +++ b/src/couch/src/couch_db.erl @@ -77,6 +77,7 @@ get_full_doc_info/2, get_full_doc_infos/2, get_missing_revs/2, + get_design_doc/2, get_design_docs/1, get_design_doc_count/1, get_purge_infos/2, @@ -608,6 +609,19 @@ get_db_info(Db) -> ], {ok, InfoList}. +get_design_doc(#db{name = <<"shards/", _/binary>> = ShardDbName}, DDocId0) -> + DDocId = couch_util:normalize_ddoc_id(DDocId0), + DbName = mem3:dbname(ShardDbName), + {_, Ref} = spawn_monitor(fun() -> + exit(fabric:open_doc(DbName, DDocId, [])) + end), + receive {'DOWN', Ref, _, _, Response} -> + Response + end; +get_design_doc(#db{} = Db, DDocId0) -> + DDocId = couch_util:normalize_ddoc_id(DDocId0), + couch_db:open_doc_int(Db, DDocId, [ejson_body]). + get_design_docs(#db{name = <<"shards/", _/binary>> = ShardDbName}) -> DbName = mem3:dbname(ShardDbName), {_, Ref} = spawn_monitor(fun() -> exit(fabric:design_docs(DbName)) end), diff --git a/src/couch/src/couch_util.erl b/src/couch/src/couch_util.erl index 3efec84a9..ddd24aab0 100644 --- a/src/couch/src/couch_util.erl +++ b/src/couch/src/couch_util.erl @@ -27,6 +27,7 @@ -export([reorder_results/2]). -export([url_strip_password/1]). -export([encode_doc_id/1]). +-export([normalize_ddoc_id/1]). -export([with_db/2]). -export([rfc1123_date/0, rfc1123_date/1]). -export([integer_to_boolean/1, boolean_to_integer/1]). @@ -543,6 +544,10 @@ encode_doc_id(<<"_local/", Rest/binary>>) -> encode_doc_id(Id) -> url_encode(Id). +normalize_ddoc_id(<<"_design/", _/binary>> = DDocId) -> + DDocId; +normalize_ddoc_id(DDocId) when is_binary(DDocId) -> + <<"_design/", DDocId/binary>>. with_db(DbName, Fun) when is_binary(DbName) -> case couch_db:open_int(DbName, [?ADMIN_CTX]) of |