polars_arrow/datatypes/physical_type.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
pub use crate::types::PrimitiveType;
/// The set of physical types: unique in-memory representations of an Arrow array.
///
/// A physical type has a one-to-many relationship with a [`crate::datatypes::ArrowDataType`] and
/// a one-to-one mapping to each struct in this crate that implements [`crate::array::Array`].
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum PhysicalType {
/// A Null with no allocation.
Null,
/// A boolean represented as a single bit.
Boolean,
/// An array where each slot has a known compile-time size.
Primitive(PrimitiveType),
/// Opaque binary data of variable length.
Binary,
/// Opaque binary data of fixed size.
FixedSizeBinary,
/// Opaque binary data of variable length and 64-bit offsets.
LargeBinary,
/// A variable-length string in Unicode with UTF-8 encoding.
Utf8,
/// A variable-length string in Unicode with UFT-8 encoding and 64-bit offsets.
LargeUtf8,
/// A list of some data type with variable length.
List,
/// A list of some data type with fixed length.
FixedSizeList,
/// A list of some data type with variable length and 64-bit offsets.
LargeList,
/// A nested type that contains an arbitrary number of fields.
Struct,
/// A nested type that represents slots of differing types.
Union,
/// A nested type.
Map,
/// A dictionary encoded array by `IntegerType`.
Dictionary(IntegerType),
/// A binary type that inlines small values
/// and can intern bytes.
BinaryView,
/// A string type that inlines small values
/// and can intern strings.
Utf8View,
}
impl PhysicalType {
/// Whether this physical type equals [`PhysicalType::Primitive`] of type `primitive`.
pub fn eq_primitive(&self, primitive: PrimitiveType) -> bool {
if let Self::Primitive(o) = self {
o == &primitive
} else {
false
}
}
pub fn is_primitive(&self) -> bool {
matches!(self, Self::Primitive(_))
}
}
/// the set of valid indices types of a dictionary-encoded Array.
/// Each type corresponds to a variant of [`crate::array::DictionaryArray`].
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum IntegerType {
/// A signed 8-bit integer.
Int8,
/// A signed 16-bit integer.
Int16,
/// A signed 32-bit integer.
Int32,
/// A signed 64-bit integer.
Int64,
/// An unsigned 8-bit integer.
UInt8,
/// An unsigned 16-bit integer.
UInt16,
/// An unsigned 32-bit integer.
UInt32,
/// An unsigned 64-bit integer.
UInt64,
}