[ 
https://issues.apache.org/jira/browse/COUCHDB-2748?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14652615#comment-14652615
 ] 

Paul Joseph Davis commented on COUCHDB-2748:
--------------------------------------------

So I think there's a bug here, but not exactly what was reported and I'd also 
have to check for spec for URL encoding, but I think that this URL: "curl 
http://localhost:5984/testrainyday/BANANA%3A21%"; should generate an error 
somewhere since its got a bare % on the end. Granted the encoding spec may say 
that an invalid % encoding may just be left as is or something so that might be 
expected.

The real confusion here appears to be that the JSON response body returns the 
URL-decoded version of the document ID. In the first example:

<pre>
$ curl -X PUT http://localhost:5984/testrainyday/BANANA%253A21%25 -d '{}'
{"_id":"BANANA%3A21%","_rev":"1-967a00dff5e02add41819138abb3284d"}
$ curl http://localhost:5984/testrainyday/BANANA%3A21%
{"error":"not_found","reason":"missing"}
</pre>

This is returning not_found because we're decoding the URL which actually gives 
(I think, the trailing % is confusing) BANANA:21%

The actual URL of the document ID though is the original curl call:

<pre>
http://localhost:5984/testrainyday/BANANA%253A21%25
</pre>

You need to use that URL to get at the document you saved.


> encoding problems with reserved chars
> -------------------------------------
>
>                 Key: COUCHDB-2748
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-2748
>             Project: CouchDB
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: Database Core
>            Reporter: Robert Kowalski
>
> Let's create a database!
> {noformat}
> curl -X PUT http://localhost:5984/testrainyday
> {noformat}
> I get:  {{{"ok":true}}}
> Let's create a document called BANANA%253A21%25
> {noformat}
> curl -X PUT http://localhost:5984/testrainyday/BANANA%253A21%25 -d '{}'
> {noformat}
> CouchDB returns:
> {noformat}
> {"_id":"BANANA%3A21%","_rev":"1-967a00dff5e02add41819138abb3284d"}
> {noformat}
> (note the changed id - it misses the 25)
> lets use the id from the response to retrieve the doc:
> {noformat}
> curl http://localhost:5984/testrainyday/BANANA%3A21%
> {noformat}
> i get:
> {noformat}
> {"error":"not_found","reason":"missing"}
> {noformat}
> :(
> New try:
> curl http://localhost:5984/testrainyday/_all_docs
> returns:
> {noformat}
> {"total_rows":1,"offset":0,"rows":[
> {"id":"BANANA%3A21%","key":"BANANA%3A21%","value":{"rev":"1-967a00dff5e02add41819138abb3284d"}}
> ]}
> {noformat}
> I get BANANA%3A21% as id again, but when I want to curl it or use in my JS 
> application, I get `{"error":"not_found","reason":"missing"}`
> I noticed that it works for these two ids:
> curl -X PUT http://localhost:5984/testrainyday/BANANA%25 -d '{}'
> {noformat}
> {"ok":true,"id":"BANANA%","rev":"1-967a00dff5e02add41819138abb3284d"}
> {noformat}
> In this last case it works magically for both ids:
> {noformat}
> (17:54:11) [robert@tequila-work] ~ $ curl -X PUT 
> http://localhost:5984/testrainyday/BANANA%25 -d '{}'
> {"ok":true,"id":"BANANA%","rev":"1-967a00dff5e02add41819138abb3284d"}
> (17:55:45) [robert@tequila-work] ~ $ curl 
> http://localhost:5984/testrainyday/BANANA%25
> {"_id":"BANANA%","_rev":"1-967a00dff5e02add41819138abb3284d"}
> (17:55:57) [robert@tequila-work] ~ $ curl 
> http://localhost:5984/testrainyday/BANANA%
> {"_id":"BANANA%","_rev":"1-967a00dff5e02add41819138abb3284d"}
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to