Skip to main content

VariantDecimal4

Struct VariantDecimal4 

Source
pub struct VariantDecimal4 {
    integer: i32,
    scale: u8,
}
Expand description

Represents a 4-byte decimal value in the Variant format.

This struct stores a decimal number using a 32-bit signed integer for the coefficient and an 8-bit unsigned integer for the scale (number of decimal places). Its precision is limited to 9 digits.

For valid precision and scale values, see the Variant specification: https://github.com/apache/parquet-format/blob/87f2c8bf77eefb4c43d0ebaeea1778bd28ac3609/VariantEncoding.md?plain=1#L418-L420

§Example: Create a VariantDecimal4

// Create a value representing the decimal 123.4567
let decimal = VariantDecimal4::try_new(1234567, 4).expect("Failed to create decimal");

Fields§

§integer: i32§scale: u8

Implementations§

Source§

impl VariantDecimal4

Source

pub const MAX_PRECISION: u8 = arrow_schema::DECIMAL32_MAX_PRECISION

Maximum number of significant digits (9 for 4-byte decimals)

Source§

impl VariantDecimal4

Source

pub fn try_new(integer: i32, scale: u8) -> Result<Self, ArrowError>

Attempts to create a new instance of this decimal type, failing if the value is too wide or the scale is too large.

Source

pub fn integer(&self) -> i32

Returns the unscaled integer value of the decimal.

For example, if the decimal is 123.45, this will return 12345.

Source

pub fn scale(&self) -> u8

Returns the scale of the decimal (how many digits after the decimal point).

For example, if the decimal is 123.45, this will return 2.

Source

pub fn as_integer(&self) -> Option<i32>

Returns Some(i32) if scale is zero or integer of the decimal is divisible by 10^scale, None for other values.

§Examples
use parquet_variant::VariantDecimal4;
//Return the integer if scale is 0
let d1 = VariantDecimal4::try_new(123, 0).unwrap();
assert_eq!(d1.as_integer(), Some(123));
// or if the integer is divisible by 10^scale
let d2 = VariantDecimal4::try_new(100, 2).unwrap();
assert_eq!(d2.as_integer(), Some(1));
// or the integer is negative and divisible by 10^scale
let d3 = VariantDecimal4::try_new(-100, 2).unwrap();
assert_eq!(d3.as_integer(), Some(-1));
// or if the integer is 0
let d4 = VariantDecimal4::try_new(0, 4).unwrap();
assert_eq!(d4.as_integer(), Some(0));
// but not if the integer is not divisible by 10^scale
let d5 = VariantDecimal4::try_new(123, 2).unwrap();
assert_eq!(d5.as_integer(), None);
// or the integer is negative and not divisible by 10^scale
let d6 = VariantDecimal4::try_new(-123, 2).unwrap();
assert_eq!(d6.as_integer(), None);

Trait Implementations§

Source§

impl Clone for VariantDecimal4

Source§

fn clone(&self) -> VariantDecimal4

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for VariantDecimal4

Source§

impl Debug for VariantDecimal4

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Display for VariantDecimal4

Source§

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

Formats the value using the given formatter. Read more
Source§

impl From<VariantDecimal4> for VariantDecimal8

Source§

fn from(decimal: VariantDecimal4) -> Self

Converts to this type from the input type.
Source§

impl From<VariantDecimal4> for VariantDecimal16

Source§

fn from(decimal: VariantDecimal4) -> Self

Converts to this type from the input type.
Source§

impl From<VariantDecimal4> for Variant<'_, '_>

Source§

fn from(value: VariantDecimal4) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for VariantDecimal4

Source§

fn eq(&self, other: &VariantDecimal4) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for VariantDecimal4

Source§

impl TryFrom<VariantDecimal8> for VariantDecimal4

Source§

type Error = ArrowError

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

fn try_from(decimal: VariantDecimal8) -> Result<Self, ArrowError>

Performs the conversion.
Source§

impl TryFrom<VariantDecimal16> for VariantDecimal4

Source§

type Error = ArrowError

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

fn try_from(decimal: VariantDecimal16) -> Result<Self, ArrowError>

Performs the conversion.
Source§

impl TryFrom<i32> for VariantDecimal4

Source§

type Error = ArrowError

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

fn try_from(integer: i32) -> Result<Self, ArrowError>

Performs the conversion.
Source§

impl VariantDecimalType for VariantDecimal4

Source§

const MAX_PRECISION: u8 = Self::MAX_PRECISION

Maximum number of significant digits this decimal type can represent (9, 18, or 38)
Source§

const MAX_UNSCALED_VALUE: i32

The largest positive unscaled value that fits in Self::MAX_PRECISION digits.
Source§

type Native = i32

The underlying signed integer type (i32, i64, or i128)
Source§

fn try_new(integer: i32, scale: u8) -> Result<Self, ArrowError>

Creates a new decimal value from the given unscaled integer and scale, failing if the integer’s width, or the requested scale, exceeds MAX_PRECISION. Read more
Source§

fn try_new_with_signed_scale( integer: i32, scale: i8, ) -> Result<Self, ArrowError>

Attempts to convert an unscaled arrow decimal value to the indicated variant decimal type. Read more
Source§

fn integer(&self) -> i32

Returns the unscaled integer value
Source§

fn scale(&self) -> u8

Returns the scale (number of digits after the decimal point)
Source§

fn as_integer(&self) -> Option<i32>

Converts the decimal as an integer if possible, Read more
Source§

fn is_valid_precision_and_scale(precision: &u8, scale: &i8) -> bool

True if the given precision and scale are valid for this variant decimal type. 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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

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>,

Source§

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.