| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| use super::{ArrowPrimitiveType, DataType, IntervalUnit, TimeUnit}; |
| |
| // BooleanType is special: its bit-width is not the size of the primitive type, and its `index` |
| // operation assumes bit-packing. |
| #[derive(Debug)] |
| pub struct BooleanType {} |
| |
| impl BooleanType { |
| pub const DATA_TYPE: DataType = DataType::Boolean; |
| } |
| |
| macro_rules! make_type { |
| ($name:ident, $native_ty:ty, $data_ty:expr) => { |
| #[derive(Debug)] |
| pub struct $name {} |
| |
| impl ArrowPrimitiveType for $name { |
| type Native = $native_ty; |
| const DATA_TYPE: DataType = $data_ty; |
| } |
| }; |
| } |
| |
| make_type!(Int8Type, i8, DataType::Int8); |
| make_type!(Int16Type, i16, DataType::Int16); |
| make_type!(Int32Type, i32, DataType::Int32); |
| make_type!(Int64Type, i64, DataType::Int64); |
| make_type!(UInt8Type, u8, DataType::UInt8); |
| make_type!(UInt16Type, u16, DataType::UInt16); |
| make_type!(UInt32Type, u32, DataType::UInt32); |
| make_type!(UInt64Type, u64, DataType::UInt64); |
| make_type!(Float32Type, f32, DataType::Float32); |
| make_type!(Float64Type, f64, DataType::Float64); |
| make_type!( |
| TimestampSecondType, |
| i64, |
| DataType::Timestamp(TimeUnit::Second, None) |
| ); |
| make_type!( |
| TimestampMillisecondType, |
| i64, |
| DataType::Timestamp(TimeUnit::Millisecond, None) |
| ); |
| make_type!( |
| TimestampMicrosecondType, |
| i64, |
| DataType::Timestamp(TimeUnit::Microsecond, None) |
| ); |
| make_type!( |
| TimestampNanosecondType, |
| i64, |
| DataType::Timestamp(TimeUnit::Nanosecond, None) |
| ); |
| make_type!(Date32Type, i32, DataType::Date32); |
| make_type!(Date64Type, i64, DataType::Date64); |
| make_type!(Time32SecondType, i32, DataType::Time32(TimeUnit::Second)); |
| make_type!( |
| Time32MillisecondType, |
| i32, |
| DataType::Time32(TimeUnit::Millisecond) |
| ); |
| make_type!( |
| Time64MicrosecondType, |
| i64, |
| DataType::Time64(TimeUnit::Microsecond) |
| ); |
| make_type!( |
| Time64NanosecondType, |
| i64, |
| DataType::Time64(TimeUnit::Nanosecond) |
| ); |
| make_type!( |
| IntervalYearMonthType, |
| i32, |
| DataType::Interval(IntervalUnit::YearMonth) |
| ); |
| make_type!( |
| IntervalDayTimeType, |
| i64, |
| DataType::Interval(IntervalUnit::DayTime) |
| ); |
| make_type!( |
| DurationSecondType, |
| i64, |
| DataType::Duration(TimeUnit::Second) |
| ); |
| make_type!( |
| DurationMillisecondType, |
| i64, |
| DataType::Duration(TimeUnit::Millisecond) |
| ); |
| make_type!( |
| DurationMicrosecondType, |
| i64, |
| DataType::Duration(TimeUnit::Microsecond) |
| ); |
| make_type!( |
| DurationNanosecondType, |
| i64, |
| DataType::Duration(TimeUnit::Nanosecond) |
| ); |
| |
| /// A subtype of primitive type that represents legal dictionary keys. |
| /// See <https://arrow.apache.org/docs/format/Columnar.html> |
| pub trait ArrowDictionaryKeyType: ArrowPrimitiveType {} |
| |
| impl ArrowDictionaryKeyType for Int8Type {} |
| |
| impl ArrowDictionaryKeyType for Int16Type {} |
| |
| impl ArrowDictionaryKeyType for Int32Type {} |
| |
| impl ArrowDictionaryKeyType for Int64Type {} |
| |
| impl ArrowDictionaryKeyType for UInt8Type {} |
| |
| impl ArrowDictionaryKeyType for UInt16Type {} |
| |
| impl ArrowDictionaryKeyType for UInt32Type {} |
| |
| impl ArrowDictionaryKeyType for UInt64Type {} |
| |
| /// A subtype of primitive type that represents temporal values. |
| pub trait ArrowTemporalType: ArrowPrimitiveType {} |
| |
| impl ArrowTemporalType for TimestampSecondType {} |
| impl ArrowTemporalType for TimestampMillisecondType {} |
| impl ArrowTemporalType for TimestampMicrosecondType {} |
| impl ArrowTemporalType for TimestampNanosecondType {} |
| impl ArrowTemporalType for Date32Type {} |
| impl ArrowTemporalType for Date64Type {} |
| impl ArrowTemporalType for Time32SecondType {} |
| impl ArrowTemporalType for Time32MillisecondType {} |
| impl ArrowTemporalType for Time64MicrosecondType {} |
| impl ArrowTemporalType for Time64NanosecondType {} |
| // impl ArrowTemporalType for IntervalYearMonthType {} |
| // impl ArrowTemporalType for IntervalDayTimeType {} |
| impl ArrowTemporalType for DurationSecondType {} |
| impl ArrowTemporalType for DurationMillisecondType {} |
| impl ArrowTemporalType for DurationMicrosecondType {} |
| impl ArrowTemporalType for DurationNanosecondType {} |
| |
| /// A timestamp type allows us to create array builders that take a timestamp. |
| pub trait ArrowTimestampType: ArrowTemporalType { |
| /// Returns the `TimeUnit` of this timestamp. |
| fn get_time_unit() -> TimeUnit; |
| } |
| |
| impl ArrowTimestampType for TimestampSecondType { |
| fn get_time_unit() -> TimeUnit { |
| TimeUnit::Second |
| } |
| } |
| impl ArrowTimestampType for TimestampMillisecondType { |
| fn get_time_unit() -> TimeUnit { |
| TimeUnit::Millisecond |
| } |
| } |
| impl ArrowTimestampType for TimestampMicrosecondType { |
| fn get_time_unit() -> TimeUnit { |
| TimeUnit::Microsecond |
| } |
| } |
| impl ArrowTimestampType for TimestampNanosecondType { |
| fn get_time_unit() -> TimeUnit { |
| TimeUnit::Nanosecond |
| } |
| } |