Skip to content

Commit

Permalink
remove nested for distinct array
Browse files Browse the repository at this point in the history
Signed-off-by: jayzhan211 <jayzhan211@gmail.com>
  • Loading branch information
jayzhan211 committed Oct 19, 2023
1 parent 8c7c227 commit e7fd4ca
Showing 1 changed file with 1 addition and 144 deletions.
145 changes: 1 addition & 144 deletions datafusion/physical-expr/src/aggregate/array_agg_distinct.rs
Original file line number Diff line number Diff line change
Expand Up @@ -180,8 +180,7 @@ mod tests {
use arrow::record_batch::RecordBatch;
use arrow_array::cast::as_list_array;
use arrow_array::types::Int32Type;
use arrow_array::{Array, ListArray};
use arrow_buffer::OffsetBuffer;
use arrow_array::ListArray;
use datafusion_common::utils::wrap_into_list_array;
use datafusion_common::{internal_err, DataFusionError};

Expand Down Expand Up @@ -305,146 +304,4 @@ mod tests {

check_merge_distinct_array_agg(col1, col2, expected, DataType::Int32)
}

#[test]
fn distinct_array_agg_nested() -> Result<()> {
// [[1, 2, 3], [4, 5]]
let a1 = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
Some(1),
Some(2),
Some(3),
])]);
let a2 = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
Some(4),
Some(5),
])]);
let l1 = ListArray::new(
Arc::new(Field::new("item", a1.data_type().to_owned(), true)),
OffsetBuffer::from_lengths([2]),
arrow::compute::concat(&[&a1, &a2]).unwrap(),
None,
);

// [[6], [7, 8]]
let a1 =
ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![Some(6)])]);
let a2 = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
Some(7),
Some(8),
])]);
let l2 = ListArray::new(
Arc::new(Field::new("item", a1.data_type().to_owned(), true)),
OffsetBuffer::from_lengths([2]),
arrow::compute::concat(&[&a1, &a2]).unwrap(),
None,
);

// [[9]]
let a1 =
ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![Some(9)])]);
let l3 = ListArray::new(
Arc::new(Field::new("item", a1.data_type().to_owned(), true)),
OffsetBuffer::from_lengths([1]),
Arc::new(a1),
None,
);

let l1 = ScalarValue::List(Arc::new(l1));
let l2 = ScalarValue::List(Arc::new(l2));
let l3 = ScalarValue::List(Arc::new(l3));

// Duplicate l1 in the input array and check that it is deduped in the output.
let array = ScalarValue::iter_to_array(vec![l1.clone(), l2, l3, l1]).unwrap();

let expected =
ScalarValue::List(Arc::new(
ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
Some(1),
Some(2),
Some(3),
Some(4),
Some(5),
Some(6),
Some(7),
Some(8),
Some(9),
])]),
));

check_distinct_array_agg(
array,
expected,
DataType::List(Arc::new(Field::new_list(
"item",
Field::new("item", DataType::Int32, true),
true,
))),
)
}

#[test]
fn merge_distinct_array_agg_nested() -> Result<()> {
// [[1, 2], [3, 4]]
let a1 = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
Some(1),
Some(2),
])]);
let a2 = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
Some(3),
Some(4),
])]);
let l1 = ListArray::new(
Arc::new(Field::new("item", a1.data_type().to_owned(), true)),
OffsetBuffer::from_lengths([2]),
arrow::compute::concat(&[&a1, &a2]).unwrap(),
None,
);

let a1 =
ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![Some(5)])]);
let l2 = ListArray::new(
Arc::new(Field::new("item", a1.data_type().to_owned(), true)),
OffsetBuffer::from_lengths([1]),
Arc::new(a1),
None,
);

// [[6, 7], [8]]
let a1 = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
Some(6),
Some(7),
])]);
let a2 =
ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![Some(8)])]);
let l3 = ListArray::new(
Arc::new(Field::new("item", a1.data_type().to_owned(), true)),
OffsetBuffer::from_lengths([2]),
arrow::compute::concat(&[&a1, &a2]).unwrap(),
None,
);

let l1 = ScalarValue::List(Arc::new(l1));
let l2 = ScalarValue::List(Arc::new(l2));
let l3 = ScalarValue::List(Arc::new(l3));

// Duplicate l1 in the input array and check that it is deduped in the output.
let input1 = ScalarValue::iter_to_array(vec![l1.clone(), l2]).unwrap();
let input2 = ScalarValue::iter_to_array(vec![l1, l3]).unwrap();

let expected =
ScalarValue::List(Arc::new(
ListArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
Some(1),
Some(2),
Some(3),
Some(4),
Some(5),
Some(6),
Some(7),
Some(8),
])]),
));

check_merge_distinct_array_agg(input1, input2, expected, DataType::Int32)
}
}

0 comments on commit e7fd4ca

Please sign in to comment.