FAQ
view changes: fix json_req parsing


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/3ca63eb3
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/3ca63eb3
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/3ca63eb3

Branch: refs/heads/1994-merge-rcouch
Commit: 3ca63eb30cdb8a4947756191d0374e0c755aba3c
Parents: 1709879
Author: benoitc <bchesneau@gmail.com>
Authored: Thu Jul 3 11:31:17 2014 +0200
Committer: benoitc <bchesneau@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
  src/couch_httpd_changes.erl | 32 +++++++++++++++++---------------
  1 file changed, 17 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/3ca63eb3/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index a6d50c3..9548e30 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -137,17 +137,17 @@ handle_view_changes(ChangesArgs, Req, Db) ->
      {DDocId, VName} = parse_view_param(Req),

      %% get view options
- {Query, NoIndex} = case Req of
+ {Query, NoIndex, JsonReq} = case Req of
          {json_req, {Props}} ->
              {Q} = couch_util:get_value(<<"query">>, Props, {[]}),
              NoIndex1 = (couch_util:get_value(<<"use_index">>, Q,
                                              <<"yes">>) =:= <<"no">>),
- {Q, NoIndex1};
+ {Q, NoIndex1, true};
          _ ->
              NoIndex1 = couch_httpd:qs_value(Req, "use_index", "yes") =:= "no",
- {couch_httpd:qs(Req), NoIndex1}
+ {couch_httpd:qs(Req), NoIndex1, false}
      end,
- ViewOptions = parse_view_options(Query, []),
+ ViewOptions = parse_view_options(Query, JsonReq, []),

      {ok, Infos} = couch_mrview:get_info(Db, DDocId),
      IsIndexed = lists:member(<<"seq_indexed">>,
@@ -376,29 +376,29 @@ parse_view_param1(ViewParam) ->
              throw({bad_request, "Invalid `view` parameter."})
      end.

-parse_view_options([], Acc) ->
+parse_view_options([], JsonReq, Acc) ->
      Acc;
-parse_view_options([{K, V} | Rest], Acc) ->
+parse_view_options([{K, V} | Rest], JsonReq, Acc) ->
      Acc1 = case couch_util:to_binary(K) of
          <<"reduce">> ->
              [{reduce, couch_mrview_http:parse_boolean(V)}];
          <<"key">> ->
- V1 = parse_json(V),
+ V1 = parse_json(V, JsonReq),
              [{start_key, V1}, {end_key, V1} | Acc];
          <<"keys">> ->
- [{keys, parse_json(V)} | Acc];
+ [{keys, parse_json(V, JsonReq)} | Acc];
          <<"startkey">> ->
- [{start_key, parse_json(V)} | Acc];
+ [{start_key, parse_json(V, JsonReq)} | Acc];
          <<"start_key">> ->
- [{start_key, parse_json(V)} | Acc];
+ [{start_key, parse_json(V, JsonReq)} | Acc];
          <<"startkey_docid">> ->
              [{start_key_docid, couch_util:to_binary(V)} | Acc];
          <<"start_key_docid">> ->
              [{start_key_docid, couch_util:to_binary(V)} | Acc];
          <<"endkey">> ->
- [{end_key, parse_json(V)} | Acc];
+ [{end_key, parse_json(V, JsonReq)} | Acc];
          <<"end_key">> ->
- [{end_key, parse_json(V)} | Acc];
+ [{end_key, parse_json(V, JsonReq)} | Acc];
          <<"endkey_docid">> ->
              [{start_key_docid, couch_util:to_binary(V)} | Acc];
          <<"end_key_docid">> ->
@@ -436,7 +436,7 @@ parse_view_options([{K, V} | Rest], Acc) ->
          _ ->
              Acc
      end,
- parse_view_options(Rest, Acc1).
+ parse_view_options(Rest, JsonReq, Acc1).

  refresh_option({json_req, {Props}}) ->
      {Query} = couch_util:get_value(<<"query">>, Props),
@@ -447,9 +447,11 @@ refresh_option(Req) ->
          _ -> true
      end.

-parse_json(V) when is_list(V) ->
+parse_json(V, true) when is_binary(V) ->
      ?JSON_DECODE(V);
-parse_json(V) ->
+parse_json(V, false) when is_list(V) ->
+ ?JSON_DECODE(V);
+parse_json(V, _) ->
      V.

  deleted_item(true) -> [{<<"deleted">>, true}];

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 4 of 10 | next ›
Discussion Overview
groupcommits @
categoriescouchdb
postedJul 13, '14 at 12:34p
activeJul 13, '14 at 12:34p
posts10
users1
websitecouchdb.apache.org
irc#couchdb

1 user in discussion

Benoitc: 10 posts

People

Translate

site design / logo © 2021 Grokbase