in native/core/src/execution/shuffle/row.rs [1826:3144]
fn make_builders(
dt: &DataType,
row_num: usize,
prefer_dictionary_ratio: f64,
) -> Result<Box<dyn ArrayBuilder>, CometError> {
let builder: Box<dyn ArrayBuilder> = match dt {
DataType::Boolean => Box::new(BooleanBuilder::with_capacity(row_num)),
DataType::Int8 => Box::new(Int8Builder::with_capacity(row_num)),
DataType::Int16 => Box::new(Int16Builder::with_capacity(row_num)),
DataType::Int32 => Box::new(Int32Builder::with_capacity(row_num)),
DataType::Int64 => Box::new(Int64Builder::with_capacity(row_num)),
DataType::Float32 => Box::new(Float32Builder::with_capacity(row_num)),
DataType::Float64 => Box::new(Float64Builder::with_capacity(row_num)),
DataType::Decimal128(_, _) => {
Box::new(Decimal128Builder::with_capacity(row_num).with_data_type(dt.clone()))
}
DataType::Utf8 => {
if prefer_dictionary_ratio > 1.0 {
Box::new(StringDictionaryBuilder::<Int32Type>::with_capacity(
row_num / 2,
row_num,
1024,
))
} else {
Box::new(StringBuilder::with_capacity(row_num, 1024))
}
}
DataType::Binary => {
if prefer_dictionary_ratio > 1.0 {
Box::new(BinaryDictionaryBuilder::<Int32Type>::with_capacity(
row_num / 2,
row_num,
1024,
))
} else {
Box::new(BinaryBuilder::with_capacity(row_num, 1024))
}
}
DataType::Date32 => Box::new(Date32Builder::with_capacity(row_num)),
DataType::Timestamp(TimeUnit::Microsecond, _) => {
Box::new(TimestampMicrosecondBuilder::with_capacity(row_num).with_data_type(dt.clone()))
}
DataType::Map(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)?;
// TODO: support other types of map after new release of Arrow. In new API, `MapBuilder`
// can take general `Box<dyn ArrayBuilder>` as key/value builder.
match (key_dt, value_dt) {
(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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_field_names), *key_builder, *value_builder)
.with_values_field(Arc::clone(value_field)),
)
}
(
DataType::Timestamp(TimeUnit::Microsecond, _),
DataType::Timestamp(TimeUnit::Microsecond, _),
) => {
let key_builder = downcast_builder!(TimestampMicrosecondBuilder, key_builder);
let value_builder =
downcast_builder!(TimestampMicrosecondBuilder, 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_field_names), *key_builder, *value_builder)
.with_values_field(Arc::clone(value_field)),
)
}
_ => {
return Err(CometError::Internal(format!(
"Unsupported map type: {:?}",
field.data_type()
)))
}
}
}
DataType::List(field) => {
// Disable dictionary encoding for array element
let value_builder =
make_builders(field.data_type(), NESTED_TYPE_BUILDER_CAPACITY, 1.0)?;
// Needed to overwrite default ListBuilder creation having the incoming field schema to be driving
let value_field = Arc::clone(field);
match field.data_type() {
DataType::Boolean => {
let builder = downcast_builder!(BooleanBuilder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Int8 => {
let builder = downcast_builder!(Int8Builder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Int16 => {
let builder = downcast_builder!(Int16Builder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Int32 => {
let builder = downcast_builder!(Int32Builder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Int64 => {
let builder = downcast_builder!(Int64Builder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Float32 => {
let builder = downcast_builder!(Float32Builder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Float64 => {
let builder = downcast_builder!(Float64Builder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Decimal128(_, _) => {
let builder = downcast_builder!(Decimal128Builder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Timestamp(TimeUnit::Microsecond, _) => {
let builder = downcast_builder!(TimestampMicrosecondBuilder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Date32 => {
let builder = downcast_builder!(Date32Builder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Binary => {
let builder = downcast_builder!(BinaryBuilder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Utf8 => {
let builder = downcast_builder!(StringBuilder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
DataType::Struct(_) => {
let builder = downcast_builder!(StructBuilder, value_builder);
Box::new(ListBuilder::new(*builder).with_field(value_field))
}
// TODO: nested list is not supported. Due to the design of `ListBuilder`, it has
// a `T: ArrayBuilder` as type parameter. It makes hard to construct an arbitrarily
// nested `ListBuilder`.
DataType::List(_) => {
return Err(CometError::Internal(
"list of list is not supported type".to_string(),
))
}
_ => {
return Err(CometError::Internal(format!(
"Unsupported list type: {:?}",
field.data_type()
)))
}
}
}
DataType::Struct(fields) => {
let field_builders = fields
.iter()
// Disable dictionary encoding for struct fields
.map(|field| make_builders(field.data_type(), row_num, 1.0))
.collect::<Result<Vec<_>, _>>()?;
Box::new(StructBuilder::new(fields.clone(), field_builders))
}
_ => return Err(CometError::Internal(format!("Unsupported type: {:?}", dt))),
};
Ok(builder)
}