Appender support for arrays (or alternative)
cipriancraciun opened this issue · comments
At the moment, although the Value
and ValueRef
seem to mention support for arrays, lists, and a few related items, none of them seem to be implemented (i.e. the code panics with unsupported!()
) when used in Appender::append_row
or even for parameter binding in prepared statements.
It would be nice, since DuckDB does support array / list types, to be able to bulk insert data (or at least insert row-by-row) that contains such types.
In the interim, is there perhaps a workaround? (Besides serializing the data as JSON and using COPY
, or writing a prepared statement that deserializes data a string via JSON.)
I do not believe there is a function in the C api to append an array or list, but it would require the value to be coverted to a data chunk and then appended with duckdb_append_data_chunk
If you have arrow data, I think it is possible to do this in the current rust api with append_record_batch()
, which will convert the record batch to a data chunk and then use duckdb_append_data_chunk
.
Looking at the current Rust API (https://docs.rs/duckdb/latest/duckdb/struct.Appender.html?search=batch), I don't see any appender.append_record_batch()
method; is this perhaps in a different Rust crate? (I've also checked the libduckdb-sys
crate that I believe is the C++ wrapper for Rust.)
I think duckdb_append_value
was added in 1.2.0 (duckdb/duckdb#15065). I guess that can be used to append arrays and other types.