--- Revision None +++ Revision 633861623739 @@ -0,0 +1,59 @@ +diff --git a/src/couchdb/couch_httpd_rewrite.erl b/src/couchdb/couch_httpd_rewrite.erl +index 6c3d0e3..5fb0bee 100644 +--- a/src/couchdb/couch_httpd_rewrite.erl ++++ b/src/couchdb/couch_httpd_rewrite.erl +@@ -236,46 +236,20 @@ make_query_list([{Key, {Value}}|Rest], Bindings, Acc) -> + Value1 = to_json({Value}), + make_query_list(Rest, Bindings, [{to_binding(Key), Value1}|Acc]); + make_query_list([{Key, Value}|Rest], Bindings, Acc) when is_binary(Value) -> +- Value1 = replace_var(Key, Value, Bindings), ++ Value1 = replace_var(Value, Bindings), + make_query_list(Rest, Bindings, [{to_binding(Key), Value1}|Acc]); + make_query_list([{Key, Value}|Rest], Bindings, Acc) when is_list(Value) -> +- Value1 = replace_var(Key, Value, Bindings), ++ Value1 = to_json([replace_var(V, Bindings) || V <- Value]), + make_query_list(Rest, Bindings, [{to_binding(Key), Value1}|Acc]); + make_query_list([{Key, Value}|Rest], Bindings, Acc) -> + make_query_list(Rest, Bindings, [{to_binding(Key), Value}|Acc]). + +-replace_var(Key, Value, Bindings) -> +- case Value of +- <<":", Var/binary>> -> +- get_var(Var, Bindings, Value); +- _ when is_list(Value) -> +- Value1 = lists:foldr(fun(V, Acc) -> +- V1 = case V of +- <<":", VName/binary>> -> +- case get_var(VName, Bindings, V) of +- V2 when is_list(V2) -> +- iolist_to_binary(V2); +- V2 -> V2 +- end; +- _ -> +- +- V +- end, +- [V1|Acc] +- end, [], Value), +- to_json(Value1); +- _ when is_binary(Value) -> +- Value; +- _ -> +- case Key of +- <<"key">> -> to_json(Value); +- <<"startkey">> -> to_json(Value); +- <<"endkey">> -> to_json(Value); +- _ -> +- lists:flatten(?JSON_ENCODE(Value)) +- end +- end. +- ++replace_var(<<":", Var/binary>> = Value, Bindings) -> ++ get_var(Var, Bindings, Value); ++replace_var(Value, _Bindings) when is_binary(Value) -> ++ Value; ++replace_var(Value, _Bindings) -> ++ to_json(Value). + + get_var(VarName, Props, Default) -> + VarName1 = to_binding(VarName),