pub struct StructWriter { /* private fields */ }Expand description
A batched writer for STRUCT output vectors.
Pre-creates a VectorWriter for every field at construction, allowing
direct typed writes without repeated duckdb_struct_vector_get_child calls.
Implementations§
Source§impl StructWriter
impl StructWriter
Sourcepub unsafe fn new(vector: duckdb_vector, field_count: usize) -> Self
pub unsafe fn new(vector: duckdb_vector, field_count: usize) -> Self
Creates a new StructWriter for a STRUCT vector with field_count fields.
This pre-creates a VectorWriter for each field index 0..field_count.
§Safety
vectormust be a valid, writableDuckDBSTRUCT vector.field_countmust match the number of fields in the STRUCT type.- The vector must remain valid for the lifetime of this writer.
Sourcepub fn field_count(&self) -> usize
pub fn field_count(&self) -> usize
Returns the number of fields in this struct writer.
Sourcepub fn child_vector(&self, field_idx: usize) -> duckdb_vector
pub fn child_vector(&self, field_idx: usize) -> duckdb_vector
Returns the raw duckdb_vector handle for the given field.
Use this when a struct field has a complex type (LIST, MAP, ARRAY) that
requires operations beyond simple scalar writes — for example, calling
ListVector::set_entry or
ListVector::reserve.
§Example
use quack_rs::vector::{StructWriter, VectorWriter, complex::ListVector};
use libduckdb_sys::duckdb_vector;
// Given a STRUCT output vector where field 1 is LIST<VARCHAR>:
// let mut sw = unsafe { StructWriter::new(struct_vec, 3) };
// sw.write_varchar(0, 0, "name"); // scalar field
// let list_vec = sw.child_vector(1); // LIST field
// unsafe { ListVector::reserve(list_vec, 10) }; // complex ops
// unsafe { ListVector::set_entry(list_vec, 0, 0, 3) };
// let mut elem = unsafe { ListVector::child_writer(list_vec) };
// unsafe { elem.write_varchar(0, "a") };
// unsafe { ListVector::set_size(list_vec, 3) };§Panics
Panics if field_idx >= field_count.
Sourcepub fn field_mut(&mut self, field_idx: usize) -> &mut VectorWriter
pub fn field_mut(&mut self, field_idx: usize) -> &mut VectorWriter
Returns a mutable reference to the VectorWriter for the given field.
§Panics
Panics if field_idx >= field_count.
Sourcepub unsafe fn write_bool(&mut self, row: usize, field_idx: usize, value: bool)
pub unsafe fn write_bool(&mut self, row: usize, field_idx: usize, value: bool)
Sourcepub unsafe fn write_varchar(
&mut self,
row: usize,
field_idx: usize,
value: &str,
)
pub unsafe fn write_varchar( &mut self, row: usize, field_idx: usize, value: &str, )
Sourcepub unsafe fn write_i128(&mut self, row: usize, field_idx: usize, value: i128)
pub unsafe fn write_i128(&mut self, row: usize, field_idx: usize, value: i128)
Sourcepub unsafe fn write_interval(
&mut self,
row: usize,
field_idx: usize,
value: DuckInterval,
)
pub unsafe fn write_interval( &mut self, row: usize, field_idx: usize, value: DuckInterval, )
Sourcepub unsafe fn write_blob(&mut self, row: usize, field_idx: usize, value: &[u8])
pub unsafe fn write_blob(&mut self, row: usize, field_idx: usize, value: &[u8])
Sourcepub unsafe fn write_uuid(&mut self, row: usize, field_idx: usize, value: i128)
pub unsafe fn write_uuid(&mut self, row: usize, field_idx: usize, value: i128)
Sourcepub unsafe fn write_str(&mut self, row: usize, field_idx: usize, value: &str)
pub unsafe fn write_str(&mut self, row: usize, field_idx: usize, value: &str)
Writes a VARCHAR string value to field field_idx at row row.
Alias for write_varchar.
§Safety
See write_varchar.