SuperArray

Struct SuperArray 

Source
pub struct SuperArray { /* private fields */ }
Expand description

§SuperArray

Higher-order container for multiple immutable FieldArray segments.

§Description

  • Stores an ordered sequence of FieldArray chunks, each with identical field metadata.
  • Equivalent to Apache Arrow’s ChunkedArray when sent over FFI, where it is treated as a single logical column.
  • It can also serve as an unbounded or continuously growing collection of segments, making it useful for streaming ingestion and partitioned storage.
  • Chunk lengths may vary without restriction.

§Example

// Create from multiple chunks with matching metadata
let sa = SuperArray::from_chunks(vec![fa("col", &[1, 2], 0), fa("col", &[3], 0)]);

assert_eq!(sa.len(), 3);         // total rows across chunks
assert_eq!(sa.n_chunks(), 2);    // number of chunks
assert_eq!(sa.field().name, "col");

Implementations§

Source§

impl SuperArray

Source

pub fn new() -> Self

Constructs an empty ChunkedArray.

Source

pub fn from_field_array_chunks(chunks: Vec<FieldArray>) -> Self

Constructs a ChunkedArray from FieldArray chunks. Panics if chunks is empty or metadata/type/nullable mismatch is found.

Examples found in repository?
examples/broadcasting/test_broadcasting.rs (line 369)
357fn test_super_array_broadcasting() {
358    #[cfg(feature = "chunked")]
359    {
360        println!("┌─ Test 11: SuperArray (Chunked) Broadcasting");
361        println!("│  Operation: SuperArray{{[1,2],[3,4]}} * SuperArray{{[2,2],[2,2]}}");
362        println!("│  Expected:  SuperArray{{[2,4],[6,8]}}");
363
364        // Create chunked arrays (multiple field array chunks)
365        let chunk1_a = Array::from_int32(IntegerArray::from_slice(&vec64![1, 2]));
366        let chunk2_a = Array::from_int32(IntegerArray::from_slice(&vec64![3, 4]));
367        let fa1 = minarrow::FieldArray::from_arr("chunk1", chunk1_a);
368        let fa2 = minarrow::FieldArray::from_arr("chunk1", chunk2_a);
369        let super_arr1 = SuperArray::from_field_array_chunks(vec![fa1, fa2]);
370
371        let chunk1_b = Array::from_int32(IntegerArray::from_slice(&vec64![2, 2]));
372        let chunk2_b = Array::from_int32(IntegerArray::from_slice(&vec64![2, 2]));
373        let fa3 = minarrow::FieldArray::from_arr("chunk1", chunk1_b);
374        let fa4 = minarrow::FieldArray::from_arr("chunk1", chunk2_b);
375        let super_arr2 = SuperArray::from_field_array_chunks(vec![fa3, fa4]);
376
377        match Value::SuperArray(Arc::new(super_arr1)) * Value::SuperArray(Arc::new(super_arr2)) {
378            Ok(Value::SuperArray(result)) => {
379                println!("│  Result with {} chunks:", result.len());
380                for i in 0..result.len() {
381                    if let Some(fa) = result.chunk(i) {
382                        if let Array::NumericArray(NumericArray::Int32(arr)) = &fa.array {
383                            println!("│    Chunk {}: {:?}", i, arr.data.as_slice());
384                        }
385                    }
386                }
387                println!("└─ ✓ Passed\n");
388            }
389            Ok(other) => println!("└─ ✗ Error: Unexpected result type {:?}\n", other),
390            Err(e) => println!("└─ ✗ Error: {:?}\n", e),
391        }
392    }
393
394    #[cfg(not(feature = "chunked"))]
395    {
396        println!("┌─ Test 11: SuperArray (Chunked) Broadcasting");
397        println!("└─ ⊘ Skipped (chunked feature not enabled)\n");
398    }
399}
Source

pub fn from_chunks(chunks: Vec<FieldArray>) -> Self

Construct from Vec<FieldArray>.

Source

pub fn from_slices(slices: &[ArrayV], field: Arc<Field>) -> Self

Materialises a ChunkedArray from an existing slice of ArrayView tuples, using the provided field metadata (applied to all slices).

Panics if the slice list is empty, or if any slice’s type or nullability does not match the provided field.

Source

pub fn slice(&self, offset: usize, len: usize) -> SuperArrayV

Returns a zero-copy view of this chunked array over the window [offset..offset+len).

If the chunks are fragmented in memory, access patterns may result in degraded cache locality and reduced SIMD optimisation.

Source

pub fn copy_to_array(&self) -> Array

Materialises a contiguous Array holding all rows.

Source

pub fn field(&self) -> &Field

Returns the field metadata from the first chunk (guaranteed by constructor).

Source

pub fn arrow_type(&self) -> ArrowType

Returns the Arrow physical type.

Source

pub fn is_nullable(&self) -> bool

Returns the nullability flag.

Source

pub fn n_chunks(&self) -> usize

Returns the number of logical chunks.

Source

pub fn len(&self) -> usize

Returns total logical length (sum of all chunk lengths).

Examples found in repository?
examples/broadcasting/test_broadcasting.rs (line 379)
357fn test_super_array_broadcasting() {
358    #[cfg(feature = "chunked")]
359    {
360        println!("┌─ Test 11: SuperArray (Chunked) Broadcasting");
361        println!("│  Operation: SuperArray{{[1,2],[3,4]}} * SuperArray{{[2,2],[2,2]}}");
362        println!("│  Expected:  SuperArray{{[2,4],[6,8]}}");
363
364        // Create chunked arrays (multiple field array chunks)
365        let chunk1_a = Array::from_int32(IntegerArray::from_slice(&vec64![1, 2]));
366        let chunk2_a = Array::from_int32(IntegerArray::from_slice(&vec64![3, 4]));
367        let fa1 = minarrow::FieldArray::from_arr("chunk1", chunk1_a);
368        let fa2 = minarrow::FieldArray::from_arr("chunk1", chunk2_a);
369        let super_arr1 = SuperArray::from_field_array_chunks(vec![fa1, fa2]);
370
371        let chunk1_b = Array::from_int32(IntegerArray::from_slice(&vec64![2, 2]));
372        let chunk2_b = Array::from_int32(IntegerArray::from_slice(&vec64![2, 2]));
373        let fa3 = minarrow::FieldArray::from_arr("chunk1", chunk1_b);
374        let fa4 = minarrow::FieldArray::from_arr("chunk1", chunk2_b);
375        let super_arr2 = SuperArray::from_field_array_chunks(vec![fa3, fa4]);
376
377        match Value::SuperArray(Arc::new(super_arr1)) * Value::SuperArray(Arc::new(super_arr2)) {
378            Ok(Value::SuperArray(result)) => {
379                println!("│  Result with {} chunks:", result.len());
380                for i in 0..result.len() {
381                    if let Some(fa) = result.chunk(i) {
382                        if let Array::NumericArray(NumericArray::Int32(arr)) = &fa.array {
383                            println!("│    Chunk {}: {:?}", i, arr.data.as_slice());
384                        }
385                    }
386                }
387                println!("└─ ✓ Passed\n");
388            }
389            Ok(other) => println!("└─ ✗ Error: Unexpected result type {:?}\n", other),
390            Err(e) => println!("└─ ✗ Error: {:?}\n", e),
391        }
392    }
393
394    #[cfg(not(feature = "chunked"))]
395    {
396        println!("┌─ Test 11: SuperArray (Chunked) Broadcasting");
397        println!("└─ ⊘ Skipped (chunked feature not enabled)\n");
398    }
399}
Source

pub fn is_empty(&self) -> bool

Returns true if the array has no chunks or all chunks are empty.

Source

pub fn chunks(&self) -> &[FieldArray]

Returns a read-only reference to all underlying chunks.

Source

pub fn chunks_mut(&mut self) -> &mut [FieldArray]

Returns a mutable reference to the underlying chunks.

Source

pub fn chunk(&self, idx: usize) -> Option<&FieldArray>

Returns a reference to a specific chunk, if it exists.

Examples found in repository?
examples/broadcasting/test_broadcasting.rs (line 381)
357fn test_super_array_broadcasting() {
358    #[cfg(feature = "chunked")]
359    {
360        println!("┌─ Test 11: SuperArray (Chunked) Broadcasting");
361        println!("│  Operation: SuperArray{{[1,2],[3,4]}} * SuperArray{{[2,2],[2,2]}}");
362        println!("│  Expected:  SuperArray{{[2,4],[6,8]}}");
363
364        // Create chunked arrays (multiple field array chunks)
365        let chunk1_a = Array::from_int32(IntegerArray::from_slice(&vec64![1, 2]));
366        let chunk2_a = Array::from_int32(IntegerArray::from_slice(&vec64![3, 4]));
367        let fa1 = minarrow::FieldArray::from_arr("chunk1", chunk1_a);
368        let fa2 = minarrow::FieldArray::from_arr("chunk1", chunk2_a);
369        let super_arr1 = SuperArray::from_field_array_chunks(vec![fa1, fa2]);
370
371        let chunk1_b = Array::from_int32(IntegerArray::from_slice(&vec64![2, 2]));
372        let chunk2_b = Array::from_int32(IntegerArray::from_slice(&vec64![2, 2]));
373        let fa3 = minarrow::FieldArray::from_arr("chunk1", chunk1_b);
374        let fa4 = minarrow::FieldArray::from_arr("chunk1", chunk2_b);
375        let super_arr2 = SuperArray::from_field_array_chunks(vec![fa3, fa4]);
376
377        match Value::SuperArray(Arc::new(super_arr1)) * Value::SuperArray(Arc::new(super_arr2)) {
378            Ok(Value::SuperArray(result)) => {
379                println!("│  Result with {} chunks:", result.len());
380                for i in 0..result.len() {
381                    if let Some(fa) = result.chunk(i) {
382                        if let Array::NumericArray(NumericArray::Int32(arr)) = &fa.array {
383                            println!("│    Chunk {}: {:?}", i, arr.data.as_slice());
384                        }
385                    }
386                }
387                println!("└─ ✓ Passed\n");
388            }
389            Ok(other) => println!("└─ ✗ Error: Unexpected result type {:?}\n", other),
390            Err(e) => println!("└─ ✗ Error: {:?}\n", e),
391        }
392    }
393
394    #[cfg(not(feature = "chunked"))]
395    {
396        println!("┌─ Test 11: SuperArray (Chunked) Broadcasting");
397        println!("└─ ⊘ Skipped (chunked feature not enabled)\n");
398    }
399}
Source

pub fn push(&mut self, chunk: FieldArray)

Validates and appends a new chunk.

§Panics

If the chunk does not match the expected type or nullability.

Trait Implementations§

Source§

impl Add for SuperArray

Available on crate feature chunked only.
Source§

type Output = Result<SuperArray, MinarrowError>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
Source§

impl ByteSize for SuperArray

Available on crate feature chunked only.
Source§

fn est_bytes(&self) -> usize

Returns the estimated byte size of this object in memory. Read more
Source§

impl Clone for SuperArray

Source§

fn clone(&self) -> SuperArray

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Concatenate for SuperArray

Source§

fn concat(self, other: Self) -> Result<Self, MinarrowError>

Concatenates two SuperArrays by appending all chunks from other to self.

§Requirements
  • Both SuperArrays must have the same field metadata (name, type, nullability)
§Returns

A new SuperArray containing all chunks from self followed by all chunks from other

§Errors
  • IncompatibleTypeError if field metadata doesn’t match
Source§

impl Debug for SuperArray

Source§

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

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

impl Default for SuperArray

Source§

fn default() -> Self

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

impl Display for SuperArray

Source§

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

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

impl Div for SuperArray

Available on crate feature chunked only.
Source§

type Output = Result<SuperArray, MinarrowError>

The resulting type after applying the / operator.
Source§

fn div(self, rhs: Self) -> Self::Output

Performs the / operation. Read more
Source§

impl From<FieldArray> for SuperArray

Source§

fn from(field_array: FieldArray) -> Self

Converts to this type from the input type.
Source§

impl From<SuperArray> for SuperArrayV

SuperArray -> SuperArrayV conversion

Source§

fn from(super_array: SuperArray) -> Self

Converts to this type from the input type.
Source§

impl From<SuperArray> for Value

Available on crate feature chunked only.
Source§

fn from(v: SuperArray) -> Self

Converts to this type from the input type.
Source§

impl FromIterator<FieldArray> for SuperArray

Source§

fn from_iter<T: IntoIterator<Item = FieldArray>>(iter: T) -> Self

Creates a value from an iterator. Read more
Source§

impl Mul for SuperArray

Available on crate feature chunked only.
Source§

type Output = Result<SuperArray, MinarrowError>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: Self) -> Self::Output

Performs the * operation. Read more
Source§

impl PartialEq for SuperArray

Source§

fn eq(&self, other: &SuperArray) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Rem for SuperArray

Available on crate feature chunked only.
Source§

type Output = Result<SuperArray, MinarrowError>

The resulting type after applying the % operator.
Source§

fn rem(self, rhs: Self) -> Self::Output

Performs the % operation. Read more
Source§

impl Shape for SuperArray

Source§

fn shape(&self) -> ShapeDim

Returns arbitrary Shape dimension for any data shape
Source§

fn shape_1d(&self) -> usize

Returns the first dimension shape Read more
Source§

fn shape_2d(&self) -> (usize, usize)

Returns the first and second dimension shapes Read more
Source§

fn shape_3d(&self) -> (usize, usize, usize)

Returns the first, second and third dimension shapes Read more
Source§

fn shape_4d(&self) -> (usize, usize, usize, usize)

Returns the first, second, third and fourth dimension shapes Read more
Source§

impl Sub for SuperArray

Available on crate feature chunked only.
Source§

type Output = Result<SuperArray, MinarrowError>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more
Source§

impl TryFrom<Value> for SuperArray

Available on crate feature chunked only.
Source§

type Error = MinarrowError

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

fn try_from(v: Value) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl StructuralPartialEq for SuperArray

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> CustomValue for T
where T: Any + Send + Sync + Clone + PartialEq + Debug,

Source§

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

Downcasts the type as Any
Source§

fn deep_clone(&self) -> Arc<dyn CustomValue>

Returns a deep clone of the object. Read more
Source§

fn eq_box(&self, other: &(dyn CustomValue + 'static)) -> bool

Performs semantic equality on the boxed object. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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

impl<T> Key for T
where T: Clone,

Source§

fn align() -> usize

The alignment necessary for the key. Must return a power of two.
Source§

fn size(&self) -> usize

The size of the key in bytes.
Source§

unsafe fn init(&self, ptr: *mut u8)

Initialize the key in the given memory location. Read more
Source§

unsafe fn get<'a>(ptr: *const u8) -> &'a T

Get a reference to the key from the given memory location. Read more
Source§

unsafe fn drop_in_place(ptr: *mut u8)

Drop the key in place. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Print for T
where T: Display,

Source§

fn print(&self)
where Self: Display,

Source§

impl<T> ToCompactString for T
where T: Display,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> ToStringFallible for T
where T: Display,

Source§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

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

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T, Rhs, Output> NumOps<Rhs, Output> for T
where T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>,

Source§

impl<T> PlanCallbackArgs for T

Source§

impl<T> PlanCallbackOut for T