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