vortex_array/arrays/constant/
variants.rs

1use vortex_dtype::FieldName;
2use vortex_error::VortexResult;
3
4use crate::arrays::constant::ConstantArray;
5use crate::variants::{
6    BinaryArrayTrait, BoolArrayTrait, ExtensionArrayTrait, ListArrayTrait, NullArrayTrait,
7    PrimitiveArrayTrait, StructArrayTrait, Utf8ArrayTrait,
8};
9use crate::{Array, ArrayRef, ArrayVariantsImpl};
10
11/// Constant arrays support all DTypes
12impl ArrayVariantsImpl for ConstantArray {
13    fn _as_null_typed(&self) -> Option<&dyn NullArrayTrait> {
14        Some(self)
15    }
16
17    fn _as_bool_typed(&self) -> Option<&dyn BoolArrayTrait> {
18        Some(self)
19    }
20
21    fn _as_primitive_typed(&self) -> Option<&dyn PrimitiveArrayTrait> {
22        Some(self)
23    }
24
25    fn _as_utf8_typed(&self) -> Option<&dyn Utf8ArrayTrait> {
26        Some(self)
27    }
28
29    fn _as_binary_typed(&self) -> Option<&dyn BinaryArrayTrait> {
30        Some(self)
31    }
32
33    fn _as_struct_typed(&self) -> Option<&dyn StructArrayTrait> {
34        Some(self)
35    }
36
37    fn _as_list_typed(&self) -> Option<&dyn ListArrayTrait> {
38        Some(self)
39    }
40
41    fn _as_extension_typed(&self) -> Option<&dyn ExtensionArrayTrait> {
42        Some(self)
43    }
44}
45
46impl NullArrayTrait for ConstantArray {}
47
48impl BoolArrayTrait for ConstantArray {}
49
50impl PrimitiveArrayTrait for ConstantArray {}
51
52impl Utf8ArrayTrait for ConstantArray {}
53
54impl BinaryArrayTrait for ConstantArray {}
55
56impl StructArrayTrait for ConstantArray {
57    fn maybe_null_field_by_idx(&self, idx: usize) -> VortexResult<ArrayRef> {
58        self.scalar()
59            .as_struct()
60            .field_by_idx(idx)
61            .map(|scalar| ConstantArray::new(scalar, self.len()).into_array())
62    }
63
64    fn project(&self, projection: &[FieldName]) -> VortexResult<ArrayRef> {
65        Ok(
66            ConstantArray::new(self.scalar().as_struct().project(projection)?, self.len())
67                .into_array(),
68        )
69    }
70}
71
72impl ListArrayTrait for ConstantArray {}
73
74impl ExtensionArrayTrait for ConstantArray {
75    fn storage_data(&self) -> ArrayRef {
76        ConstantArray::new(self.scalar().as_extension().storage(), self.len()).into_array()
77    }
78}