Tables.jl
Tables.jl copied to clipboard
`Tables.dictcolumntable` produces columns with `#undef` instead of `missing` in struct-valued columns
julia> using Tables
julia> struct SSS
stuff
end
julia> Tables.dictcolumntable([(; a=SSS(1)), (; b=2)]).a
2-element Vector{Union{Missing, SSS}}:
SSS(1)
#undef
julia> Tables.columns(Tables.dictrowtable([(; a=SSS(1)), (; b=2)]))
Tables.CopiedColumns{NamedTuple{(:a, :b), Tuple{Vector{Union{Missing, SSS}}, Vector{Union{Missing, Int64}}}}} with 2 rows, 2 columns, and schema:
:a Union{Missing, SSS}
:b Union{Missing, Int64}
julia> Tables.columns(Tables.dictrowtable([(; a=SSS(1)), (; b=2)])).a
2-element Vector{Union{Missing, SSS}}:
SSS(1)
missing
julia> Tables.dictcolumntable([(; a=1), (; b=2)]).a
2-element Vector{Union{Missing, Int64}}:
1
missing
Looks like dictcolumntable assumes that missing is used instead of #undef, but that's only the case for bitstypes. And even worse, singleton types may be used as the default instead of missing, giving misleading results. So better initialize all the time the entry with missing.
Sorry for the slow response: https://github.com/JuliaData/Tables.jl/pull/288