tcoram / bson-lua

BSON in pure Lua.
MIT License
41 stars 13 forks source link

bson.to_double overlooked? #1

Open josefnpat opened 11 years ago

josefnpat commented 11 years ago

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) 
tcoram commented 11 years ago

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.

daurnimator commented 11 years ago

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

tcoram commented 11 years ago

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?

daurnimator commented 11 years ago

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.

tcoram commented 11 years ago

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.