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:
[email protected]