On Oct 21, 2008, at 18:23 , Jonathan Moss wrote:

Thanks Bradford,

That allowed me to track down the issue. It seems that when the PHP classes serialize the document in json for saving the _rev is cast to an integer. The rev numbers are often larger than the maximum integer value PHP supports and it therefore I end up with a -ve number and the revisions obviously don't match and I get a 412 - conflict.

I then cast the value to a float which is done elsewhere in the library. This still resulted in a 412. So I looked at the raw put data from the request and compared it to the raw get data I got in the first place. The only difference was the by casting to a float _rev was encoded as:

"_rev":123456789

whereas I received it as:

"_rev":"123456789"

By casting as a string just before json encoding I now get a much happier 201 status code during my testing. Should the server really be quibbling over the data type? Not a problem if it does but it was a difficult one to track down.

and from Nick:

Why are you casting it from a string in the first place? Just treat it as an opaque value and return it to the server as sent to you. Besides, you can't
represent every possible 64 bit integer in a double anyway.

For a brief time, CouchDB's revision ids were integers. That is when CouchSimple was written and I was probably too lazy to keep the wiki updated. Sorry! :)

Cheers
Jan
--



Regards,
Jon
I believe a 412 is a conflict,  anyone care to prove me wrong?



----- Original Message ----
From: Jonathan Moss <[EMAIL PROTECTED]>
To: couchdb-user@incubator.apache.org
Sent: Tuesday, October 21, 2008 3:07:43 AM
Subject: Re: 412 on update


Hi everyone,

I am using the CouchDB PHP library (from http://couchprojects.googlecode.com/svn/trunk/libraries/php/) to communicate with the database an I am having some issues updating a design document. When I try to save the design document I receive a 412 HTTP status code. The code below is a simplification of what I am doing but should explain what I am trying to do.

$objCouch = new Couch(array("host" => localhost, "port" => 5984));
$objDesignDoc = $objCouch->database($strDB)->get("_design/ ADesignDoc";
$objFunction = new stdClass();
$objFunction->map = "function(doc){if(doc.Type = 'ANode') {emit(doc.Name, doc);}}";
$objDesignDoc->views->$strFunc = $objFunction;
$objDesignDoc->save();
echo "Status: " . $objDesignDoc->lastStatusCode . "\n";

What does a 412 status code mean in this context and does anyone have any idea what I can do to fix it?

Regards,
Jon


I should have mentioned I am using version 0.8.1 of CouchDB

Thanks,
Jon


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com


Reply via email to