You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by tu...@apache.org on 2023/01/11 21:41:14 UTC
[arrow-rs] branch master updated: Fix DataTypeLayout for LargeList (#3503)
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 55c87c114 Fix DataTypeLayout for LargeList (#3503)
55c87c114 is described below
commit 55c87c114443739ed73ebc28d0ba53bf875ecd9a
Author: Liang-Chi Hsieh <vi...@gmail.com>
AuthorDate: Wed Jan 11 13:41:07 2023 -0800
Fix DataTypeLayout for LargeList (#3503)
* Fix DataTypeLayout for LargeList
* Add datalayout test
---
arrow-array/src/types.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++
arrow-data/src/data.rs | 2 +-
2 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/arrow-array/src/types.rs b/arrow-array/src/types.rs
index e7d92d2d0..7c41a469e 100644
--- a/arrow-array/src/types.rs
+++ b/arrow-array/src/types.rs
@@ -767,6 +767,8 @@ pub type LargeBinaryType = GenericBinaryType<i64>;
#[cfg(test)]
mod tests {
use super::*;
+ use arrow_data::{layout, BufferSpec};
+ use std::mem::size_of;
#[test]
fn month_day_nano_should_roundtrip() {
@@ -803,4 +805,46 @@ mod tests {
let value = IntervalYearMonthType::make_value(-1, -2);
assert_eq!(IntervalYearMonthType::to_months(value), -14);
}
+
+ fn test_layout<T: ArrowPrimitiveType>() {
+ let layout = layout(&T::DATA_TYPE);
+
+ assert_eq!(layout.buffers.len(), 1);
+
+ let spec = &layout.buffers[0];
+ assert_eq!(
+ spec,
+ &BufferSpec::FixedWidth {
+ byte_width: size_of::<T::Native>()
+ }
+ );
+ }
+
+ #[test]
+ fn test_layouts() {
+ test_layout::<Int8Type>();
+ test_layout::<Int16Type>();
+ test_layout::<Int32Type>();
+ test_layout::<Int64Type>();
+ test_layout::<UInt8Type>();
+ test_layout::<UInt16Type>();
+ test_layout::<UInt32Type>();
+ test_layout::<UInt64Type>();
+ test_layout::<Float16Type>();
+ test_layout::<Float32Type>();
+ test_layout::<Float64Type>();
+ test_layout::<TimestampSecondType>();
+ test_layout::<Date32Type>();
+ test_layout::<Date64Type>();
+ test_layout::<Time32SecondType>();
+ test_layout::<Time32MillisecondType>();
+ test_layout::<Time64MicrosecondType>();
+ test_layout::<Time64NanosecondType>();
+ test_layout::<IntervalMonthDayNanoType>();
+ test_layout::<IntervalDayTimeType>();
+ test_layout::<IntervalYearMonthType>();
+ test_layout::<DurationNanosecondType>();
+ test_layout::<DurationMicrosecondType>();
+ test_layout::<DurationMillisecondType>();
+ }
}
diff --git a/arrow-data/src/data.rs b/arrow-data/src/data.rs
index 31dad5e82..14dbe9387 100644
--- a/arrow-data/src/data.rs
+++ b/arrow-data/src/data.rs
@@ -1470,7 +1470,7 @@ pub fn layout(data_type: &DataType) -> DataTypeLayout {
DataType::LargeUtf8 => DataTypeLayout::new_binary(size_of::<i64>()),
DataType::List(_) => DataTypeLayout::new_fixed_width(size_of::<i32>()),
DataType::FixedSizeList(_, _) => DataTypeLayout::new_empty(), // all in child data
- DataType::LargeList(_) => DataTypeLayout::new_fixed_width(size_of::<i32>()),
+ DataType::LargeList(_) => DataTypeLayout::new_fixed_width(size_of::<i64>()),
DataType::Struct(_) => DataTypeLayout::new_empty(), // all in child data,
DataType::Union(_, _, mode) => {
let type_ids = BufferSpec::FixedWidth {