Skip to main content

ArrayBuilder

Trait ArrayBuilder 

pub trait ArrayBuilder:
    Any
    + Send
    + Sync {
    // Required methods
    fn len(&self) -> usize;
    fn finish(&mut self) -> Arc<dyn Array> ;
    fn finish_cloned(&self) -> Arc<dyn Array> ;
    fn as_any(&self) -> &(dyn Any + 'static);
    fn as_any_mut(&mut self) -> &mut (dyn Any + 'static);
    fn into_box_any(self: Box<Self>) -> Box<dyn Any>;

    // Provided methods
    fn is_empty(&self) -> bool { ... }
    fn finish_preserve_values(&mut self) -> Arc<dyn Array>  { ... }
}
Expand description

Trait for dealing with different array builders at runtime

§Example

// Create

let mut data_builders: Vec<Box<dyn ArrayBuilder>> = vec![
    Box::new(Float64Builder::new()),
    Box::new(Int64Builder::new()),
    Box::new(StringBuilder::new()),
];

// Fill
data_builders[0]
    .as_any_mut()
    .downcast_mut::<Float64Builder>()
    .unwrap()
    .append_value(3.14);
data_builders[1]
    .as_any_mut()
    .downcast_mut::<Int64Builder>()
    .unwrap()
    .append_value(-1);
data_builders[2]
    .as_any_mut()
    .downcast_mut::<StringBuilder>()
    .unwrap()
    .append_value("🍎");

// Finish
let array_refs: Vec<ArrayRef> = data_builders
    .iter_mut()
    .map(|builder| builder.finish())
    .collect();
assert_eq!(array_refs[0].len(), 1);
assert_eq!(array_refs[1].is_null(0), false);
assert_eq!(
    array_refs[2]
        .as_any()
        .downcast_ref::<StringArray>()
        .unwrap()
        .value(0),
    "🍎"
);

Required Methods§

fn len(&self) -> usize

Returns the number of array slots in the builder

fn finish(&mut self) -> Arc<dyn Array>

Builds the array

fn finish_cloned(&self) -> Arc<dyn Array>

Builds the array without resetting the underlying builder.

fn as_any(&self) -> &(dyn Any + 'static)

Returns the builder as a non-mutable Any reference.

This is most useful when one wants to call non-mutable APIs on a specific builder type. In this case, one can first cast this into a Any, and then use downcast_ref to get a reference on the specific builder.

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Returns the builder as a mutable Any reference.

This is most useful when one wants to call mutable APIs on a specific builder type. In this case, one can first cast this into a Any, and then use downcast_mut to get a reference on the specific builder.

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

Returns the boxed builder as a box of Any.

Provided Methods§

fn is_empty(&self) -> bool

Returns whether number of array slots is zero

fn finish_preserve_values(&mut self) -> Arc<dyn Array>

Builds the array without resetting the values builder.

This is relevant for dictionary builders but also for composite builders. Those are not affected directly, but will call the corresponding method on their constituent builders.

The default implementation just calls finish which is sufficient for all but the above mentioned builders.

Trait Implementations§

§

impl ArrayBuilder for Box<dyn ArrayBuilder>

§

fn len(&self) -> usize

Returns the number of array slots in the builder
§

fn is_empty(&self) -> bool

Returns whether number of array slots is zero
§

fn finish(&mut self) -> Arc<dyn Array>

Builds the array
§

fn finish_cloned(&self) -> Arc<dyn Array>

Builds the array without resetting the underlying builder.
§

fn finish_preserve_values(&mut self) -> Arc<dyn Array>

Builds the array without resetting the values builder. Read more
§

fn as_any(&self) -> &(dyn Any + 'static)

Returns the builder as a non-mutable Any reference. Read more
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Returns the builder as a mutable Any reference. Read more
§

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

Returns the boxed builder as a box of Any.

Implementations on Foreign Types§

§

impl ArrayBuilder for Box<dyn ArrayBuilder>

§

fn len(&self) -> usize

§

fn is_empty(&self) -> bool

§

fn finish(&mut self) -> Arc<dyn Array>

§

fn finish_cloned(&self) -> Arc<dyn Array>

§

fn finish_preserve_values(&mut self) -> Arc<dyn Array>

§

fn as_any(&self) -> &(dyn Any + 'static)

§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

§

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

Implementors§