This is an automated email from the ASF dual-hosted git repository. davisp pushed a commit to branch prototype/views in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 2f26a949c25e332d78f3502fe5d0c7136af76c1c Author: Paul J. Davis <[email protected]> AuthorDate: Tue Jul 23 14:25:09 2019 -0500 Support the `keys` option --- src/couch_views/src/couch_views_reader.erl | 37 ++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/couch_views/src/couch_views_reader.erl b/src/couch_views/src/couch_views_reader.erl index 25144ba..c26b313 100644 --- a/src/couch_views/src/couch_views_reader.erl +++ b/src/couch_views/src/couch_views_reader.erl @@ -31,7 +31,6 @@ read(Db, Mrst, ViewName, UserCallback, UserAcc0, Args) -> } = Mrst, ViewId = get_view_id(Lang, Args, ViewName, Views), - Opts = mrargs_to_fdb_options(Args), Fun = fun handle_row/4, try @@ -43,19 +42,25 @@ read(Db, Mrst, ViewName, UserCallback, UserAcc0, Args) -> Acc0 = #{ db => TxDb, skip => Args#mrargs.skip, - mrargs => Args, + mrargs => undefined, callback => UserCallback, acc => UserAcc1 }, - Acc1 = couch_views_fdb:fold_map_idx( - TxDb, - Sig, - ViewId, - Opts, - Fun, - Acc0 - ), + Acc1 = lists:foldl(fun(KeyArgs, KeyAcc0) -> + Opts = mrargs_to_fdb_options(KeyArgs), + KeyAcc1 = KeyAcc0#{ + mrargs := KeyArgs + }, + couch_views_fdb:fold_map_idx( + TxDb, + Sig, + ViewId, + Opts, + Fun, + KeyAcc1 + ) + end, Acc0, expand_keys_args(Args)), #{ acc := UserAcc2 @@ -108,6 +113,18 @@ get_view_id(Lang, Args, ViewName, Views) -> end. +expand_keys_args(#mrargs{keys = undefined} = Args) -> + [Args]; + +expand_keys_args(#mrargs{keys = Keys} = Args) -> + lists:map(fun(Key) -> + Args#mrargs{ + start_key = Key, + end_key = Key + } + end, Keys). + + mrargs_to_fdb_options(Args) -> #mrargs{ start_key = StartKey0,
