This repository has been archived by the owner on Feb 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 221
/
struct_.rs
61 lines (49 loc) · 1.41 KB
/
struct_.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use crate::array::{Array, StructArray};
use crate::error::Result;
use crate::{array::MutableArray, datatypes::DataType};
use super::make_mutable;
#[derive(Debug)]
pub struct DynMutableStructArray {
data_type: DataType,
pub inner: Vec<Box<dyn MutableArray>>,
}
impl DynMutableStructArray {
pub fn try_with_capacity(data_type: DataType, capacity: usize) -> Result<Self> {
let inners = match data_type.to_logical_type() {
DataType::Struct(inner) => inner,
_ => unreachable!(),
};
let inner = inners
.iter()
.map(|f| make_mutable(f.data_type(), capacity))
.collect::<Result<Vec<_>>>()?;
Ok(Self { data_type, inner })
}
}
impl MutableArray for DynMutableStructArray {
fn data_type(&self) -> &DataType {
&self.data_type
}
fn len(&self) -> usize {
self.inner[0].len()
}
fn validity(&self) -> Option<&crate::bitmap::MutableBitmap> {
None
}
fn as_box(&mut self) -> Box<dyn Array> {
let inner = self.inner.iter_mut().map(|x| x.as_arc()).collect();
Box::new(StructArray::new(self.data_type.clone(), inner, None))
}
fn as_any(&self) -> &dyn std::any::Any {
self
}
fn as_mut_any(&mut self) -> &mut dyn std::any::Any {
self
}
fn push_null(&mut self) {
todo!()
}
fn shrink_to_fit(&mut self) {
todo!()
}
}