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