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/06 17:36:08 UTC

[GitHub] [arrow] ovr commented on a change in pull request #9114: ARROW-11149: [Rust] DF Support List/LargeList in create_batch_empty

ovr commented on a change in pull request #9114:
URL: https://github.com/apache/arrow/pull/9114#discussion_r552842524



##########
File path: rust/arrow/src/array/array_list.rs
##########
@@ -295,6 +298,185 @@ impl fmt::Debug for FixedSizeListArray {
     }
 }
 
+macro_rules! build_empty_list_array_with_primitive_items {
+    ($item_type:ident, $list_builder:ident) => {{
+        let values_builder = PrimitiveBuilder::<$item_type>::new(0);
+        let mut builder = $list_builder::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, $list_builder:ident) => {{
+        let values_builder = $type_builder::new(0);
+        let mut builder = $list_builder::new(values_builder);
+        let empty_list_array = builder.finish();
+        Ok(Arc::new(empty_list_array))
+    }};
+}
+
+macro_rules! make_empty_list_fn {
+    ($name:ident, $list_builder:ident) => {
+        pub fn $name(item_type: DataType) -> Result<ArrayRef> {
+            match item_type {
+                DataType::UInt8 => {
+                    build_empty_list_array_with_primitive_items!(UInt8Type, $list_builder)
+                }
+                DataType::UInt16 => {
+                    build_empty_list_array_with_primitive_items!(
+                        UInt16Type,
+                        $list_builder
+                    )
+                }
+                DataType::UInt32 => {
+                    build_empty_list_array_with_primitive_items!(
+                        UInt32Type,
+                        $list_builder
+                    )
+                }
+                DataType::UInt64 => {
+                    build_empty_list_array_with_primitive_items!(
+                        UInt64Type,
+                        $list_builder
+                    )
+                }
+                DataType::Int8 => {
+                    build_empty_list_array_with_primitive_items!(Int8Type, $list_builder)
+                }
+                DataType::Int16 => {
+                    build_empty_list_array_with_primitive_items!(Int16Type, $list_builder)
+                }
+                DataType::Int32 => {
+                    build_empty_list_array_with_primitive_items!(Int32Type, $list_builder)
+                }
+                DataType::Int64 => {
+                    build_empty_list_array_with_primitive_items!(Int64Type, $list_builder)
+                }
+                DataType::Float32 => {
+                    build_empty_list_array_with_primitive_items!(
+                        Float32Type,
+                        $list_builder
+                    )
+                }
+                DataType::Float64 => {
+                    build_empty_list_array_with_primitive_items!(
+                        Float64Type,
+                        $list_builder
+                    )
+                }
+                DataType::Boolean => {
+                    //build_empty_list_array_with_primitive_items!(ArrowBooleanType)
+                    todo!()
+                }
+                DataType::Date32(_) => {
+                    build_empty_list_array_with_primitive_items!(
+                        Date32Type,
+                        $list_builder
+                    )
+                }
+                DataType::Date64(_) => {
+                    build_empty_list_array_with_primitive_items!(
+                        Date64Type,
+                        $list_builder
+                    )
+                }
+                DataType::Time32(TimeUnit::Second) => {
+                    build_empty_list_array_with_primitive_items!(
+                        Time32SecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Time32(TimeUnit::Millisecond) => {
+                    build_empty_list_array_with_primitive_items!(
+                        Time32MillisecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Time64(TimeUnit::Microsecond) => {
+                    build_empty_list_array_with_primitive_items!(
+                        Time64MicrosecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Time64(TimeUnit::Nanosecond) => {
+                    build_empty_list_array_with_primitive_items!(
+                        Time64NanosecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Duration(TimeUnit::Second) => {
+                    build_empty_list_array_with_primitive_items!(
+                        DurationSecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Duration(TimeUnit::Millisecond) => {
+                    build_empty_list_array_with_primitive_items!(
+                        DurationMillisecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Duration(TimeUnit::Microsecond) => {
+                    build_empty_list_array_with_primitive_items!(
+                        DurationMicrosecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Duration(TimeUnit::Nanosecond) => {
+                    build_empty_list_array_with_primitive_items!(
+                        DurationNanosecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Timestamp(TimeUnit::Second, _) => {
+                    build_empty_list_array_with_primitive_items!(
+                        TimestampSecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Timestamp(TimeUnit::Millisecond, _) => {
+                    build_empty_list_array_with_primitive_items!(
+                        TimestampMillisecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Timestamp(TimeUnit::Microsecond, _) => {
+                    build_empty_list_array_with_primitive_items!(
+                        TimestampMicrosecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Timestamp(TimeUnit::Nanosecond, _) => {
+                    build_empty_list_array_with_primitive_items!(
+                        TimestampNanosecondType,
+                        $list_builder
+                    )
+                }
+                DataType::Utf8 => {
+                    build_empty_list_array_with_non_primitive_items!(
+                        StringBuilder,
+                        $list_builder
+                    )
+                }
+                DataType::Binary => {
+                    build_empty_list_array_with_non_primitive_items!(
+                        BinaryBuilder,
+                        $list_builder
+                    )
+                }
+                _ => Err(ArrowError::Unsupported(format!(

Review comment:
       What `ArrowError` should I throw on implemented? todo!? Or let's declare this one?
   
   Thanks




----------------------------------------------------------------
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