Skip to content

Commit f59b94f

Browse files
authored
fix: use the values builder capacity for the hash map in PrimitiveDictionaryBuilder::new_from_builders (#7012)
* feat: allow setting custom value data type in `PrimitiveDictionaryBuilder` Fixes #7011 * use the values capacity for the hash map * update new_from_empty_builders and not new_from_builders
1 parent d6fa078 commit f59b94f

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

arrow-array/src/builder/primitive_dictionary_builder.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,11 @@ where
126126
keys_builder.is_empty() && values_builder.is_empty(),
127127
"keys and values builders must be empty"
128128
);
129+
let values_capacity = values_builder.capacity();
129130
Self {
130131
keys_builder,
131132
values_builder,
132-
map: HashMap::new(),
133+
map: HashMap::with_capacity(values_capacity),
133134
}
134135
}
135136

@@ -633,4 +634,19 @@ mod tests {
633634

634635
assert_eq!(values, [None, None]);
635636
}
637+
638+
#[test]
639+
fn creating_dictionary_from_builders_should_use_values_capacity_for_the_map() {
640+
let builder = PrimitiveDictionaryBuilder::<Int32Type, crate::types::TimestampMicrosecondType>::new_from_empty_builders(
641+
PrimitiveBuilder::with_capacity(1).with_data_type(DataType::Int32),
642+
PrimitiveBuilder::with_capacity(2).with_data_type(DataType::Timestamp(arrow_schema::TimeUnit::Microsecond, Some("+08:00".into()))),
643+
);
644+
645+
assert!(
646+
builder.map.capacity() >= builder.values_builder.capacity(),
647+
"map capacity {} should be at least the values capacity {}",
648+
builder.map.capacity(),
649+
builder.values_builder.capacity()
650+
)
651+
}
636652
}

0 commit comments

Comments
 (0)