You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2018/12/07 22:52:28 UTC

[couchdb] 01/02: Add `couch_db:get_design_doc/2`

This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 709477d58ae7143eb44d1e14653994dd0aa6f576
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Wed Dec 5 13:42:47 2018 -0600

    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.
---
 src/couch/src/couch_db.erl   | 14 ++++++++++++++
 src/couch/src/couch_util.erl |  5 +++++
 2 files changed, 19 insertions(+)

diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 0d435c2..2304ba1 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 3efec84..ddd24aa 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