This is an automated email from the ASF dual-hosted git repository.
tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new f5962092c Add Decimal128 and Decimal256 to downcast_primitive (#3056)
f5962092c is described below
commit f5962092c005c2ae3bfa10c050d75f36fab75d46
Author: Liang-Chi Hsieh <[email protected]>
AuthorDate: Wed Nov 9 14:54:10 2022 -0800
Add Decimal128 and Decimal256 to downcast_primitive (#3056)
* Add Decimal128 and Decimal256 to downcast_primitive
* Add doc test
* Fix test
* For review
---
arrow-array/src/cast.rs | 8 ++++++++
arrow/src/row/mod.rs | 21 ---------------------
2 files changed, 8 insertions(+), 21 deletions(-)
diff --git a/arrow-array/src/cast.rs b/arrow-array/src/cast.rs
index 7bc627137..4569c3681 100644
--- a/arrow-array/src/cast.rs
+++ b/arrow-array/src/cast.rs
@@ -225,6 +225,8 @@ macro_rules! downcast_temporal_array {
/// assert_eq!(primitive_size(&DataType::Int32), 4);
/// assert_eq!(primitive_size(&DataType::Int64), 8);
/// assert_eq!(primitive_size(&DataType::Float16), 2);
+/// assert_eq!(primitive_size(&DataType::Decimal128(38, 10)), 16);
+/// assert_eq!(primitive_size(&DataType::Decimal256(76, 20)), 32);
/// ```
///
/// [`DataType`]: arrow_schema::DataType
@@ -242,6 +244,12 @@ macro_rules! downcast_primitive {
$crate::repeat_pat!(arrow_schema::DataType::Float64,
$($data_type),+) => {
$m!($crate::types::Float64Type $(, $args)*)
}
+ $crate::repeat_pat!(arrow_schema::DataType::Decimal128(_, _),
$($data_type),+) => {
+ $m!($crate::types::Decimal128Type $(, $args)*)
+ }
+ $crate::repeat_pat!(arrow_schema::DataType::Decimal256(_, _),
$($data_type),+) => {
+ $m!($crate::types::Decimal256Type $(, $args)*)
+ }
$crate::repeat_pat!(arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::YearMonth),
$($data_type),+) => {
$m!($crate::types::IntervalYearMonthType $(, $args)*)
}
diff --git a/arrow/src/row/mod.rs b/arrow/src/row/mod.rs
index 15fe5dc42..e0312be1f 100644
--- a/arrow/src/row/mod.rs
+++ b/arrow/src/row/mod.rs
@@ -102,7 +102,6 @@ use std::sync::Arc;
use arrow_array::cast::*;
use arrow_array::*;
-use arrow_buffer::i256;
use crate::compute::SortOptions;
use crate::datatypes::*;
@@ -504,8 +503,6 @@ fn new_empty_rows(
array => lengths.iter_mut().for_each(|x| *x +=
fixed::encoded_len(array)),
DataType::Null => {},
DataType::Boolean => lengths.iter_mut().for_each(|x| *x +=
bool::ENCODED_LEN),
- DataType::Decimal128(_, _) => lengths.iter_mut().for_each(|x| *x
+= i128::ENCODED_LEN),
- DataType::Decimal256(_, _) => lengths.iter_mut().for_each(|x| *x
+= i256::ENCODED_LEN),
DataType::Binary => as_generic_binary_array::<i32>(array)
.iter()
.zip(lengths.iter_mut())
@@ -586,22 +583,6 @@ fn encode_column(
column => fixed::encode(out, column, opts),
DataType::Null => {}
DataType::Boolean => fixed::encode(out, as_boolean_array(column),
opts),
- DataType::Decimal128(_, _) => {
- let column = column
- .as_any()
- .downcast_ref::<Decimal128Array>()
- .unwrap();
-
- fixed::encode(out, column, opts)
- },
- DataType::Decimal256(_, _) => {
- let column = column
- .as_any()
- .downcast_ref::<Decimal256Array>()
- .unwrap();
-
- fixed::encode(out, column, opts)
- },
DataType::Binary => {
variable::encode(out,
as_generic_binary_array::<i32>(column).iter(), opts)
}
@@ -654,8 +635,6 @@ unsafe fn decode_column(
DataType::LargeBinary => Arc::new(decode_binary::<i64>(rows, options)),
DataType::Utf8 => Arc::new(decode_string::<i32>(rows, options)),
DataType::LargeUtf8 => Arc::new(decode_string::<i64>(rows, options)),
- DataType::Decimal128(_, _) => decode_primitive_helper!(Decimal128Type,
rows, data_type, options),
- DataType::Decimal256(_, _) => decode_primitive_helper!(Decimal256Type,
rows, data_type, options),
DataType::Dictionary(k, v) => match k.as_ref() {
DataType::Int8 => Arc::new(decode_dictionary::<Int8Type>(
interner.unwrap(),