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, DecimalArrayTrait, ExtensionArrayTrait, ListArrayTrait,
7 NullArrayTrait, 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 fn _as_decimal_typed(&self) -> Option<&dyn DecimalArrayTrait> {
46 Some(self)
47 }
48}
49
50impl NullArrayTrait for ConstantArray {}
51
52impl BoolArrayTrait for ConstantArray {}
53
54impl PrimitiveArrayTrait for ConstantArray {}
55
56impl Utf8ArrayTrait for ConstantArray {}
57
58impl BinaryArrayTrait for ConstantArray {}
59
60impl DecimalArrayTrait for ConstantArray {}
61
62impl StructArrayTrait for ConstantArray {
63 fn maybe_null_field_by_idx(&self, idx: usize) -> VortexResult<ArrayRef> {
64 self.scalar()
65 .as_struct()
66 .field_by_idx(idx)
67 .map(|scalar| ConstantArray::new(scalar, self.len()).into_array())
68 }
69
70 fn project(&self, projection: &[FieldName]) -> VortexResult<ArrayRef> {
71 Ok(
72 ConstantArray::new(self.scalar().as_struct().project(projection)?, self.len())
73 .into_array(),
74 )
75 }
76}
77
78impl ListArrayTrait for ConstantArray {}
79
80impl ExtensionArrayTrait for ConstantArray {
81 fn storage_data(&self) -> ArrayRef {
82 ConstantArray::new(self.scalar().as_extension().storage(), self.len()).into_array()
83 }
84}