Doc ID should auto-generate if not provided, before sending to _update function
[PATCH]
---------------------------------------------------------------------------------------
Key: COUCHDB-802
URL: https://issues.apache.org/jira/browse/COUCHDB-802
Project: CouchDB
Issue Type: Bug
Components: HTTP Interface, JavaScript View Server
Affects Versions: 0.11
Environment: Linux
Reporter: Jason Smith
Priority: Minor
Fix For: 0.11.1
The main bug is this: _show and _update functions should be able to mimic the
standard HTTP/JSON API. A common pattern people are moving to is rewriting to
_show and _update, so the client thinks it is hitting normal couch, however
additional logic happens (e.g. auto-timestamping).
Unfortunately, _update cannot return an auto-generated ID for POST to
/db/_design/ddoc/_update. The semantics should match POST to /db/ -- If an _id
is provided, use that; otherwise auto-generate one. The best an _update
function can do now is Math.random() or similar; however one loses the
advantage of sequential UUID generation from couch's internals.
The fix is for couch to send a random UUID if the update URL did not include
the final /Id component. The function itself in the view server can decide
whether to use it. Assuming that change, the update function could at least be
capable of duplicating the direct API using the following Javascript logic:
function(doc, req) {
if(doc && doc._id == req.id) {
// To be pedantic, I could confirm req.method == "PUT"
log("I am an update by id");
} else if(doc === null && req.id) {
if(req.method == "POST") {
log("I am a create, id was auto-generated");
} else if(req.method == "PUT") {
log("I am a create, id was supplied by client");
}
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.