vortex_compressor/builtins/constant/
bool.rs1use vortex_array::ArrayRef;
7use vortex_array::Canonical;
8use vortex_error::VortexResult;
9
10use crate::CascadingCompressor;
11use crate::builtins::BoolConstantScheme;
12use crate::builtins::constant::compress_constant_array_with_validity;
13use crate::ctx::CompressorContext;
14use crate::estimate::CompressionEstimate;
15use crate::scheme::Scheme;
16use crate::stats::ArrayAndStats;
17
18impl Scheme for BoolConstantScheme {
19 fn scheme_name(&self) -> &'static str {
20 "vortex.bool.constant"
21 }
22
23 fn matches(&self, canonical: &Canonical) -> bool {
24 matches!(canonical, Canonical::Bool(_))
25 }
26
27 fn expected_compression_ratio(
28 &self,
29 data: &mut ArrayAndStats,
30 ctx: CompressorContext,
31 ) -> CompressionEstimate {
32 if ctx.is_sample() {
35 return CompressionEstimate::Skip;
36 }
37
38 let array_len = data.array().len();
39 let stats = data.bool_stats();
40
41 if stats.value_count() == 0 {
43 debug_assert_eq!(stats.null_count() as usize, array_len);
44 return CompressionEstimate::AlwaysUse;
45 }
46
47 if stats.is_constant() {
48 return CompressionEstimate::AlwaysUse;
49 }
50
51 CompressionEstimate::Skip
52 }
53
54 fn compress(
55 &self,
56 _compressor: &CascadingCompressor,
57 data: &mut ArrayAndStats,
58 _ctx: CompressorContext,
59 ) -> VortexResult<ArrayRef> {
60 compress_constant_array_with_validity(data.array())
61 }
62}