You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by be...@apache.org on 2010/06/24 11:24:28 UTC

svn commit: r957467 - in /couchdb/branches/0.11.x: share/www/script/test/rewrite.js src/couchdb/couch_httpd_rewrite.erl

Author: benoitc
Date: Thu Jun 24 09:24:28 2010
New Revision: 957467

URL: http://svn.apache.org/viewvc?rev=957467&view=rev
Log:
fix #COUCHDB-787 . thanks!

Modified:
    couchdb/branches/0.11.x/share/www/script/test/rewrite.js
    couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl

Modified: couchdb/branches/0.11.x/share/www/script/test/rewrite.js
URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/share/www/script/test/rewrite.js?rev=957467&r1=957466&r2=957467&view=diff
==============================================================================
--- couchdb/branches/0.11.x/share/www/script/test/rewrite.js (original)
+++ couchdb/branches/0.11.x/share/www/script/test/rewrite.js Thu Jun 24 09:24:28 2010
@@ -137,6 +137,13 @@ couchTests.rewrite = function(debug) {
               "query": {
                 "key": [":a", ":b"]
               }
+            },
+            {
+              "from": "simpleForm/complexView6",
+              "to": "_list/simpleForm/complexView3",
+              "query": {
+                "key": [":a", ":b"]
+              }
             }
           ],
           lists: {
@@ -331,6 +338,10 @@ couchTests.rewrite = function(debug) {
         T(xhr.status == 200, "with query params");
         T(/Value: doc 4/.test(xhr.responseText));
         
+        xhr = CouchDB.request("GET", "/test_suite_db/_design/test/_rewrite/simpleForm/complexView6?a=test&b=essai");
+        T(xhr.status == 200, "with query params");
+        T(/Value: doc 4/.test(xhr.responseText));
+        
         // test path relative to server
         designDoc.rewrites.push({
            "from": "uuids",

Modified: couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl
URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl?rev=957467&r1=957466&r2=957467&view=diff
==============================================================================
--- couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl (original)
+++ couchdb/branches/0.11.x/src/couchdb/couch_httpd_rewrite.erl Thu Jun 24 09:24:28 2010
@@ -118,6 +118,7 @@ handle_rewrite_req(#httpd{
     DesignId = <<"_design/", DesignName/binary>>,
     Prefix = <<"/", DbName/binary, "/", DesignId/binary>>,
     QueryList = couch_httpd:qs(Req),
+    QueryList1 = [{to_atom(K), V} || {K, V} <- QueryList],
 
     #doc{body={Props}} = DDoc,
 
@@ -132,7 +133,7 @@ handle_rewrite_req(#httpd{
 
             %% get raw path by matching url to a rule.
             RawPath = case try_bind_path(DispatchList, Method, PathParts,
-                                    QueryList) of
+                                    QueryList1) of
                 no_dispatch_path ->
                     throw(not_found);
                 {NewPathParts, Bindings} ->
@@ -146,7 +147,7 @@ handle_rewrite_req(#httpd{
                             [] -> [];
                             _ -> [$?, encode_query(Bindings)]
                         end),
-
+                    
                     % if path is relative detect it and rewrite path
                     case mochiweb_util:safe_relative_path(Path) of
                         undefined ->
@@ -199,7 +200,7 @@ try_bind_path([Dispatch|Rest], Method, P
                     % we parse query args from the rule and fill
                     % it eventually with bindings vars
                     QueryArgs1 = make_query_list(QueryArgs, Bindings1, []),
-
+                    
                     % remove params in QueryLists1 that are already in
                     % QueryArgs1
                     Bindings2 = lists:foldl(fun({K, V}, Acc) ->
@@ -247,8 +248,13 @@ replace_var(Key, Value, Bindings) ->
             Value1 = lists:foldr(fun(V, Acc) ->
                 V1 = case V of
                     <<":", VName/binary>> ->
-                        get_var(VName, Bindings, V);
+                        case get_var(VName, Bindings, V) of
+                            V2 when is_list(V2) ->
+                                iolist_to_binary(V2);
+                            V2 -> V2
+                        end;
                     _ ->
+                        
                         V
                 end,
                 [V1|Acc]