vortex_btrblocks/
temporal.rs1use vortex_array::ArrayRef;
7use vortex_array::IntoArray;
8use vortex_array::ToCanonical;
9use vortex_array::arrays::TemporalArray;
10use vortex_datetime_parts::DateTimePartsArray;
11use vortex_datetime_parts::TemporalParts;
12use vortex_datetime_parts::split_temporal;
13use vortex_error::VortexResult;
14
15use crate::Compressor;
16use crate::MAX_CASCADE;
17use crate::integer::IntCompressor;
18
19pub fn compress_temporal(array: TemporalArray) -> VortexResult<ArrayRef> {
21 let dtype = array.dtype().clone();
22 let TemporalParts {
23 days,
24 seconds,
25 subseconds,
26 } = split_temporal(array)?;
27
28 let days =
29 IntCompressor::compress(&days.to_primitive().narrow()?, false, MAX_CASCADE - 1, &[])?;
30 let seconds = IntCompressor::compress(
31 &seconds.to_primitive().narrow()?,
32 false,
33 MAX_CASCADE - 1,
34 &[],
35 )?;
36 let subseconds = IntCompressor::compress(
37 &subseconds.to_primitive().narrow()?,
38 false,
39 MAX_CASCADE - 1,
40 &[],
41 )?;
42
43 Ok(DateTimePartsArray::try_new(dtype, days, seconds, subseconds)?.into_array())
44}