summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2018-12-05 13:42:47 -0600
committerNick Vatamaniuc <nickva@users.noreply.github.com>2018-12-07 17:52:23 -0500
commit709477d58ae7143eb44d1e14653994dd0aa6f576 (patch)
treea477ecd4bcce5c865c01589abd40536f4f80440e
parent77eb982bd9cd078e45e4a424e7ffa46f7073bfa5 (diff)
downloadcouchdb-709477d58ae7143eb44d1e14653994dd0aa6f576.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.erl14
-rw-r--r--src/couch/src/couch_util.erl5
2 files changed, 19 insertions, 0 deletions
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 0d435c2ff..2304ba1fa 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