vortex_array/arrays/constant/
variants.rs1use 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
11impl 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}