Since you don't discriminate between float64 and float32, should this use type `double` instead of `float`?  Otherwise (particularly for a DBMS) it seems like there could be precision loss on the round-trip back to a table.

I can't decide if the `int` type should be `long` instead.  This would not be *wrong* but I'm not sure if it's better.