diff options
author | Garren Smith <garren.smith@gmail.com> | 2020-03-10 18:30:44 +0200 |
---|---|---|
committer | garren smith <garren.smith@gmail.com> | 2020-04-06 17:55:49 +0200 |
commit | a8b930d7d94316b86243034b8faa537cf8486661 (patch) | |
tree | c883535425b7db1f93aa0d9664d77c73dceec1c7 | |
parent | cc2d2320c3acac05e76b3ce67dc42482e29aeaad (diff) | |
download | couchdb-a8b930d7d94316b86243034b8faa537cf8486661.tar.gz |
add include_docs option to fold_docs
-rw-r--r-- | src/fabric/src/fabric2_db.erl | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/fabric/src/fabric2_db.erl b/src/fabric/src/fabric2_db.erl index ca9f037ec..fb6ae5176 100644 --- a/src/fabric/src/fabric2_db.erl +++ b/src/fabric/src/fabric2_db.erl @@ -832,11 +832,23 @@ fold_docs(Db, UserFun, UserAcc0, Options) -> UserAcc2 = fabric2_fdb:fold_range(TxDb, Prefix, fun({K, V}, Acc) -> {DocId} = erlfdb_tuple:unpack(K, Prefix), RevId = erlfdb_tuple:unpack(V), - maybe_stop(UserFun({row, [ + Row0 = [ {id, DocId}, {key, DocId}, {value, {[{rev, couch_doc:rev_to_str(RevId)}]}} - ]}, Acc)) + ], + + DocOpts = couch_util:get_value(doc_opts, Options, []), + OpenOpts = [deleted | DocOpts], + + Row1 = case lists:keyfind(include_docs, 1, Options) of + {include_docs, true} -> + Row0 ++ open_json_doc(Db, DocId, OpenOpts, DocOpts); + _ -> + Row0 + end, + + maybe_stop(UserFun({row, Row1}, Acc)) end, UserAcc1, Options), {ok, maybe_stop(UserFun(complete, UserAcc2))} @@ -1878,3 +1890,14 @@ stem_revisions(#{} = Db, #doc{} = Doc) -> true -> Doc#doc{revs = {RevPos, lists:sublist(Revs, RevsLimit)}}; false -> Doc end. + + +open_json_doc(Db, DocId, OpenOpts, DocOpts) -> + case fabric2_db:open_doc(Db, DocId, OpenOpts) of + {not_found, missing} -> + []; + {ok, #doc{deleted = true}} -> + [{doc, null}]; + {ok, #doc{} = Doc} -> + [{doc, couch_doc:to_json_obj(Doc, DocOpts)}] + end. |