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