vortex_btrblocks/
temporal.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4//! Specialized compressor for DateTimeParts metadata.
5
6use 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
19/// Compress a temporal array into a `DateTimePartsArray`.
20pub 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}