couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Anderson (JIRA)" <j...@apache.org>
Subject [jira] Commented: (COUCHDB-617) Large integers being turned into floats
Date Fri, 08 Jan 2010 17:56:54 GMT

    [ 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.


Mime
View raw message