Compute and set our PooledArray ref type manually
authorJacob Quinn <quinn.jacobd@gmail.com>
Wed, 28 Oct 2020 07:11:20 +0000 (01:11 -0600)
committerJacob Quinn <quinn.jacobd@gmail.com>
Wed, 28 Oct 2020 14:43:37 +0000 (08:43 -0600)
commit74e564df952ad2fc357bc19fbb7a6458e2ed0af7
tree428e7ffff19d45141e4da3031146809bc314d29f
parentf338f2fbfb167c78095b9aeeb8a5bed1822456f4
Compute and set our PooledArray ref type manually

Should fix #52. The issue here is a little tricky, and I'm not sure
we're 100% doing things correct yet. Part of the problem, however, is
that when a user requests a column to be `DictEncode`-ed, we were just
calling `PooledArray(x)` to do the pooling for us, but PooledArrays uses
unsigned integer types as the ref type by default. The arrow format
encourages the use of *signed* integers, however, so when we were
serializing the *type* of the dict-encoded indices, we serialized the
*signed* version, even if the indices were unsigned. That's bad because
the indices may have "fit" in the unsigned type domain (like UInt8), but
not been valid in the signed domain (like 129 for Int8). So one change
made here is we don't auto-convert to the signed type, we just used
whatever the indices type is. The second change, to try and follow what
the arrow format encourages, is we'll compute our own ref type using the
`encodingtype` function, which produces a signed integer type, and pass
that to `PooledArray`.
src/arraytypes/dictencoding.jl
test/runtests.jl