Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor PrimitiveBuilder Constructors #2518

Merged
merged 7 commits into from Aug 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions arrow/benches/builder.rs
Expand Up @@ -43,7 +43,7 @@ fn bench_primitive(c: &mut Criterion) {
));
group.bench_function("bench_primitive", |b| {
b.iter(|| {
let mut builder = Int64Builder::new(64);
let mut builder = Int64Builder::with_capacity(64);
for _ in 0..NUM_BATCHES {
builder.append_slice(&data[..]);
}
Expand All @@ -57,7 +57,7 @@ fn bench_primitive_nulls(c: &mut Criterion) {
let mut group = c.benchmark_group("bench_primitive_nulls");
group.bench_function("bench_primitive_nulls", |b| {
b.iter(|| {
let mut builder = UInt8Builder::new(64);
let mut builder = UInt8Builder::with_capacity(64);
for _ in 0..NUM_BATCHES * BATCH_SIZE {
builder.append_null();
}
Expand Down
2 changes: 1 addition & 1 deletion arrow/benches/string_dictionary_builder.rs
Expand Up @@ -43,7 +43,7 @@ fn criterion_benchmark(c: &mut Criterion) {
|b| {
let strings = build_strings(dict_size, total_size, key_len);
b.iter(|| {
let keys = Int32Builder::new(strings.len());
let keys = Int32Builder::with_capacity(strings.len());
let values = StringBuilder::new((key_len + 1) * dict_size);
let mut builder = StringDictionaryBuilder::new(keys, values);

Expand Down
2 changes: 1 addition & 1 deletion arrow/benches/take_kernels.rs
Expand Up @@ -30,7 +30,7 @@ use arrow::{array::*, util::bench_util::*};

fn create_random_index(size: usize, null_density: f32) -> UInt32Array {
let mut rng = seedable_rng();
let mut builder = UInt32Builder::new(size);
let mut builder = UInt32Builder::with_capacity(size);
for _ in 0..size {
if rng.gen::<f32>() < null_density {
builder.append_null();
Expand Down
2 changes: 1 addition & 1 deletion arrow/examples/builders.rs
Expand Up @@ -34,7 +34,7 @@ fn main() {
// u64, i8, i16, i32, i64, f32, f64)

// Create a new builder with a capacity of 100
let mut primitive_array_builder = Int32Builder::new(100);
let mut primitive_array_builder = Int32Builder::with_capacity(100);

// Append an individual primitive value
primitive_array_builder.append_value(55);
Expand Down
12 changes: 6 additions & 6 deletions arrow/src/array/array_dictionary.rs
Expand Up @@ -329,7 +329,7 @@ impl<'a, T: ArrowDictionaryKeyType> FromIterator<Option<&'a str>> for Dictionary
fn from_iter<I: IntoIterator<Item = Option<&'a str>>>(iter: I) -> Self {
let it = iter.into_iter();
let (lower, _) = it.size_hint();
let key_builder = PrimitiveBuilder::<T>::new(lower);
let key_builder = PrimitiveBuilder::<T>::with_capacity(lower);
let value_builder = StringBuilder::new(256);
let mut builder = StringDictionaryBuilder::new(key_builder, value_builder);
it.for_each(|i| {
Expand Down Expand Up @@ -367,7 +367,7 @@ impl<'a, T: ArrowDictionaryKeyType> FromIterator<&'a str> for DictionaryArray<T>
fn from_iter<I: IntoIterator<Item = &'a str>>(iter: I) -> Self {
let it = iter.into_iter();
let (lower, _) = it.size_hint();
let key_builder = PrimitiveBuilder::<T>::new(lower);
let key_builder = PrimitiveBuilder::<T>::with_capacity(lower);
let value_builder = StringBuilder::new(256);
let mut builder = StringDictionaryBuilder::new(key_builder, value_builder);
it.for_each(|i| {
Expand Down Expand Up @@ -581,8 +581,8 @@ mod tests {

#[test]
fn test_dictionary_array_fmt_debug() {
let key_builder = PrimitiveBuilder::<UInt8Type>::new(3);
let value_builder = PrimitiveBuilder::<UInt32Type>::new(2);
let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(3);
let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
let mut builder = PrimitiveDictionaryBuilder::new(key_builder, value_builder);
builder.append(12345678).unwrap();
builder.append_null();
Expand All @@ -593,8 +593,8 @@ mod tests {
format!("{:?}", array)
);

let key_builder = PrimitiveBuilder::<UInt8Type>::new(20);
let value_builder = PrimitiveBuilder::<UInt32Type>::new(2);
let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(20);
let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
let mut builder = PrimitiveDictionaryBuilder::new(key_builder, value_builder);
for _ in 0..20 {
builder.append(1).unwrap();
Expand Down
2 changes: 1 addition & 1 deletion arrow/src/array/array_primitive.rs
Expand Up @@ -91,7 +91,7 @@ impl<T: ArrowPrimitiveType> PrimitiveArray<T> {

// Returns a new primitive array builder
pub fn builder(capacity: usize) -> PrimitiveBuilder<T> {
PrimitiveBuilder::<T>::new(capacity)
PrimitiveBuilder::<T>::with_capacity(capacity)
}

/// Returns the primitive value at index `i`.
Expand Down
2 changes: 1 addition & 1 deletion arrow/src/array/builder/buffer_builder.rs
Expand Up @@ -457,7 +457,7 @@ mod tests {

#[test]
fn test_append_values() {
let mut a = Int8Builder::new(0);
let mut a = Int8Builder::new();
a.append_value(1);
a.append_null();
a.append_value(-2);
Expand Down
2 changes: 1 addition & 1 deletion arrow/src/array/builder/fixed_size_list_builder.rs
Expand Up @@ -156,7 +156,7 @@ mod tests {

#[test]
fn test_fixed_size_list_array_builder() {
let values_builder = Int32Builder::new(10);
let values_builder = Int32Builder::new();
let mut builder = FixedSizeListBuilder::new(values_builder, 3);

// [[0, 1, 2], null, [3, null, 5], [6, 7, null]]
Expand Down
6 changes: 3 additions & 3 deletions arrow/src/array/builder/generic_list_builder.rs
Expand Up @@ -161,7 +161,7 @@ mod tests {
use crate::datatypes::DataType;

fn _test_generic_list_array_builder<O: OffsetSizeTrait>() {
let values_builder = Int32Builder::new(10);
let values_builder = Int32Builder::with_capacity(10);
let mut builder = GenericListBuilder::<O, _>::new(values_builder);

// [[0, 1, 2], [3, 4, 5], [6, 7]]
Expand Down Expand Up @@ -206,7 +206,7 @@ mod tests {
}

fn _test_generic_list_array_builder_nulls<O: OffsetSizeTrait>() {
let values_builder = Int32Builder::new(10);
let values_builder = Int32Builder::with_capacity(10);
let mut builder = GenericListBuilder::<O, _>::new(values_builder);

// [[0, 1, 2], null, [3, null, 5], [6, 7]]
Expand Down Expand Up @@ -265,7 +265,7 @@ mod tests {

#[test]
fn test_list_list_array_builder() {
let primitive_builder = Int32Builder::new(10);
let primitive_builder = Int32Builder::with_capacity(10);
let values_builder = ListBuilder::new(primitive_builder);
let mut builder = ListBuilder::new(values_builder);

Expand Down
2 changes: 1 addition & 1 deletion arrow/src/array/builder/map_builder.rs
Expand Up @@ -202,7 +202,7 @@ mod tests {
#[test]
fn test_map_array_builder() {
let string_builder = StringBuilder::new(4);
let int_builder = Int32Builder::new(4);
let int_builder = Int32Builder::with_capacity(4);

let mut builder = MapBuilder::new(None, string_builder, int_builder);

Expand Down
4 changes: 2 additions & 2 deletions arrow/src/array/builder/mod.rs
Expand Up @@ -73,8 +73,8 @@ pub use union_builder::UnionBuilder;
/// # fn main() -> std::result::Result<(), ArrowError> {
/// // Create
/// let mut data_builders: Vec<Box<dyn ArrayBuilder>> = vec![
/// Box::new(Float64Builder::new(1024)),
/// Box::new(Int64Builder::new(1024)),
/// Box::new(Float64Builder::new()),
/// Box::new(Int64Builder::new()),
/// Box::new(StringBuilder::new(1024)),
/// ];
///
Expand Down
15 changes: 13 additions & 2 deletions arrow/src/array/builder/primitive_builder.rs
Expand Up @@ -64,9 +64,20 @@ impl<T: ArrowPrimitiveType> ArrayBuilder for PrimitiveBuilder<T> {
}
}

impl<T: ArrowPrimitiveType> Default for PrimitiveBuilder<T> {
fn default() -> Self {
Self::new()
}
}

impl<T: ArrowPrimitiveType> PrimitiveBuilder<T> {
/// Creates a new primitive array builder
pub fn new(capacity: usize) -> Self {
pub fn new() -> Self {
Self::with_capacity(1024)
}

/// Creates a new primitive array builder with capacity no of items
pub fn with_capacity(capacity: usize) -> Self {
Self {
values_builder: BufferBuilder::<T::Native>::new(capacity),
null_buffer_builder: NullBufferBuilder::new(capacity),
Expand Down Expand Up @@ -355,7 +366,7 @@ mod tests {

#[test]
fn test_primitive_array_builder_finish() {
let mut builder = Int32Builder::new(5);
let mut builder = Int32Builder::new();
builder.append_slice(&[2, 4, 6, 8]);
let mut arr = builder.finish();
assert_eq!(4, arr.len());
Expand Down
12 changes: 6 additions & 6 deletions arrow/src/array/builder/primitive_dictionary_builder.rs
Expand Up @@ -60,8 +60,8 @@ impl<T: ToByteSlice> Eq for Value<T> {}
/// };
/// use arrow::datatypes::{UInt8Type, UInt32Type};
///
/// let key_builder = PrimitiveBuilder::<UInt8Type>::new(3);
/// let value_builder = PrimitiveBuilder::<UInt32Type>::new(2);
/// let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(3);
/// let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
/// let mut builder = PrimitiveDictionaryBuilder::new(key_builder, value_builder);
/// builder.append(12345678).unwrap();
/// builder.append_null();
Expand Down Expand Up @@ -211,8 +211,8 @@ mod tests {

#[test]
fn test_primitive_dictionary_builder() {
let key_builder = PrimitiveBuilder::<UInt8Type>::new(3);
let value_builder = PrimitiveBuilder::<UInt32Type>::new(2);
let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(3);
let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
let mut builder = PrimitiveDictionaryBuilder::new(key_builder, value_builder);
builder.append(12345678).unwrap();
builder.append_null();
Expand All @@ -239,8 +239,8 @@ mod tests {
#[test]
#[should_panic(expected = "DictionaryKeyOverflowError")]
fn test_primitive_dictionary_overflow() {
let key_builder = PrimitiveBuilder::<UInt8Type>::new(257);
let value_builder = PrimitiveBuilder::<UInt32Type>::new(257);
let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(257);
let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(257);
let mut builder = PrimitiveDictionaryBuilder::new(key_builder, value_builder);
// 256 unique keys.
for i in 0..256 {
Expand Down
10 changes: 5 additions & 5 deletions arrow/src/array/builder/string_dictionary_builder.rs
Expand Up @@ -42,7 +42,7 @@ use std::sync::Arc;
/// // Create a dictionary array indexed by bytes whose values are Strings.
/// // It can thus hold up to 256 distinct string values.
///
/// let key_builder = PrimitiveBuilder::<Int8Type>::new(100);
/// let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(100);
/// let value_builder = StringBuilder::new(100);
/// let mut builder = StringDictionaryBuilder::new(key_builder, value_builder);
///
Expand Down Expand Up @@ -111,7 +111,7 @@ where
///
/// let dictionary_values = StringArray::from(vec![None, Some("abc"), Some("def")]);
///
/// let mut builder = StringDictionaryBuilder::new_with_dictionary(PrimitiveBuilder::<Int16Type>::new(3), &dictionary_values).unwrap();
/// let mut builder = StringDictionaryBuilder::new_with_dictionary(PrimitiveBuilder::<Int16Type>::with_capacity(3), &dictionary_values).unwrap();
/// builder.append("def").unwrap();
/// builder.append_null();
/// builder.append("abc").unwrap();
Expand Down Expand Up @@ -290,7 +290,7 @@ mod tests {

#[test]
fn test_string_dictionary_builder() {
let key_builder = PrimitiveBuilder::<Int8Type>::new(5);
let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(5);
let value_builder = StringBuilder::new(2);
let mut builder = StringDictionaryBuilder::new(key_builder, value_builder);
builder.append("abc").unwrap();
Expand All @@ -317,7 +317,7 @@ mod tests {
fn test_string_dictionary_builder_with_existing_dictionary() {
let dictionary = StringArray::from(vec![None, Some("def"), Some("abc")]);

let key_builder = PrimitiveBuilder::<Int8Type>::new(6);
let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(6);
let mut builder =
StringDictionaryBuilder::new_with_dictionary(key_builder, &dictionary)
.unwrap();
Expand Down Expand Up @@ -349,7 +349,7 @@ mod tests {
let dictionary: Vec<Option<&str>> = vec![None];
let dictionary = StringArray::from(dictionary);

let key_builder = PrimitiveBuilder::<Int16Type>::new(4);
let key_builder = PrimitiveBuilder::<Int16Type>::with_capacity(4);
let mut builder =
StringDictionaryBuilder::new_with_dictionary(key_builder, &dictionary)
.unwrap();
Expand Down