This is an automated email from the ASF dual-hosted git repository.

berkay pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 55a0040e82 Tidy up join test code (#13604)
55a0040e82 is described below

commit 55a0040e82c2e3b0dd7b05ff01a5756c46917fbc
Author: Mehmet Ozan Kabak <[email protected]>
AuthorDate: Fri Nov 29 17:29:37 2024 +0300

    Tidy up join test code (#13604)
---
 .../core/src/physical_optimizer/join_selection.rs  | 44 +++++++++++-----------
 datafusion/physical-plan/src/joins/test_utils.rs   | 20 +++++-----
 2 files changed, 33 insertions(+), 31 deletions(-)

diff --git a/datafusion/core/src/physical_optimizer/join_selection.rs 
b/datafusion/core/src/physical_optimizer/join_selection.rs
index 511aaacf3e..9d65c6ded4 100644
--- a/datafusion/core/src/physical_optimizer/join_selection.rs
+++ b/datafusion/core/src/physical_optimizer/join_selection.rs
@@ -123,7 +123,7 @@ fn supports_swap(join_type: JoinType) -> bool {
 
 /// This function returns the new join type we get after swapping the given
 /// join's inputs.
-fn swap_join_type(join_type: JoinType) -> JoinType {
+pub(crate) fn swap_join_type(join_type: JoinType) -> JoinType {
     match join_type {
         JoinType::Inner => JoinType::Inner,
         JoinType::Full => JoinType::Full,
@@ -256,7 +256,7 @@ fn swap_nl_join(join: &NestedLoopJoinExec) -> 
Result<Arc<dyn ExecutionPlan>> {
 /// the output should not be impacted. This function creates the expressions
 /// that will allow to swap back the values from the original left as the first
 /// columns and those on the right next.
-fn swap_reverting_projection(
+pub(crate) fn swap_reverting_projection(
     left_schema: &Schema,
     right_schema: &Schema,
 ) -> Vec<(Arc<dyn PhysicalExpr>, String)> {
@@ -278,7 +278,7 @@ fn swap_reverting_projection(
 }
 
 /// Swaps join sides for filter column indices and produces new JoinFilter
-fn swap_filter(filter: &JoinFilter) -> JoinFilter {
+pub(crate) fn swap_filter(filter: &JoinFilter) -> JoinFilter {
     let column_indices = filter
         .column_indices()
         .iter()
@@ -736,6 +736,7 @@ mod tests_statistical {
     use arrow::datatypes::{DataType, Field};
     use datafusion_common::{stats::Precision, JoinType, ScalarValue};
     use datafusion_expr::Operator;
+    use datafusion_physical_expr::expressions::col;
     use datafusion_physical_expr::expressions::BinaryExpr;
     use datafusion_physical_expr::PhysicalExprRef;
 
@@ -1089,8 +1090,8 @@ mod tests_statistical {
             Arc::clone(&big),
             Arc::clone(&small),
             vec![(
-                Arc::new(Column::new_with_schema("big_col", 
&big.schema()).unwrap()),
-                Arc::new(Column::new_with_schema("small_col", 
&small.schema()).unwrap()),
+                col("big_col", &big.schema()).unwrap(),
+                col("small_col", &small.schema()).unwrap(),
             )],
             None,
             &JoinType::Inner,
@@ -1106,10 +1107,8 @@ mod tests_statistical {
             Arc::clone(&medium),
             Arc::new(child_join),
             vec![(
-                Arc::new(
-                    Column::new_with_schema("medium_col", 
&medium.schema()).unwrap(),
-                ),
-                Arc::new(Column::new_with_schema("small_col", 
&child_schema).unwrap()),
+                col("medium_col", &medium.schema()).unwrap(),
+                col("small_col", &child_schema).unwrap(),
             )],
             None,
             &JoinType::Left,
@@ -1421,8 +1420,8 @@ mod tests_statistical {
         ));
 
         let join_on = vec![(
-            Arc::new(Column::new_with_schema("small_col", 
&small.schema()).unwrap()) as _,
-            Arc::new(Column::new_with_schema("big_col", 
&big.schema()).unwrap()) as _,
+            col("small_col", &small.schema()).unwrap(),
+            col("big_col", &big.schema()).unwrap(),
         )];
         check_join_partition_mode(
             small.clone(),
@@ -1433,8 +1432,8 @@ mod tests_statistical {
         );
 
         let join_on = vec![(
-            Arc::new(Column::new_with_schema("big_col", 
&big.schema()).unwrap()) as _,
-            Arc::new(Column::new_with_schema("small_col", 
&small.schema()).unwrap()) as _,
+            col("big_col", &big.schema()).unwrap(),
+            col("small_col", &small.schema()).unwrap(),
         )];
         check_join_partition_mode(
             big,
@@ -1445,8 +1444,8 @@ mod tests_statistical {
         );
 
         let join_on = vec![(
-            Arc::new(Column::new_with_schema("small_col", 
&small.schema()).unwrap()) as _,
-            Arc::new(Column::new_with_schema("empty_col", 
&empty.schema()).unwrap()) as _,
+            col("small_col", &small.schema()).unwrap(),
+            col("empty_col", &empty.schema()).unwrap(),
         )];
         check_join_partition_mode(
             small.clone(),
@@ -1457,8 +1456,8 @@ mod tests_statistical {
         );
 
         let join_on = vec![(
-            Arc::new(Column::new_with_schema("empty_col", 
&empty.schema()).unwrap()) as _,
-            Arc::new(Column::new_with_schema("small_col", 
&small.schema()).unwrap()) as _,
+            col("empty_col", &empty.schema()).unwrap(),
+            col("small_col", &small.schema()).unwrap(),
         )];
         check_join_partition_mode(
             empty,
@@ -1627,6 +1626,7 @@ mod hash_join_tests {
 
     use arrow::datatypes::{DataType, Field};
     use arrow::record_batch::RecordBatch;
+    use datafusion_physical_expr::expressions::col;
 
     struct TestCase {
         case: String,
@@ -1969,7 +1969,7 @@ mod hash_join_tests {
                 false,
             )]))),
             2,
-        )) as Arc<dyn ExecutionPlan>;
+        )) as _;
         let right_exec = Arc::new(UnboundedExec::new(
             (!right_unbounded).then_some(1),
             RecordBatch::new_empty(Arc::new(Schema::new(vec![Field::new(
@@ -1978,21 +1978,21 @@ mod hash_join_tests {
                 false,
             )]))),
             2,
-        )) as Arc<dyn ExecutionPlan>;
+        )) as _;
 
         let join = Arc::new(HashJoinExec::try_new(
             Arc::clone(&left_exec),
             Arc::clone(&right_exec),
             vec![(
-                Arc::new(Column::new_with_schema("a", &left_exec.schema())?),
-                Arc::new(Column::new_with_schema("b", &right_exec.schema())?),
+                col("a", &left_exec.schema())?,
+                col("b", &right_exec.schema())?,
             )],
             None,
             &t.initial_join_type,
             None,
             t.initial_mode,
             false,
-        )?);
+        )?) as _;
 
         let optimized_join_plan = hash_join_swap_subrule(join, 
&ConfigOptions::new())?;
 
diff --git a/datafusion/physical-plan/src/joins/test_utils.rs 
b/datafusion/physical-plan/src/joins/test_utils.rs
index 421fd0da80..37d6c0aff8 100644
--- a/datafusion/physical-plan/src/joins/test_utils.rs
+++ b/datafusion/physical-plan/src/joins/test_utils.rs
@@ -47,21 +47,23 @@ use rand::prelude::StdRng;
 use rand::{Rng, SeedableRng};
 
 pub fn compare_batches(collected_1: &[RecordBatch], collected_2: 
&[RecordBatch]) {
+    let left_row_num: usize = collected_1.iter().map(|batch| 
batch.num_rows()).sum();
+    let right_row_num: usize = collected_2.iter().map(|batch| 
batch.num_rows()).sum();
+    if left_row_num == 0 && right_row_num == 0 {
+        return;
+    }
     // compare
     let first_formatted = 
pretty_format_batches(collected_1).unwrap().to_string();
     let second_formatted = 
pretty_format_batches(collected_2).unwrap().to_string();
 
-    let mut first_formatted_sorted: Vec<&str> = 
first_formatted.trim().lines().collect();
-    first_formatted_sorted.sort_unstable();
+    let mut first_lines: Vec<&str> = first_formatted.trim().lines().collect();
+    first_lines.sort_unstable();
 
-    let mut second_formatted_sorted: Vec<&str> =
-        second_formatted.trim().lines().collect();
-    second_formatted_sorted.sort_unstable();
+    let mut second_lines: Vec<&str> = 
second_formatted.trim().lines().collect();
+    second_lines.sort_unstable();
 
-    for (i, (first_line, second_line)) in first_formatted_sorted
-        .iter()
-        .zip(&second_formatted_sorted)
-        .enumerate()
+    for (i, (first_line, second_line)) in
+        first_lines.iter().zip(&second_lines).enumerate()
     {
         assert_eq!((i, first_line), (i, second_line));
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to