This is an automated email from the ASF dual-hosted git repository. comphead pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git
The following commit(s) were added to refs/heads/main by this push: new de32fc86f feat: Override MapBuilder values field with expected schema (#1643) de32fc86f is described below commit de32fc86f78d9243a7d22506c5656176cdbf74c0 Author: Oleks V <comph...@users.noreply.github.com> AuthorDate: Mon Apr 14 09:30:29 2025 -0700 feat: Override MapBuilder values field with expected schema (#1643) * feat: Override MapBuilder values field with expected schema * fmt --- native/core/src/execution/shuffle/map.rs | 26 +- native/core/src/execution/shuffle/row.rs | 1314 +++++++++----------- .../apache/comet/exec/CometNativeReaderSuite.scala | 13 +- 3 files changed, 601 insertions(+), 752 deletions(-) diff --git a/native/core/src/execution/shuffle/map.rs b/native/core/src/execution/shuffle/map.rs index 0ad8dafa2..c07bd95e2 100644 --- a/native/core/src/execution/shuffle/map.rs +++ b/native/core/src/execution/shuffle/map.rs @@ -1925,10 +1925,10 @@ pub fn append_map_elements<K: ArrayBuilder, V: ArrayBuilder>( map_builder: &mut MapBuilder<K, V>, map: &SparkUnsafeMap, ) -> Result<(), CometError> { - let (key_dt, value_dt, _) = get_map_key_value_dt(field)?; + let (key_field, value_field, _) = get_map_key_value_fields(field)?; // macro cannot expand to match arm - match (key_dt, value_dt) { + match (key_field.data_type(), value_field.data_type()) { (DataType::Boolean, DataType::Boolean) => { let map_builder = downcast_builder_ref!(MapBuilder<BooleanBuilder, BooleanBuilder>, map_builder); @@ -2823,7 +2823,8 @@ pub fn append_map_elements<K: ArrayBuilder, V: ArrayBuilder>( _ => { return Err(CometError::Internal(format!( "Unsupported map key/value data type: {:?}/{:?}", - key_dt, value_dt + key_field.data_type(), + value_field.data_type() ))) } } @@ -2832,13 +2833,13 @@ pub fn append_map_elements<K: ArrayBuilder, V: ArrayBuilder>( } #[allow(clippy::field_reassign_with_default)] -pub fn get_map_key_value_dt( +pub fn get_map_key_value_fields( field: &FieldRef, -) -> Result<(&DataType, &DataType, MapFieldNames), CometError> { +) -> Result<(&FieldRef, &FieldRef, MapFieldNames), CometError> { let mut map_fieldnames = MapFieldNames::default(); map_fieldnames.entry = field.name().to_string(); - let (key_dt, value_dt) = match field.data_type() { + let (key_field, value_field) = match field.data_type() { DataType::Struct(fields) => { if fields.len() != 2 { return Err(CometError::Internal(format!( @@ -2847,12 +2848,13 @@ pub fn get_map_key_value_dt( ))); } - map_fieldnames.key = fields[0].name().to_string(); - map_fieldnames.value = fields[1].name().to_string(); + let key = &fields[0]; + let value = &fields[1]; - let key_dt = fields[0].data_type(); - let value_dt = fields[1].data_type(); - (key_dt, value_dt) + map_fieldnames.key = key.name().to_string(); + map_fieldnames.value = value.name().to_string(); + + (key, value) } _ => { return Err(CometError::Internal(format!( @@ -2862,5 +2864,5 @@ pub fn get_map_key_value_dt( } }; - Ok((key_dt, value_dt, map_fieldnames)) + Ok((key_field, value_field, map_fieldnames)) } diff --git a/native/core/src/execution/shuffle/row.rs b/native/core/src/execution/shuffle/row.rs index 6fa6259ef..91dc915f7 100644 --- a/native/core/src/execution/shuffle/row.rs +++ b/native/core/src/execution/shuffle/row.rs @@ -23,7 +23,7 @@ use crate::{ shuffle::{ codec::{Checksum, ShuffleBlockWriter}, list::{append_list_element, SparkUnsafeArray}, - map::{append_map_elements, get_map_key_value_dt, SparkUnsafeMap}, + map::{append_map_elements, get_map_key_value_fields, SparkUnsafeMap}, }, utils::bytes_to_i128, }, @@ -466,10 +466,10 @@ pub(crate) fn append_field( } } DataType::Map(field, _) => { - let (key_dt, value_dt, _) = get_map_key_value_dt(field).unwrap(); + let (key_field, value_field, _) = get_map_key_value_fields(field)?; // macro cannot expand to match arm - match (key_dt, value_dt) { + match (key_field.data_type(), value_field.data_type()) { (DataType::Boolean, DataType::Boolean) => { append_map_element!(BooleanBuilder, BooleanBuilder, field); } @@ -987,7 +987,8 @@ pub(crate) fn append_field( _ => { unreachable!( "Unsupported data type of map key and value: {:?} and {:?}", - key_dt, value_dt + key_field.data_type(), + value_field.data_type() ) } } @@ -1286,10 +1287,10 @@ pub(crate) fn append_columns( ); } DataType::Map(field, _) => { - let (key_dt, value_dt, _) = get_map_key_value_dt(field)?; + let (key_field, value_field, _) = get_map_key_value_fields(field)?; // macro cannot expand to match arm - match (key_dt, value_dt) { + match (key_field.data_type(), value_field.data_type()) { (DataType::Boolean, DataType::Boolean) => { append_column_to_map_builder!(BooleanBuilder, BooleanBuilder, field) } @@ -1865,8 +1866,9 @@ fn make_builders( Box::new(TimestampMicrosecondBuilder::with_capacity(row_num).with_data_type(dt.clone())) } DataType::Map(field, _) => { - let (key_dt, value_dt, map_fieldnames) = get_map_key_value_dt(field)?; - + let (key_field, value_field, map_field_names) = get_map_key_value_fields(field)?; + let key_dt = key_field.data_type(); + let value_dt = value_field.data_type(); let key_builder = make_builders(key_dt, NESTED_TYPE_BUILDER_CAPACITY, 1.0)?; let value_builder = make_builders(value_dt, NESTED_TYPE_BUILDER_CAPACITY, 1.0)?; @@ -1876,937 +1878,834 @@ fn make_builders( (DataType::Boolean, DataType::Boolean) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Int8) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Int16) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Int32) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Int64) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Float32) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Float64) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Date32) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Binary) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Utf8) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Boolean, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(BooleanBuilder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Boolean) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Int8) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Int16) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Int32) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Int64) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Float32) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Float64) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Date32) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Binary) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Utf8) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int8, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(Int8Builder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Boolean) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Int8) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Int16) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Int32) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Int64) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Float32) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Float64) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Date32) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Binary) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Utf8) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int16, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(Int16Builder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Boolean) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Int8) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Int16) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Int32) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Int64) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Float32) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Float64) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Date32) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Binary) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Utf8) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int32, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(Int32Builder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Boolean) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Int8) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Int16) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Int32) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Int64) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Float32) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Float64) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Date32) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Binary) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Utf8) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Int64, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(Int64Builder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Boolean) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Int8) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Int16) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Int32) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Int64) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Float32) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Float64) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Date32) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Binary) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Utf8) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float32, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(Float32Builder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Boolean) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Int8) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Int16) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Int32) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Int64) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Float32) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Float64) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Date32) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Binary) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Utf8) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Float64, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(Float64Builder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Boolean) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Int8) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Int16) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Int32) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Int64) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Float32) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Float64) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Date32) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Binary) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Utf8) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Date32, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(Date32Builder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Boolean) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Int8) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Int16) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Int32) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Int64) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Float32) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Float64) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } ( DataType::Timestamp(TimeUnit::Microsecond, _), @@ -2815,374 +2714,333 @@ fn make_builders( let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Date32) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Binary) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Utf8) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Timestamp(TimeUnit::Microsecond, _), DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Boolean) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Int8) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Int16) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Int32) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Int64) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Float32) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Float64) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Date32) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Binary) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Utf8) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Binary, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(BinaryBuilder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Boolean) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Int8) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Int16) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Int32) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Int64) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Float32) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Float64) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Date32) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Binary) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Utf8) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Utf8, DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(StringBuilder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Boolean) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(BooleanBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Int8) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(Int8Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Int16) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(Int16Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Int32) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(Int32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Int64) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(Int64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Float32) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(Float32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Float64) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(Float64Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Timestamp(TimeUnit::Microsecond, _)) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Date32) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(Date32Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Binary) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(BinaryBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Utf8) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(StringBuilder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } (DataType::Decimal128(_, _), DataType::Decimal128(_, _)) => { let key_builder = downcast_builder!(Decimal128Builder, key_builder); let value_builder = downcast_builder!(Decimal128Builder, value_builder); - Box::new(MapBuilder::new( - Some(map_fieldnames), - *key_builder, - *value_builder, - )) + Box::new( + MapBuilder::new(Some(map_field_names), *key_builder, *value_builder) + .with_values_field(Arc::clone(value_field)), + ) } _ => { diff --git a/spark/src/test/scala/org/apache/comet/exec/CometNativeReaderSuite.scala b/spark/src/test/scala/org/apache/comet/exec/CometNativeReaderSuite.scala index 4dc4a12ea..d9c71f147 100644 --- a/spark/src/test/scala/org/apache/comet/exec/CometNativeReaderSuite.scala +++ b/spark/src/test/scala/org/apache/comet/exec/CometNativeReaderSuite.scala @@ -171,18 +171,7 @@ class CometNativeReaderSuite extends CometTestBase with AdaptiveSparkPlanHelper "select c0 from tbl") } - /* - org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 171.0 failed 1 times, most recent failure: - Lost task 1.0 in stage 171.0 (TID 179) (knode0099.cngya03.pie.silu.net executor driver): org.apache.comet.CometNativeException: called `Result::unwrap()` - on an `Err` value: InvalidArgumentError("Incorrect datatype for StructArray field \"m0\", expected Map(Field { name: \"entries\", - data_type: Struct([Field { name: \"key\", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, - Field { name: \"value\", data_type: Int32, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }]), - nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false) got Map(Field { name: \"entries\", d - ata_type: Struct([Field { name: \"key\", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, - Field { name: \"value\", data_type: Int32, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false)") - - */ - ignore("native reader - read STRUCT of MAP fields") { + test("native reader - read STRUCT of MAP fields") { testSingleLineQuery( """ |select named_struct('m0', map('a', 1)) as c0 union all --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@datafusion.apache.org For additional commands, e-mail: commits-h...@datafusion.apache.org