[
https://issues.apache.org/jira/browse/COUCHDB-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12798034#action_12798034
]
Brian Candler commented on COUCHDB-617:
---------------------------------------
Actually, the same is happening just when saving and retrieving documents (so
not touching the view server at all).
$ curl -X PUT -d '{"v":3000000000}' http://127.0.0.1:5984/test_suite_db/xyzzy
{"ok":true,"id":"xyzzy","rev":"1-05551cfd0e8e3f5dc99054be3b105483"}
$ curl http://127.0.0.1:5984/test_suite_db/xyzzy
{"_id":"xyzzy","_rev":"1-05551cfd0e8e3f5dc99054be3b105483","v":3.0e+9}
> 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.