From 3e6d2bb3116e5bfdfbd777469de3c3f2aa0e705c Mon Sep 17 00:00:00 2001 From: Liang-Chi Hsieh Date: Tue, 8 Nov 2022 18:51:56 -0800 Subject: [PATCH] Fix test --- arrow-array/src/array/primitive_array.rs | 2 +- arrow/src/row/mod.rs | 44 ++++++++---------------- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/arrow-array/src/array/primitive_array.rs b/arrow-array/src/array/primitive_array.rs index eb3618f7c30..1c6a5160efd 100644 --- a/arrow-array/src/array/primitive_array.rs +++ b/arrow-array/src/array/primitive_array.rs @@ -832,7 +832,7 @@ impl PrimitiveArray { /// 2. `scale` is larger than `T::MAX_SCALE` /// 3. `scale` is > `precision` pub fn with_precision_and_scale( - self, + &self, precision: u8, scale: u8, ) -> Result diff --git a/arrow/src/row/mod.rs b/arrow/src/row/mod.rs index 8af642240e7..f5d0b3f9daf 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::(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::() - .unwrap(); - - fixed::encode(out, column, opts) - }, - DataType::Decimal256(_, _) => { - let column = column - .as_any() - .downcast_ref::() - .unwrap(); - - fixed::encode(out, column, opts) - }, DataType::Binary => { variable::encode(out, as_generic_binary_array::(column).iter(), opts) } @@ -653,16 +634,6 @@ unsafe fn decode_column( DataType::LargeBinary => Arc::new(decode_binary::(rows, options)), DataType::Utf8 => Arc::new(decode_string::(rows, options)), DataType::LargeUtf8 => Arc::new(decode_string::(rows, options)), - DataType::Decimal128(p, s) => Arc::new( - decode_primitive::(rows, options) - .with_precision_and_scale(*p, *s) - .unwrap(), - ), - DataType::Decimal256(p, s) => Arc::new( - decode_primitive::(rows, options) - .with_precision_and_scale(*p, *s) - .unwrap(), - ), DataType::Dictionary(k, v) => match k.as_ref() { DataType::Int8 => Arc::new(decode_dictionary::( interner.unwrap(), @@ -726,6 +697,21 @@ unsafe fn decode_column( ))) } }; + let array: ArrayRef = match &field.data_type { + DataType::Decimal128(p, s) => { + let d = as_primitive_array::(&array) + .with_precision_and_scale(*p, *s) + .unwrap(); + Arc::new(d) + } + DataType::Decimal256(p, s) => { + let d = as_primitive_array::(&array) + .with_precision_and_scale(*p, *s) + .unwrap(); + Arc::new(d) + } + _ => array, + }; Ok(array) }