Struct arrow_array::types::IntervalMonthDayNanoType

source ·
pub struct IntervalMonthDayNanoType {}
Expand description

A “calendar” interval type in months, days, and nanoseconds.

§Representation

This type is stored as a single 128 bit integer, interpreted as three different signed integral fields:

  1. The number of months (32 bits)
  2. The number days (32 bits)
  3. The number of nanoseconds (64 bits).

Nanoseconds does not allow for leap seconds. Each field is independent (e.g. there is no constraint that the quantity of nanoseconds represents less than a day’s worth of time).

┌──────────────────────────────┬─────────────┬──────────────┐
│            Nanos             │    Days     │    Months    │
│          (64 bits)           │ (32 bits)   │  (32 bits)   │
└──────────────────────────────┴─────────────┴──────────────┘
  0                            63            95           127 bit offset

Please see the Arrow Spec for more details

§Note on Comparing and Ordering for Calendar Types

Values of IntervalMonthDayNanoType are compared using their binary representation, which can lead to surprising results.

Spans of time measured in calendar units are not fixed in absolute size (e.g. number of seconds) which makes defining comparisons and ordering non trivial. For example 1 month is 28 days for February but 1 month is 31 days in December.

This makes the seemingly simple operation of comparing two intervals complicated in practice. For example is 1 month more or less than 30 days? The answer depends on what month you are talking about.

This crate defines comparisons for calendar types using their binary representation which is fast and efficient, but leads to potentially surprising results.

For example a IntervalMonthDayNano of 1 month will compare as greater than a IntervalMonthDayNano of 100 days because the binary representation of 1 month is larger than the binary representation of 100 days.

Implementations§

source§

impl IntervalMonthDayNanoType

source

pub fn make_value( months: i32, days: i32, nanos: i64, ) -> <IntervalMonthDayNanoType as ArrowPrimitiveType>::Native

Creates a IntervalMonthDayNanoType::Native

§Arguments
  • months - The number of months (+/-) represented in this interval
  • days - The number of days (+/-) represented in this interval
  • nanos - The number of nanoseconds (+/-) represented in this interval
source

pub fn to_parts( i: <IntervalMonthDayNanoType as ArrowPrimitiveType>::Native, ) -> (i32, i32, i64)

Turns a IntervalMonthDayNanoType into a tuple of (months, days, nanos)

§Arguments
  • i - The IntervalMonthDayNanoType to convert

Trait Implementations§

source§

impl ArrowPrimitiveType for IntervalMonthDayNanoType

§

type Native = i128

Corresponding Rust native type for the primitive type.
source§

const DATA_TYPE: DataType = _

the corresponding Arrow data type of this primitive type.
source§

fn get_byte_width() -> usize

Returns the byte width of this primitive type.
source§

fn default_value() -> Self::Native

Returns a default value of this primitive type. Read more
source§

impl Debug for IntervalMonthDayNanoType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

source§

impl<T> ArrowNumericType for T