vortex_btrblocks/schemes/binary/
zstd.rs1use vortex_array::ArrayId;
7use vortex_array::ArrayRef;
8use vortex_array::Canonical;
9use vortex_array::ExecutionCtx;
10use vortex_array::IntoArray;
11use vortex_array::VTable;
12use vortex_compressor::scheme::CompressionEstimate;
13use vortex_compressor::scheme::DeferredEstimate;
14use vortex_error::VortexResult;
15
16use crate::ArrayAndStats;
17use crate::CascadingCompressor;
18use crate::CompressorContext;
19use crate::Scheme;
20
21#[derive(Debug, Copy, Clone, PartialEq, Eq)]
23pub struct ZstdScheme;
24
25impl Scheme for ZstdScheme {
26 fn scheme_name(&self) -> &'static str {
27 "vortex.binary.zstd"
28 }
29
30 fn matches(&self, canonical: &Canonical) -> bool {
31 canonical.dtype().is_binary()
32 }
33
34 fn produced_encodings(&self) -> Vec<ArrayId> {
35 vec![vortex_zstd::Zstd.id()]
36 }
37
38 fn expected_compression_ratio(
39 &self,
40 _data: &ArrayAndStats,
41 _compress_ctx: CompressorContext,
42 _exec_ctx: &mut ExecutionCtx,
43 ) -> CompressionEstimate {
44 CompressionEstimate::Deferred(DeferredEstimate::Sample)
45 }
46
47 fn compress(
48 &self,
49 _compressor: &CascadingCompressor,
50 data: &ArrayAndStats,
51 _compress_ctx: CompressorContext,
52 exec_ctx: &mut ExecutionCtx,
53 ) -> VortexResult<ArrayRef> {
54 let compacted = data
55 .array_as_varbinview()
56 .into_owned()
57 .compact_buffers(exec_ctx)?;
58 Ok(
59 vortex_zstd::Zstd::from_var_bin_view_without_dict(&compacted, 3, 8192, exec_ctx)?
60 .into_array(),
61 )
62 }
63}