You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ja...@apache.org on 2023/03/09 06:44:15 UTC

[couchdb] branch refactor-keys-mutually-exclusive created (now f1777aac2)

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

jaydoane pushed a change to branch refactor-keys-mutually-exclusive
in repository https://gitbox.apache.org/repos/asf/couchdb.git


      at f1777aac2 Refactor

This branch includes the following new commits:

     new f1777aac2 Refactor

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 01/01: Refactor

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jaydoane pushed a commit to branch refactor-keys-mutually-exclusive
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit f1777aac244f46d3e9cf6521f0bb6f1726f8e638
Author: Jay Doane <ja...@apache.org>
AuthorDate: Wed Mar 8 22:43:45 2023 -0800

    Refactor
---
 src/couch_mrview/src/couch_mrview_http.erl | 159 ++++++++---------------------
 1 file changed, 44 insertions(+), 115 deletions(-)

diff --git a/src/couch_mrview/src/couch_mrview_http.erl b/src/couch_mrview/src/couch_mrview_http.erl
index 8da8bba8e..f55656b1e 100644
--- a/src/couch_mrview/src/couch_mrview_http.erl
+++ b/src/couch_mrview/src/couch_mrview_http.erl
@@ -521,6 +521,25 @@ parse_body_and_query(Req, {Props}, Keys) ->
     BodyArgs = parse_params(Props, Keys, Args, [decoded]),
     parse_params(chttpd:qs(Req), Keys, BodyArgs, [keep_group_level]).
 
+-define(KEY_INCOMPATIBLE_ERROR,
+    {query_parse_error, <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
+).
+
+check_start_key_undefined(#mrargs{start_key = undefined}) ->
+    ok;
+check_start_key_undefined(#mrargs{}) ->
+    throw(?KEY_INCOMPATIBLE_ERROR).
+
+check_end_key_undefined(#mrargs{end_key = undefined}) ->
+    ok;
+check_end_key_undefined(#mrargs{}) ->
+    throw(?KEY_INCOMPATIBLE_ERROR).
+
+check_start_key_end_key_undefined(#mrargs{start_key = undefined, end_key = undefined}) ->
+    ok;
+check_start_key_end_key_undefined(#mrargs{}) ->
+    throw(?KEY_INCOMPATIBLE_ERROR).
+
 parse_param(Key, Val, Args, IsDecoded) when is_binary(Key) ->
     parse_param(binary_to_list(Key), Val, Args, IsDecoded);
 parse_param(Key, Val, Args, IsDecoded) ->
@@ -530,41 +549,17 @@ parse_param(Key, Val, Args, IsDecoded) ->
         "reduce" ->
             Args#mrargs{reduce = parse_boolean(Val)};
         "key" when IsDecoded ->
-            case Args#mrargs.start_key =:= undefined andalso Args#mrargs.end_key =:= undefined of
-                true ->
-                    Args#mrargs{start_key = Val, end_key = Val};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_start_key_end_key_undefined(Args),
+            Args#mrargs{start_key = Val, end_key = Val};
         "key" ->
-            case Args#mrargs.start_key =:= undefined andalso Args#mrargs.end_key =:= undefined of
-                true ->
-                    JsonKey = ?JSON_DECODE(Val),
-                    Args#mrargs{start_key = JsonKey, end_key = JsonKey};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_start_key_end_key_undefined(Args),
+            JsonKey = ?JSON_DECODE(Val),
+            Args#mrargs{start_key = JsonKey, end_key = JsonKey};
         "keys" when IsDecoded ->
             case Val of
                 [Val1] ->
-                    case
-                        Args#mrargs.start_key =:= undefined andalso
-                            Args#mrargs.end_key =:= undefined
-                    of
-                        true ->
-                            Args#mrargs{start_key = Val1, end_key = Val1};
-                        _ ->
-                            throw(
-                                {query_parse_error,
-                                    <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                            )
-                    end;
+                    check_start_key_end_key_undefined(Args),
+                    Args#mrargs{start_key = Val1, end_key = Val1};
                 _ ->
                     Args#mrargs{keys = Val}
             end;
@@ -572,105 +567,39 @@ parse_param(Key, Val, Args, IsDecoded) ->
             Val1 = ?JSON_DECODE(Val),
             case Val1 of
                 [Val2] ->
-                    case
-                        Args#mrargs.start_key =:= undefined andalso
-                            Args#mrargs.end_key =:= undefined
-                    of
-                        true ->
-                            Args#mrargs{start_key = Val2, end_key = Val2};
-                        _ ->
-                            throw(
-                                {query_parse_error,
-                                    <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                            )
-                    end;
+                    check_start_key_end_key_undefined(Args),
+                    Args#mrargs{start_key = Val2, end_key = Val2};
                 _ ->
                     Args#mrargs{keys = Val1}
             end;
         "startkey" when IsDecoded ->
-            case Args#mrargs.start_key =:= undefined of
-                true ->
-                    Args#mrargs{start_key = Val};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_start_key_undefined(Args),
+            Args#mrargs{start_key = Val};
         "start_key" when IsDecoded ->
-            case Args#mrargs.start_key =:= undefined of
-                true ->
-                    Args#mrargs{start_key = Val};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_start_key_undefined(Args),
+            Args#mrargs{start_key = Val};
         "startkey" ->
-            case Args#mrargs.start_key =:= undefined of
-                true ->
-                    Args#mrargs{start_key = ?JSON_DECODE(Val)};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_start_key_undefined(Args),
+            Args#mrargs{start_key = ?JSON_DECODE(Val)};
         "start_key" ->
-            case Args#mrargs.start_key =:= undefined of
-                true ->
-                    Args#mrargs{start_key = ?JSON_DECODE(Val)};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_start_key_undefined(Args),
+            Args#mrargs{start_key = ?JSON_DECODE(Val)};
         "startkey_docid" ->
             Args#mrargs{start_key_docid = couch_util:to_binary(Val)};
         "start_key_doc_id" ->
             Args#mrargs{start_key_docid = couch_util:to_binary(Val)};
         "endkey" when IsDecoded ->
-            case Args#mrargs.end_key =:= undefined of
-                true ->
-                    Args#mrargs{end_key = Val};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_end_key_undefined(Args),
+            Args#mrargs{end_key = Val};
         "end_key" when IsDecoded ->
-            case Args#mrargs.end_key =:= undefined of
-                true ->
-                    Args#mrargs{end_key = Val};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_end_key_undefined(Args),
+            Args#mrargs{end_key = Val};
         "endkey" ->
-            case Args#mrargs.end_key =:= undefined of
-                true ->
-                    Args#mrargs{end_key = ?JSON_DECODE(Val)};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_end_key_undefined(Args),
+            Args#mrargs{end_key = ?JSON_DECODE(Val)};
         "end_key" ->
-            case Args#mrargs.end_key =:= undefined of
-                true ->
-                    Args#mrargs{end_key = ?JSON_DECODE(Val)};
-                _ ->
-                    throw(
-                        {query_parse_error,
-                            <<"`key(s)` is incompatible with `start_key` and `end_key`">>}
-                    )
-            end;
+            check_end_key_undefined(Args),
+            Args#mrargs{end_key = ?JSON_DECODE(Val)};
         "endkey_docid" ->
             Args#mrargs{end_key_docid = couch_util:to_binary(Val)};
         "end_key_doc_id" ->