View server turning integers into floats
----------------------------------------
Key: COUCHDB-617
URL: https://issues.apache.org/jira/browse/COUCHDB-617
Project: CouchDB
Issue Type: Bug
Environment: 0.11.0b894112
Ubuntu Karmic
standard erlang 13.b.1 package
xulrunner 1.9.1.6
Reporter: Brian Candler
Somewhere between the view server and the client, large integer values are
having .0 appended to make them look like floats.
This is OK:
$ curl -X POST -d '{"map":"function(doc) { emit(2000000000,null); }"}'
http://127.0.0.1:5984/test_suite_db/_temp_view
{"total_rows":3,"offset":0,"rows":[
{"id":"bar","key":2000000000,"value":null},
{"id":"baz","key":2000000000,"value":null},
{"id":"foo","key":2000000000,"value":null}
]}
But here's a large integer getting the .0 appended:
$ curl -X POST -d '{"map":"function(doc) { emit(1262958680124,null); }"}'
http://127.0.0.1:5984/test_suite_db/_temp_view
{"total_rows":3,"offset":0,"rows":[
{"id":"bar","key":1262958680124.0,"value":null},
{"id":"baz","key":1262958680124.0,"value":null},
{"id":"foo","key":1262958680124.0,"value":null}
]}
And some values are getting turned into exponential format:
$ curl -X POST -d '{"map":"function(doc) { emit(3000000000,null); }"}'
http://127.0.0.1:5984/test_suite_db/_temp_view
{"total_rows":3,"offset":0,"rows":[
{"id":"bar","key":3.0e+9,"value":null},
{"id":"baz","key":3.0e+9,"value":null},
{"id":"foo","key":3.0e+9,"value":null}
]}
It appears to affect integers larger than 2^31, but these are still much
smaller than the 2^48 mantissa of IEEE double precision (which Javascript
uses). Hence they should be accurately represented as integers, not floats.
If I run the view server by itself from the command line, all works properly:
$ bin/couchjs share/server/main.js
["reset"]
true
["add_fun","function(doc) { emit(1262958680124,null); }"]
true
["add_fun","function(doc) { emit(3000000000,null); }"]
true
["map_doc",{}]
[[[1262958680124,null]], [[3000000000,null]]]
Therefore it looks like the problem is in the Erlang JSON deserialisation side.
i.e. it's not keeping these values as large integers, when it could be.
NOTE: I have another machine, running a similar recent couchdb trunk
(0.11.0b894828) plus Ubuntu Karmic Server Edition built against libmozjs
1.8.1.16 (not xulrunner). This exhibits the same behaviour as above.
But the problem *doesn't* appear on another, older CouchDB installation I have.
This is 0.11.0a813819 running under Ubuntu Hardy, with erlang 12.b.5 and
libmozjs 1.8.1.18
{"total_rows":1,"offset":0,"rows":[
{"id":"person","key":3000000000,"value":null}
]}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.