[
https://issues.apache.org/jira/browse/COUCHDB-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12798100#action_12798100
]
Chris Anderson commented on COUCHDB-617:
----------------------------------------
I removed this guard when upgrading mochijson at one point because it caused a
regression with regard to large number handing.
As per the JSON spec we can pretty much do whatever we want here. We should
decide what behavior we like and then add a test to keep it proper. (This stuff
is hard to test from the browser.)
> Large integers being turned 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.