You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by GitBox <gi...@apache.org> on 2021/01/16 14:01:44 UTC
[GitHub] [arrow] ovr commented on a change in pull request #9114: ARROW-11149: [Rust] DF Support List/LargeList/FixedSizeList in create_batch_empty
ovr commented on a change in pull request #9114:
URL: https://github.com/apache/arrow/pull/9114#discussion_r558894537
##########
File path: rust/arrow/src/array/array_list.rs
##########
@@ -295,6 +299,264 @@ impl fmt::Debug for FixedSizeListArray {
}
}
+macro_rules! build_empty_list_array_with_primitive_items {
+ ($item_type:ident, $offset_type:ident) => {{
+ let values_builder = PrimitiveBuilder::<$item_type>::new(0);
+ let mut builder =
+ GenericListBuilder::<$offset_type, PrimitiveBuilder<$item_type>>::new(
+ values_builder,
+ );
+ let empty_list_array = builder.finish();
+ Ok(Arc::new(empty_list_array))
+ }};
+}
+
+macro_rules! build_empty_list_array_with_non_primitive_items {
+ ($type_builder:ident, $offset_type:ident) => {{
+ let values_builder = $type_builder::new(0);
+ let mut builder =
+ GenericListBuilder::<$offset_type, $type_builder>::new(values_builder);
+ let empty_list_array = builder.finish();
+ Ok(Arc::new(empty_list_array))
+ }};
+}
+
+pub fn build_empty_list_array<OffsetSize: OffsetSizeTrait>(
+ item_type: DataType,
+) -> Result<ArrayRef> {
+ match item_type {
+ DataType::UInt8 => {
+ build_empty_list_array_with_primitive_items!(UInt8Type, OffsetSize)
+ }
+ DataType::UInt16 => {
+ build_empty_list_array_with_primitive_items!(UInt16Type, OffsetSize)
+ }
+ DataType::UInt32 => {
+ build_empty_list_array_with_primitive_items!(UInt32Type, OffsetSize)
+ }
+ DataType::UInt64 => {
+ build_empty_list_array_with_primitive_items!(UInt64Type, OffsetSize)
+ }
+ DataType::Int8 => {
+ build_empty_list_array_with_primitive_items!(Int8Type, OffsetSize)
+ }
+ DataType::Int16 => {
+ build_empty_list_array_with_primitive_items!(Int16Type, OffsetSize)
+ }
+ DataType::Int32 => {
+ build_empty_list_array_with_primitive_items!(Int32Type, OffsetSize)
+ }
+ DataType::Int64 => {
+ build_empty_list_array_with_primitive_items!(Int64Type, OffsetSize)
+ }
+ DataType::Float32 => {
+ build_empty_list_array_with_primitive_items!(Float32Type, OffsetSize)
+ }
+ DataType::Float64 => {
+ build_empty_list_array_with_primitive_items!(Float64Type, OffsetSize)
+ }
+ DataType::Boolean => {
+ build_empty_list_array_with_non_primitive_items!(BooleanBuilder, OffsetSize)
+ }
+ DataType::Date32(_) => {
+ build_empty_list_array_with_primitive_items!(Date32Type, OffsetSize)
+ }
+ DataType::Date64(_) => {
+ build_empty_list_array_with_primitive_items!(Date64Type, OffsetSize)
+ }
+ DataType::Time32(TimeUnit::Second) => {
+ build_empty_list_array_with_primitive_items!(Time32SecondType, OffsetSize)
+ }
+ DataType::Time32(TimeUnit::Millisecond) => {
+ build_empty_list_array_with_primitive_items!(
+ Time32MillisecondType,
+ OffsetSize
+ )
+ }
+ DataType::Time64(TimeUnit::Microsecond) => {
+ build_empty_list_array_with_primitive_items!(
+ Time64MicrosecondType,
+ OffsetSize
+ )
+ }
+ DataType::Time64(TimeUnit::Nanosecond) => {
+ build_empty_list_array_with_primitive_items!(Time64NanosecondType, OffsetSize)
+ }
+ DataType::Duration(TimeUnit::Second) => {
+ build_empty_list_array_with_primitive_items!(DurationSecondType, OffsetSize)
+ }
+ DataType::Duration(TimeUnit::Millisecond) => {
+ build_empty_list_array_with_primitive_items!(
+ DurationMillisecondType,
+ OffsetSize
+ )
+ }
+ DataType::Duration(TimeUnit::Microsecond) => {
+ build_empty_list_array_with_primitive_items!(
+ DurationMicrosecondType,
+ OffsetSize
+ )
+ }
+ DataType::Duration(TimeUnit::Nanosecond) => {
+ build_empty_list_array_with_primitive_items!(
+ DurationNanosecondType,
+ OffsetSize
+ )
+ }
+ DataType::Timestamp(TimeUnit::Second, _) => {
+ build_empty_list_array_with_primitive_items!(TimestampSecondType, OffsetSize)
+ }
+ DataType::Timestamp(TimeUnit::Millisecond, _) => {
+ build_empty_list_array_with_primitive_items!(
+ TimestampMillisecondType,
+ OffsetSize
+ )
+ }
+ DataType::Timestamp(TimeUnit::Microsecond, _) => {
+ build_empty_list_array_with_primitive_items!(
+ TimestampMicrosecondType,
+ OffsetSize
+ )
+ }
+ DataType::Timestamp(TimeUnit::Nanosecond, _) => {
+ build_empty_list_array_with_primitive_items!(
+ TimestampNanosecondType,
+ OffsetSize
+ )
+ }
+ DataType::Utf8 => {
+ build_empty_list_array_with_non_primitive_items!(StringBuilder, OffsetSize)
+ }
+ DataType::Binary => {
+ build_empty_list_array_with_non_primitive_items!(BinaryBuilder, OffsetSize)
+ }
+ _ => Err(ArrowError::Unsupported(format!(
+ "GenericListBuilder of type List({:?}) is not supported",
+ item_type
+ ))),
+ }
+}
+
+macro_rules! build_empty_fixed_size_list_array_with_primitive_items {
+ ($item_type:ident) => {{
+ let values_builder = PrimitiveBuilder::<$item_type>::new(0);
+ let mut builder = FixedSizeListBuilder::new(values_builder, 0);
+ let empty_list_array = builder.finish();
+ Ok(Arc::new(empty_list_array))
+ }};
+}
+
+macro_rules! build_empty_fixed_size_list_array_with_non_primitive_items {
+ ($type_builder:ident) => {{
+ let values_builder = $type_builder::new(0);
+ let mut builder = FixedSizeListBuilder::new(values_builder, 0);
+ let empty_list_array = builder.finish();
+ Ok(Arc::new(empty_list_array))
+ }};
+}
+
+pub fn build_empty_fixed_size_list_array(item_type: DataType) -> Result<ArrayRef> {
+ match item_type {
+ DataType::UInt8 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(UInt8Type)
+ }
+ DataType::UInt16 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(UInt16Type)
+ }
+ DataType::UInt32 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(UInt32Type)
+ }
+ DataType::UInt64 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(UInt64Type)
+ }
+ DataType::Int8 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Int8Type)
+ }
+ DataType::Int16 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Int16Type)
+ }
+ DataType::Int32 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Int32Type)
+ }
+ DataType::Int64 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Int64Type)
+ }
+ DataType::Float32 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Float32Type)
+ }
+ DataType::Float64 => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Float64Type)
+ }
+ DataType::Boolean => {
+ build_empty_fixed_size_list_array_with_non_primitive_items!(BooleanBuilder)
+ }
+ DataType::Date32(_) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Date32Type)
+ }
+ DataType::Date64(_) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Date64Type)
+ }
+ DataType::Time32(TimeUnit::Second) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Time32SecondType)
+ }
+ DataType::Time32(TimeUnit::Millisecond) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Time32MillisecondType)
+ }
+ DataType::Time64(TimeUnit::Microsecond) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Time64MicrosecondType)
+ }
+ DataType::Time64(TimeUnit::Nanosecond) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(Time64NanosecondType)
+ }
+ DataType::Duration(TimeUnit::Second) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(DurationSecondType)
+ }
+ DataType::Duration(TimeUnit::Millisecond) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(
+ DurationMillisecondType
+ )
+ }
+ DataType::Duration(TimeUnit::Microsecond) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(
+ DurationMicrosecondType
+ )
+ }
+ DataType::Duration(TimeUnit::Nanosecond) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(
+ DurationNanosecondType
+ )
+ }
+ DataType::Timestamp(TimeUnit::Second, _) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(TimestampSecondType)
+ }
+ DataType::Timestamp(TimeUnit::Millisecond, _) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(
+ TimestampMillisecondType
+ )
+ }
+ DataType::Timestamp(TimeUnit::Microsecond, _) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(
+ TimestampMicrosecondType
+ )
+ }
+ DataType::Timestamp(TimeUnit::Nanosecond, _) => {
+ build_empty_fixed_size_list_array_with_primitive_items!(
+ TimestampNanosecondType
+ )
+ }
+ DataType::Utf8 => {
+ build_empty_fixed_size_list_array_with_non_primitive_items!(StringBuilder)
+ }
+ DataType::Binary => {
+ build_empty_fixed_size_list_array_with_non_primitive_items!(BinaryBuilder)
+ }
+ _ => Err(ArrowError::Unsupported(format!(
+ "FixedSizeListBuilder of type FixedSizeList({:?}) is not supported",
+ item_type
+ ))),
+ }
+}
+
#[cfg(test)]
mod tests {
use crate::{
Review comment:
Thanks, added.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org