Struct VariantArrayBuilder
pub struct VariantArrayBuilder {
nulls: NullBufferBuilder,
metadata_builder: WritableMetadataBuilder,
metadata_offsets: Vec<usize>,
value_builder: ValueBuilder,
value_offsets: Vec<usize>,
fields: Fields,
}Expand description
A builder for VariantArray
This builder is used to construct a VariantArray and allows APIs for
adding metadata
This builder always creates a VariantArray using [BinaryViewArray] for both
the metadata and value fields.
§TODO
- Support shredding: https://github.com/apache/arrow-rs/issues/7895
§Example:
// Create a new VariantArrayBuilder with a capacity of 100 rows
let mut builder = VariantArrayBuilder::new(100);
// append variant values
builder.append_variant(Variant::from(42));
// append a null row (note not a Variant::Null)
builder.append_null();
// append an object to the builder using VariantBuilderExt methods directly
builder.new_object()
.with_field("foo", "bar")
.finish();
// bulk insert a list of values
// `Option::None` is a null value
builder.extend([None, Some(Variant::from("norm"))]);
// create the final VariantArray
let variant_array = builder.build();
assert_eq!(variant_array.len(), 5);
// // Access the values
// row 1 is not null and is an integer
assert!(!variant_array.is_null(0));
assert_eq!(variant_array.value(0), Variant::from(42i32));
// row 1 is null
assert!(variant_array.is_null(1));
// row 2 is not null and is an object
assert!(!variant_array.is_null(2));
let value = variant_array.value(2);
let obj = value.as_object().expect("expected object");
assert_eq!(obj.get("foo"), Some(Variant::from("bar")));
// row 3 is null
assert!(variant_array.is_null(3));
// row 4 is not null and is a short string
assert!(!variant_array.is_null(4));
let value = variant_array.value(4);
assert_eq!(value, Variant::ShortString(ShortString::try_new("norm").unwrap()));Fields§
§nulls: NullBufferBuilder§metadata_builder: WritableMetadataBuilder§metadata_offsets: Vec<usize>§value_builder: ValueBuilder§value_offsets: Vec<usize>§fields: FieldsImplementations§
§impl VariantArrayBuilder
impl VariantArrayBuilder
pub fn new(row_capacity: usize) -> VariantArrayBuilder
pub fn build(self) -> VariantArray
pub fn build(self) -> VariantArray
Build the final builder
pub fn append_null(&mut self)
pub fn append_null(&mut self)
Appends a null row to the builder.
pub fn append_variant(&mut self, variant: Variant<'_, '_>)
pub fn append_variant(&mut self, variant: Variant<'_, '_>)
Append the Variant to the builder as the next row
Trait Implementations§
§impl Debug for VariantArrayBuilder
impl Debug for VariantArrayBuilder
§impl<'m, 'v> Extend<Option<Variant<'m, 'v>>> for VariantArrayBuilder
impl<'m, 'v> Extend<Option<Variant<'m, 'v>>> for VariantArrayBuilder
Source§fn extend_one(&mut self, item: A)
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)
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
§impl VariantBuilderExt for VariantArrayBuilder
impl VariantBuilderExt for VariantArrayBuilder
§fn append_null(&mut self)
fn append_null(&mut self)
Appending NULL to a variant array produces an actual NULL value
§type State<'a> = ArrayBuilderState<'a>
where
VariantArrayBuilder: 'a
type State<'a> = ArrayBuilderState<'a> where VariantArrayBuilder: 'a
The builder specific state used by nested builders
§fn append_value<'m, 'v>(&mut self, value: impl Into<Variant<'m, 'v>>)
fn append_value<'m, 'v>(&mut self, value: impl Into<Variant<'m, 'v>>)
Appends a new variant value to this builder. See e.g.
VariantBuilder::append_value.§fn try_new_list(
&mut self,
) -> Result<ListBuilder<'_, <VariantArrayBuilder as VariantBuilderExt>::State<'_>>, ArrowError>
fn try_new_list( &mut self, ) -> Result<ListBuilder<'_, <VariantArrayBuilder as VariantBuilderExt>::State<'_>>, ArrowError>
Creates a nested list builder. See e.g.
VariantBuilder::new_list. Returns an error if
the nested builder cannot be created, see e.g. ObjectBuilder::try_new_list.§fn try_new_object(
&mut self,
) -> Result<ObjectBuilder<'_, <VariantArrayBuilder as VariantBuilderExt>::State<'_>>, ArrowError>
fn try_new_object( &mut self, ) -> Result<ObjectBuilder<'_, <VariantArrayBuilder as VariantBuilderExt>::State<'_>>, ArrowError>
Creates a nested object builder. See e.g.
VariantBuilder::new_object. Returns an error
if the nested builder cannot be created, see e.g. ObjectBuilder::try_new_object.§fn new_list(&mut self) -> ListBuilder<'_, Self::State<'_>>
fn new_list(&mut self) -> ListBuilder<'_, Self::State<'_>>
Creates a nested list builder. See e.g.
VariantBuilder::new_list. Panics if the nested
builder cannot be created, see e.g. ObjectBuilder::new_list.§fn new_object(&mut self) -> ObjectBuilder<'_, Self::State<'_>>
fn new_object(&mut self) -> ObjectBuilder<'_, Self::State<'_>>
Creates a nested object builder. See e.g.
VariantBuilder::new_object. Panics if the
nested builder cannot be created, see e.g. ObjectBuilder::new_object.Auto Trait Implementations§
impl !Freeze for VariantArrayBuilder
impl RefUnwindSafe for VariantArrayBuilder
impl Send for VariantArrayBuilder
impl Sync for VariantArrayBuilder
impl Unpin for VariantArrayBuilder
impl UnwindSafe for VariantArrayBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> JsonToVariant for Twhere
T: VariantBuilderExt,
impl<T> JsonToVariant for Twhere
T: VariantBuilderExt,
§fn append_json(&mut self, json: &str) -> Result<(), ArrowError>
fn append_json(&mut self, json: &str) -> Result<(), ArrowError>
Create a Variant from a JSON string