arrow_array::builder::generic_list_builder

Struct GenericListBuilder

Source
pub struct GenericListBuilder<OffsetSize: OffsetSizeTrait, T: ArrayBuilder> {
    offsets_builder: BufferBuilder<OffsetSize>,
    null_buffer_builder: NullBufferBuilder,
    values_builder: T,
    field: Option<FieldRef>,
}
Expand description

Builder for GenericListArray

Use ListBuilder to build ListArrays and LargeListBuilder to build LargeListArrays.

§Example

Here is code that constructs a ListArray with the contents: [[A,B,C], [], NULL, [D], [NULL, F]]

let values_builder = StringBuilder::new();
let mut builder = ListBuilder::new(values_builder);

// [A, B, C]
builder.values().append_value("A");
builder.values().append_value("B");
builder.values().append_value("C");
builder.append(true);

// [ ] (empty list)
builder.append(true);

// Null
builder.values().append_value("?"); // irrelevant
builder.append(false);

// [D]
builder.values().append_value("D");
builder.append(true);

// [NULL, F]
builder.values().append_null();
builder.values().append_value("F");
builder.append(true);

// Build the array
let array = builder.finish();

// Values is a string array
// "A", "B" "C", "?", "D", NULL, "F"
assert_eq!(
  array.values().as_ref(),
  &StringArray::from(vec![
    Some("A"), Some("B"), Some("C"),
    Some("?"), Some("D"), None,
    Some("F")
  ])
);

// Offsets are indexes into the values array
assert_eq!(
  array.value_offsets(),
  &[0, 3, 3, 4, 5, 7]
);

Fields§

§offsets_builder: BufferBuilder<OffsetSize>§null_buffer_builder: NullBufferBuilder§values_builder: T§field: Option<FieldRef>

Implementations§

Source§

impl<OffsetSize: OffsetSizeTrait, T: ArrayBuilder> GenericListBuilder<OffsetSize, T>

Source

pub fn new(values_builder: T) -> Self

Creates a new GenericListBuilder from a given values array builder

Source

pub fn with_capacity(values_builder: T, capacity: usize) -> Self

Creates a new GenericListBuilder from a given values array builder capacity is the number of items to pre-allocate space for in this builder

Source

pub fn with_field(self, field: impl Into<FieldRef>) -> Self

Override the field passed to GenericListArray::new

By default a nullable field is created with the name item

Note: Self::finish and Self::finish_cloned will panic if the field’s data type does not match that of T

Source§

impl<OffsetSize: OffsetSizeTrait, T> GenericListBuilder<OffsetSize, T>
where T: 'static + ArrayBuilder,

Source

pub fn values(&mut self) -> &mut T

Returns the child array builder as a mutable reference.

This mutable reference can be used to append values into the child array builder, but you must call append to delimit each distinct list value.

Source

pub fn values_ref(&self) -> &T

Returns the child array builder as an immutable reference

Source

pub fn append(&mut self, is_valid: bool)

Finish the current variable-length list array slot

§Panics

Panics if the length of Self::values exceeds OffsetSize::MAX

Source

fn next_offset(&self) -> OffsetSize

Returns the next offset

§Panics

Panics if the length of Self::values exceeds OffsetSize::MAX

Source

pub fn append_value<I, V>(&mut self, i: I)
where T: Extend<Option<V>>, I: IntoIterator<Item = Option<V>>,

Append a value to this GenericListBuilder

let mut builder = ListBuilder::new(Int32Builder::new());

builder.append_value([Some(1), Some(2), Some(3)]);
builder.append_value([]);
builder.append_value([None]);

let array = builder.finish();
assert_eq!(array.len(), 3);

assert_eq!(array.value_offsets(), &[0, 3, 3, 4]);
let values = array.values().as_primitive::<Int32Type>();
assert_eq!(values, &Int32Array::from(vec![Some(1), Some(2), Some(3), None]));

This is an alternative API to appending directly to Self::values and delimiting the result with Self::append

let mut builder = ListBuilder::new(Int32Builder::new());

builder.values().append_value(1);
builder.values().append_value(2);
builder.values().append_value(3);
builder.append(true);
builder.append(true);
builder.values().append_null();
builder.append(true);

let array = builder.finish();
assert_eq!(array.len(), 3);

assert_eq!(array.value_offsets(), &[0, 3, 3, 4]);
let values = array.values().as_primitive::<Int32Type>();
assert_eq!(values, &Int32Array::from(vec![Some(1), Some(2), Some(3), None]));
Source

pub fn append_null(&mut self)

Append a null to this GenericListBuilder

See Self::append_value for an example use.

Source

pub fn append_option<I, V>(&mut self, i: Option<I>)
where T: Extend<Option<V>>, I: IntoIterator<Item = Option<V>>,

Appends an optional value into this GenericListBuilder

If Some calls Self::append_value otherwise calls Self::append_null

Source

pub fn finish(&mut self) -> GenericListArray<OffsetSize>

Builds the GenericListArray and reset this builder.

Source

pub fn finish_cloned(&self) -> GenericListArray<OffsetSize>

Builds the GenericListArray without resetting the builder.

Source

pub fn offsets_slice(&self) -> &[OffsetSize]

Returns the current offsets buffer as a slice

Source

pub fn validity_slice(&self) -> Option<&[u8]>

Returns the current null buffer as a slice

Trait Implementations§

Source§

impl<OffsetSize: OffsetSizeTrait, T> ArrayBuilder for GenericListBuilder<OffsetSize, T>
where T: 'static + ArrayBuilder,

Source§

fn as_any(&self) -> &dyn Any

Returns the builder as a non-mutable Any reference.

Source§

fn as_any_mut(&mut self) -> &mut dyn Any

Returns the builder as a mutable Any reference.

Source§

fn into_box_any(self: Box<Self>) -> Box<dyn Any>

Returns the boxed builder as a box of Any.

Source§

fn len(&self) -> usize

Returns the number of array slots in the builder

Source§

fn finish(&mut self) -> ArrayRef

Builds the array and reset this builder.

Source§

fn finish_cloned(&self) -> ArrayRef

Builds the array without resetting the builder.

Source§

fn is_empty(&self) -> bool

Returns whether number of array slots is zero
Source§

impl<OffsetSize: Debug + OffsetSizeTrait, T: Debug + ArrayBuilder> Debug for GenericListBuilder<OffsetSize, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<O: OffsetSizeTrait, T: ArrayBuilder + Default> Default for GenericListBuilder<O, T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<O, B, V, E> Extend<Option<V>> for GenericListBuilder<O, B>
where O: OffsetSizeTrait, B: ArrayBuilder + Extend<E>, V: IntoIterator<Item = E>,

Source§

fn extend<T: IntoIterator<Item = Option<V>>>(&mut self, iter: T)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more

Auto Trait Implementations§

§

impl<OffsetSize, T> Freeze for GenericListBuilder<OffsetSize, T>
where T: Freeze,

§

impl<OffsetSize, T> RefUnwindSafe for GenericListBuilder<OffsetSize, T>
where T: RefUnwindSafe, OffsetSize: RefUnwindSafe,

§

impl<OffsetSize, T> Send for GenericListBuilder<OffsetSize, T>

§

impl<OffsetSize, T> Sync for GenericListBuilder<OffsetSize, T>

§

impl<OffsetSize, T> Unpin for GenericListBuilder<OffsetSize, T>
where T: Unpin, OffsetSize: Unpin,

§

impl<OffsetSize, T> UnwindSafe for GenericListBuilder<OffsetSize, T>
where T: UnwindSafe, OffsetSize: UnwindSafe,

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.
§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,