Skip to content

Commit 072cbea

Browse files
committed
Refactor test setup for shared empty build fixtures
Extract shared empty-build/probe-error test setup into a new function, empty_build_with_probe_error_inputs(), in exec.rs. Both regression tests now reuse this setup, allowing each test to focus more on the join-type behavior it asserts rather than rebuilding the same fixture.
1 parent dcb4cd9 commit 072cbea

1 file changed

Lines changed: 26 additions & 42 deletions

File tree

  • datafusion/physical-plan/src/joins/hash_join

datafusion/physical-plan/src/joins/hash_join/exec.rs

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2275,6 +2275,28 @@ mod tests {
22752275
)
22762276
}
22772277

2278+
fn empty_build_with_probe_error_inputs() -> (Arc<dyn ExecutionPlan>, Arc<dyn ExecutionPlan>, JoinOn) {
2279+
let left_batch = build_table_i32(("a1", &vec![]), ("b1", &vec![]), ("c1", &vec![]));
2280+
let left_schema = left_batch.schema();
2281+
let left: Arc<dyn ExecutionPlan> =
2282+
TestMemoryExec::try_new_exec(&[vec![left_batch]], left_schema.clone(), None)
2283+
.unwrap();
2284+
2285+
let err = exec_err!("bad data error");
2286+
let right_batch =
2287+
build_table_i32(("a2", &vec![]), ("b1", &vec![]), ("c2", &vec![]));
2288+
let right_schema = right_batch.schema();
2289+
let on = vec![(
2290+
Arc::new(Column::new_with_schema("b1", &left_schema).unwrap()) as _,
2291+
Arc::new(Column::new_with_schema("b1", &right_schema).unwrap()) as _,
2292+
)];
2293+
let right: Arc<dyn ExecutionPlan> = Arc::new(
2294+
MockExec::new(vec![Ok(right_batch), err], right_schema).with_use_task(false),
2295+
);
2296+
2297+
(left, right, on)
2298+
}
2299+
22782300
async fn join_collect(
22792301
left: Arc<dyn ExecutionPlan>,
22802302
right: Arc<dyn ExecutionPlan>,
@@ -4985,26 +5007,7 @@ mod tests {
49855007

49865008
#[tokio::test]
49875009
async fn join_does_not_consume_probe_when_empty_build_fixes_output() {
4988-
let left_batch =
4989-
build_table_i32(("a1", &vec![]), ("b1", &vec![]), ("c1", &vec![]));
4990-
let left_schema = left_batch.schema();
4991-
4992-
let err = exec_err!("bad data error");
4993-
let right = build_table_i32(("a2", &vec![]), ("b1", &vec![]), ("c2", &vec![]));
4994-
4995-
let on = vec![(
4996-
Arc::new(Column::new_with_schema("b1", &left_schema).unwrap()) as _,
4997-
Arc::new(Column::new_with_schema("b1", &right.schema()).unwrap()) as _,
4998-
)];
4999-
let schema = right.schema();
5000-
let right_input =
5001-
Arc::new(MockExec::new(vec![Ok(right), err], schema).with_use_task(false));
5002-
let left: Arc<dyn ExecutionPlan> = TestMemoryExec::try_new_exec(
5003-
&[vec![left_batch]],
5004-
Arc::clone(&left_schema),
5005-
None,
5006-
)
5007-
.unwrap();
5010+
let (left, right_input, on) = empty_build_with_probe_error_inputs();
50085011

50095012
let join_types = vec![
50105013
JoinType::Inner,
@@ -5018,7 +5021,7 @@ mod tests {
50185021
for join_type in join_types {
50195022
let join = join(
50205023
Arc::clone(&left),
5021-
Arc::clone(&right_input) as Arc<dyn ExecutionPlan>,
5024+
Arc::clone(&right_input),
50225025
on.clone(),
50235026
&join_type,
50245027
NullEquality::NullEqualsNothing,
@@ -5038,26 +5041,7 @@ mod tests {
50385041

50395042
#[tokio::test]
50405043
async fn join_still_consumes_probe_when_empty_build_needs_probe_rows() {
5041-
let left_batch =
5042-
build_table_i32(("a1", &vec![]), ("b1", &vec![]), ("c1", &vec![]));
5043-
let left_schema = left_batch.schema();
5044-
5045-
let err = exec_err!("bad data error");
5046-
let right = build_table_i32(("a2", &vec![]), ("b1", &vec![]), ("c2", &vec![]));
5047-
5048-
let on = vec![(
5049-
Arc::new(Column::new_with_schema("b1", &left_schema).unwrap()) as _,
5050-
Arc::new(Column::new_with_schema("b1", &right.schema()).unwrap()) as _,
5051-
)];
5052-
let schema = right.schema();
5053-
let right_input =
5054-
Arc::new(MockExec::new(vec![Ok(right), err], schema).with_use_task(false));
5055-
let left: Arc<dyn ExecutionPlan> = TestMemoryExec::try_new_exec(
5056-
&[vec![left_batch]],
5057-
Arc::clone(&left_schema),
5058-
None,
5059-
)
5060-
.unwrap();
5044+
let (left, right_input, on) = empty_build_with_probe_error_inputs();
50615045

50625046
let join_types = vec![
50635047
JoinType::Right,
@@ -5069,7 +5053,7 @@ mod tests {
50695053
for join_type in join_types {
50705054
let join = join(
50715055
Arc::clone(&left),
5072-
Arc::clone(&right_input) as Arc<dyn ExecutionPlan>,
5056+
Arc::clone(&right_input),
50735057
on.clone(),
50745058
&join_type,
50755059
NullEquality::NullEqualsNothing,

0 commit comments

Comments
 (0)