summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fabric/src/fabric2_db.erl28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/fabric/src/fabric2_db.erl b/src/fabric/src/fabric2_db.erl
index 129dea2d7..0f0ed8f41 100644
--- a/src/fabric/src/fabric2_db.erl
+++ b/src/fabric/src/fabric2_db.erl
@@ -80,9 +80,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_design_docs/1,
%% get_purge_infos/2,
%% get_minimum_purge_seq/1,
@@ -657,6 +655,30 @@ get_missing_revs(Db, JsonIdRevs) ->
{ok, AllMissing}.
+get_design_docs(Db) ->
+ fabric2_fdb:transactional(Db, fun(TxDb) ->
+ #{
+ db_prefix := DbPrefix
+ } = TxDb,
+
+ Prefix = erlfdb_tuple:pack({?DB_CHANGES}, DbPrefix),
+ Opts = set_design_doc_keys([]),
+ Fun = fun({Key, Val}, Acc) ->
+ {DocId} = erlfdb_tuple:unpack(K, Prefix),
+ RevId = erlfdb_tuple:unpack(V),
+ Future = get_doc_body_future(TxDb, DocId, RevId),
+ [Future | Acc]
+ end,
+ {ok, Futures} = fabric2_fdb:fold_range(TxDb, Prefix, Fun, [], Opts),
+
+ % Using foldl instead of map means that the design
+ % docs come out in sorted order.
+ lists:foldl(fun(Future, Acc) ->
+ [fabric2_fdb:get_doc_body_wait(Future) | Acc]
+ end, [], Futures)
+ end).
+
+
validate_docid(<<"">>) ->
throw({illegal_docid, <<"Document id must not be empty">>});
validate_docid(<<"_design/">>) ->