bson-lua icon indicating copy to clipboard operation
bson-lua copied to clipboard

bson.to_double overlooked?

Open josefnpat opened this issue 12 years ago • 5 comments

It seems that double values don't work! I don't see function bson.to_double defined anywhere.

https://github.com/tcoram/bson-lua/blob/master/bson.lua#L81

Any chance you can clean this up, as I am not familiar with the bson spec sheet.

Error: bson.lua:81: attempt to call field 'to_double' (a nil value) 

josefnpat avatar Apr 04 '13 17:04 josefnpat

Not so much as overlooked as (currently) avoided. I've yet to find an (easy) way to coerce Lua to encode/decode little endian ordered doubles. I left the function undefined so there is no ambiguity as to what will happen when you try to encode a double.

tcoram avatar Apr 04 '13 18:04 tcoram

Have a look at my code at https://github.com/daurnimator/mongol/blob/master/mongol/ll.lua which is what most people end up using

daurnimator avatar Jul 15 '13 22:07 daurnimator

Clever :) I've resisted luaJIT/ffi because I wanted to keep the implementation pure (I've got some embedded hosts I'm using), but I never thought of exploiting the Lua bytecode!

However, this approach would be a problem with big-endian machines, wouldn't it? Hmm... BSON specifies little-endian encoding and I guess just about all modern CPUs are little endian these days (ARM defaults to this, Intel, etc), so it should be portable most everywhere...

Mind if I incorporate your technique?

tcoram avatar Jul 16 '13 01:07 tcoram

sure/go for it.

IEEE754 floating point numbers do not have an endianess.

FWIW you can steal any of the code I wrote here: https://github.com/daurnimator/mongol/blob/master/mongol/bson.lua

For the record, I abandoned mongo/bson when I realise that bson "dictionarys" are ordered; i.e. they are an ordered array of key/value pairs, and can't actually represent a hash.

daurnimator avatar Jul 16 '13 02:07 daurnimator

IEEE754 floating point numbers do not have an endianess.

Yes. Of course. Duh on my part.

For the record, I abandoned mongo/bson when I realise that bson "dictionarys" are ordered;

Hmm... the spec doesn't exactly make that obvious, but I do see some rather vocal replies (that, "of course", it is ordered) on the mailing list.

I don't use mongo. I use bson as a less verbose json for some simple payload encoding (where the doc is picked apart via hash indexes).

Thanks for pointing that out though.

tcoram avatar Jul 16 '13 11:07 tcoram