Skip to main content

StructWriter

Struct StructWriter 

Source
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

Source

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
  • vector must be a valid, writable DuckDB STRUCT vector.
  • field_count must match the number of fields in the STRUCT type.
  • The vector must remain valid for the lifetime of this writer.
Source

pub fn field_count(&self) -> usize

Returns the number of fields in this struct writer.

Source

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.

Source

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.

Source

pub unsafe fn write_bool(&mut self, row: usize, field_idx: usize, value: bool)

Writes a bool value to field field_idx at row row.

§Safety
  • row must be within the vector’s capacity.
  • The field at field_idx must have BOOLEAN type.
§Panics

Panics if field_idx >= field_count.

Source

pub unsafe fn write_varchar( &mut self, row: usize, field_idx: usize, value: &str, )

Writes a VARCHAR string value to field field_idx at row row.

§Safety
  • row must be within the vector’s capacity.
  • The field at field_idx must have VARCHAR type.
§Panics

Panics if field_idx >= field_count.

Source

pub unsafe fn write_i8(&mut self, row: usize, field_idx: usize, value: i8)

Writes an i8 (TINYINT) value to field field_idx at row row.

§Safety
  • row must be within the vector’s capacity.
  • The field at field_idx must have TINYINT type.
§Panics

Panics if field_idx >= field_count.

Source

pub unsafe fn write_i16(&mut self, row: usize, field_idx: usize, value: i16)

Writes an i16 (SMALLINT) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_i32(&mut self, row: usize, field_idx: usize, value: i32)

Writes an i32 (INTEGER) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_i64(&mut self, row: usize, field_idx: usize, value: i64)

Writes an i64 (BIGINT) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_i128(&mut self, row: usize, field_idx: usize, value: i128)

Writes an i128 (HUGEINT) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_u8(&mut self, row: usize, field_idx: usize, value: u8)

Writes a u8 (UTINYINT) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_u16(&mut self, row: usize, field_idx: usize, value: u16)

Writes a u16 (USMALLINT) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_u32(&mut self, row: usize, field_idx: usize, value: u32)

Writes a u32 (UINTEGER) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_u64(&mut self, row: usize, field_idx: usize, value: u64)

Writes a u64 (UBIGINT) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_f32(&mut self, row: usize, field_idx: usize, value: f32)

Writes an f32 (FLOAT) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_f64(&mut self, row: usize, field_idx: usize, value: f64)

Writes an f64 (DOUBLE) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_interval( &mut self, row: usize, field_idx: usize, value: DuckInterval, )

Writes an INTERVAL value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_blob(&mut self, row: usize, field_idx: usize, value: &[u8])

Writes a BLOB (binary) value to field field_idx at row row.

§Safety

See write_i8.

Source

pub unsafe fn write_uuid(&mut self, row: usize, field_idx: usize, value: i128)

Writes a UUID value (as i128) to field field_idx at row row.

§Safety

See write_i8.

Source

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.

Source

pub unsafe fn write_date( &mut self, row: usize, field_idx: usize, days_since_epoch: i32, )

Writes a DATE value (days since epoch) to field field_idx at row row.

Semantic alias for write_i32.

§Safety

See write_i8.

Source

pub unsafe fn write_timestamp( &mut self, row: usize, field_idx: usize, micros_since_epoch: i64, )

Writes a TIMESTAMP value (microseconds since epoch) to field field_idx at row row.

Semantic alias for write_i64.

§Safety

See write_i8.

Source

pub unsafe fn write_time( &mut self, row: usize, field_idx: usize, micros_since_midnight: i64, )

Writes a TIME value (microseconds since midnight) to field field_idx at row row.

Semantic alias for write_i64.

§Safety

See write_i8.

Source

pub unsafe fn set_null(&mut self, row: usize, field_idx: usize)

Marks field field_idx at row row as NULL.

§Safety
  • row must be within the vector’s capacity.
§Panics

Panics if field_idx >= field_count.

Source

pub unsafe fn set_valid(&mut self, row: usize, field_idx: usize)

Marks field field_idx at row row as valid (non-NULL).

Use this to undo a previous set_null call.

§Safety
  • row must be within the vector’s capacity.
§Panics

Panics if field_idx >= field_count.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.