Skip to content

Commit e57dd22

Browse files
authored
[MINOR]: Move joinside struct to common (#7908)
* Move joinside struct to common * Update documentation
1 parent f72ee5e commit e57dd22

File tree

11 files changed

+54
-58
lines changed

11 files changed

+54
-58
lines changed

datafusion/common/src/join_type.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18-
//! [`JoinType`] and [`JoinConstraint`]
18+
//! Defines the [`JoinType`], [`JoinConstraint`] and [`JoinSide`] types.
1919
2020
use std::{
2121
fmt::{self, Display, Formatter},
@@ -95,3 +95,32 @@ pub enum JoinConstraint {
9595
/// Join USING
9696
Using,
9797
}
98+
99+
impl Display for JoinSide {
100+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
101+
match self {
102+
JoinSide::Left => write!(f, "left"),
103+
JoinSide::Right => write!(f, "right"),
104+
}
105+
}
106+
}
107+
108+
/// Join side.
109+
/// Stores the referred table side during calculations
110+
#[derive(Debug, Clone, Copy, PartialEq)]
111+
pub enum JoinSide {
112+
/// Left side of the join
113+
Left,
114+
/// Right side of the join
115+
Right,
116+
}
117+
118+
impl JoinSide {
119+
/// Inverse the join side
120+
pub fn negate(&self) -> Self {
121+
match self {
122+
JoinSide::Left => JoinSide::Right,
123+
JoinSide::Right => JoinSide::Left,
124+
}
125+
}
126+
}

datafusion/common/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ pub use functional_dependencies::{
5757
aggregate_functional_dependencies, get_target_functional_dependencies, Constraint,
5858
Constraints, Dependency, FunctionalDependence, FunctionalDependencies,
5959
};
60-
pub use join_type::{JoinConstraint, JoinType};
60+
pub use join_type::{JoinConstraint, JoinSide, JoinType};
6161
pub use scalar::{ScalarType, ScalarValue};
6262
pub use schema_reference::{OwnedSchemaReference, SchemaReference};
6363
pub use stats::{ColumnStatistics, Statistics};

datafusion/core/src/physical_optimizer/sort_pushdown.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,17 @@ use crate::physical_optimizer::utils::{
2121
add_sort_above, is_limit, is_sort_preserving_merge, is_union, is_window,
2222
};
2323
use crate::physical_plan::filter::FilterExec;
24-
use crate::physical_plan::joins::utils::{calculate_join_output_ordering, JoinSide};
24+
use crate::physical_plan::joins::utils::calculate_join_output_ordering;
2525
use crate::physical_plan::joins::{HashJoinExec, SortMergeJoinExec};
2626
use crate::physical_plan::projection::ProjectionExec;
2727
use crate::physical_plan::repartition::RepartitionExec;
2828
use crate::physical_plan::sorts::sort::SortExec;
2929
use crate::physical_plan::{with_new_children_if_necessary, ExecutionPlan};
3030

3131
use datafusion_common::tree_node::{Transformed, TreeNode, VisitRecursion};
32-
use datafusion_common::{plan_datafusion_err, plan_err, DataFusionError, Result};
32+
use datafusion_common::{
33+
plan_datafusion_err, plan_err, DataFusionError, JoinSide, Result,
34+
};
3335
use datafusion_expr::JoinType;
3436
use datafusion_physical_expr::expressions::Column;
3537
use datafusion_physical_expr::utils::{

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

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use std::{any::Any, usize, vec};
2727
use crate::joins::utils::{
2828
adjust_indices_by_join_type, apply_join_filter_to_indices, build_batch_from_indices,
2929
calculate_join_output_ordering, combine_join_ordering_equivalence_properties,
30-
get_final_indices_from_bit_map, need_produce_result_in_final, JoinSide,
30+
get_final_indices_from_bit_map, need_produce_result_in_final,
3131
};
3232
use crate::DisplayAs;
3333
use crate::{
@@ -64,7 +64,7 @@ use arrow::util::bit_util;
6464
use arrow_array::cast::downcast_array;
6565
use arrow_schema::ArrowError;
6666
use datafusion_common::{
67-
exec_err, internal_err, plan_err, DataFusionError, JoinType, Result,
67+
exec_err, internal_err, plan_err, DataFusionError, JoinSide, JoinType, Result,
6868
};
6969
use datafusion_execution::memory_pool::{MemoryConsumer, MemoryReservation};
7070
use datafusion_execution::TaskContext;
@@ -1069,14 +1069,9 @@ mod tests {
10691069
use hashbrown::raw::RawTable;
10701070

10711071
use crate::{
1072-
common,
1073-
expressions::Column,
1074-
hash_utils::create_hashes,
1075-
joins::{hash_join::build_equal_condition_join_indices, utils::JoinSide},
1076-
memory::MemoryExec,
1077-
repartition::RepartitionExec,
1078-
test::build_table_i32,
1079-
test::exec::MockExec,
1072+
common, expressions::Column, hash_utils::create_hashes,
1073+
joins::hash_join::build_equal_condition_join_indices, memory::MemoryExec,
1074+
repartition::RepartitionExec, test::build_table_i32, test::exec::MockExec,
10801075
};
10811076
use datafusion_execution::config::SessionConfig;
10821077
use datafusion_execution::runtime_env::{RuntimeConfig, RuntimeEnv};

datafusion/physical-plan/src/joins/hash_join_utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ use std::ops::IndexMut;
2424
use std::sync::Arc;
2525
use std::{fmt, usize};
2626

27-
use crate::joins::utils::{JoinFilter, JoinSide};
27+
use crate::joins::utils::JoinFilter;
2828

2929
use arrow::compute::concat_batches;
3030
use arrow::datatypes::{ArrowNativeType, SchemaRef};
3131
use arrow_array::builder::BooleanBufferBuilder;
3232
use arrow_array::{ArrowPrimitiveType, NativeAdapter, PrimitiveArray, RecordBatch};
3333
use datafusion_common::tree_node::{Transformed, TreeNode};
34-
use datafusion_common::{DataFusionError, Result, ScalarValue};
34+
use datafusion_common::{DataFusionError, JoinSide, Result, ScalarValue};
3535
use datafusion_physical_expr::expressions::Column;
3636
use datafusion_physical_expr::intervals::{Interval, IntervalBound};
3737
use datafusion_physical_expr::utils::collect_columns;
@@ -732,7 +732,7 @@ pub mod tests {
732732
use crate::{
733733
expressions::Column,
734734
expressions::PhysicalSortExpr,
735-
joins::utils::{ColumnIndex, JoinFilter, JoinSide},
735+
joins::utils::{ColumnIndex, JoinFilter},
736736
};
737737
use arrow::compute::SortOptions;
738738
use arrow::datatypes::{DataType, Field, Schema};

datafusion/physical-plan/src/joins/nested_loop_join.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use crate::joins::utils::{
3131
estimate_join_statistics, get_anti_indices, get_anti_u64_indices,
3232
get_final_indices_from_bit_map, get_semi_indices, get_semi_u64_indices,
3333
partitioned_join_output_partitioning, BuildProbeJoinMetrics, ColumnIndex, JoinFilter,
34-
JoinSide, OnceAsync, OnceFut,
34+
OnceAsync, OnceFut,
3535
};
3636
use crate::metrics::{ExecutionPlanMetricsSet, MetricsSet};
3737
use crate::{
@@ -45,7 +45,7 @@ use arrow::array::{
4545
use arrow::datatypes::{Schema, SchemaRef};
4646
use arrow::record_batch::RecordBatch;
4747
use arrow::util::bit_util;
48-
use datafusion_common::{exec_err, DataFusionError, Result, Statistics};
48+
use datafusion_common::{exec_err, DataFusionError, JoinSide, Result, Statistics};
4949
use datafusion_execution::memory_pool::{MemoryConsumer, MemoryReservation};
5050
use datafusion_execution::TaskContext;
5151
use datafusion_expr::JoinType;
@@ -743,7 +743,6 @@ mod tests {
743743
use std::sync::Arc;
744744

745745
use super::*;
746-
use crate::joins::utils::JoinSide;
747746
use crate::{
748747
common, expressions::Column, memory::MemoryExec, repartition::RepartitionExec,
749748
test::build_table_i32,

datafusion/physical-plan/src/joins/sort_merge_join.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use crate::expressions::{Column, PhysicalSortExpr};
3434
use crate::joins::utils::{
3535
build_join_schema, calculate_join_output_ordering, check_join_is_valid,
3636
combine_join_equivalence_properties, combine_join_ordering_equivalence_properties,
37-
estimate_join_statistics, partitioned_join_output_partitioning, JoinOn, JoinSide,
37+
estimate_join_statistics, partitioned_join_output_partitioning, JoinOn,
3838
};
3939
use crate::metrics::{ExecutionPlanMetricsSet, MetricBuilder, MetricsSet};
4040
use crate::{
@@ -49,7 +49,7 @@ use arrow::datatypes::{DataType, SchemaRef, TimeUnit};
4949
use arrow::error::ArrowError;
5050
use arrow::record_batch::RecordBatch;
5151
use datafusion_common::{
52-
internal_err, not_impl_err, plan_err, DataFusionError, JoinType, Result,
52+
internal_err, not_impl_err, plan_err, DataFusionError, JoinSide, JoinType, Result,
5353
};
5454
use datafusion_execution::memory_pool::{MemoryConsumer, MemoryReservation};
5555
use datafusion_execution::TaskContext;

datafusion/physical-plan/src/joins/symmetric_hash_join.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use crate::joins::hash_join_utils::{
4343
use crate::joins::utils::{
4444
build_batch_from_indices, build_join_schema, check_join_is_valid,
4545
combine_join_equivalence_properties, partitioned_join_output_partitioning,
46-
prepare_sorted_exprs, ColumnIndex, JoinFilter, JoinOn, JoinSide,
46+
prepare_sorted_exprs, ColumnIndex, JoinFilter, JoinOn,
4747
};
4848
use crate::{
4949
expressions::{Column, PhysicalSortExpr},
@@ -58,7 +58,9 @@ use arrow::compute::concat_batches;
5858
use arrow::datatypes::{Schema, SchemaRef};
5959
use arrow::record_batch::RecordBatch;
6060
use datafusion_common::utils::bisect;
61-
use datafusion_common::{internal_err, plan_err, DataFusionError, JoinType, Result};
61+
use datafusion_common::{
62+
internal_err, plan_err, DataFusionError, JoinSide, JoinType, Result,
63+
};
6264
use datafusion_execution::memory_pool::MemoryConsumer;
6365
use datafusion_execution::TaskContext;
6466
use datafusion_physical_expr::intervals::ExprIntervalGraph;

datafusion/physical-plan/src/joins/utils.rs

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
//! Join related functionality used both on logical and physical plans
1919
2020
use std::collections::HashSet;
21-
use std::fmt::{Display, Formatter};
2221
use std::future::Future;
2322
use std::sync::Arc;
2423
use std::task::{Context, Poll};
@@ -42,7 +41,7 @@ use datafusion_common::cast::as_boolean_array;
4241
use datafusion_common::stats::Precision;
4342
use datafusion_common::tree_node::{Transformed, TreeNode};
4443
use datafusion_common::{
45-
exec_err, plan_datafusion_err, plan_err, DataFusionError, JoinType, Result,
44+
exec_err, plan_datafusion_err, plan_err, DataFusionError, JoinSide, JoinType, Result,
4645
SharedResult,
4746
};
4847
use datafusion_physical_expr::expressions::Column;
@@ -456,34 +455,6 @@ pub fn combine_join_ordering_equivalence_properties(
456455
Ok(new_properties)
457456
}
458457

459-
impl Display for JoinSide {
460-
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
461-
match self {
462-
JoinSide::Left => write!(f, "left"),
463-
JoinSide::Right => write!(f, "right"),
464-
}
465-
}
466-
}
467-
468-
/// Used in ColumnIndex to distinguish which side the index is for
469-
#[derive(Debug, Clone, Copy, PartialEq)]
470-
pub enum JoinSide {
471-
/// Left side of the join
472-
Left,
473-
/// Right side of the join
474-
Right,
475-
}
476-
477-
impl JoinSide {
478-
/// Inverse the join side
479-
pub fn negate(&self) -> Self {
480-
match self {
481-
JoinSide::Left => JoinSide::Right,
482-
JoinSide::Right => JoinSide::Left,
483-
}
484-
}
485-
}
486-
487458
/// Information about the index and placement (left or right) of the columns
488459
#[derive(Debug, Clone)]
489460
pub struct ColumnIndex {

datafusion/proto/src/physical_plan/from_proto.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,12 @@ use datafusion::physical_plan::expressions::{
3535
Literal, NegativeExpr, NotExpr, TryCastExpr,
3636
};
3737
use datafusion::physical_plan::expressions::{GetFieldAccessExpr, GetIndexedFieldExpr};
38-
use datafusion::physical_plan::joins::utils::JoinSide;
3938
use datafusion::physical_plan::windows::create_window_expr;
4039
use datafusion::physical_plan::{
4140
functions, ColumnStatistics, Partitioning, PhysicalExpr, Statistics, WindowExpr,
4241
};
4342
use datafusion_common::stats::Precision;
44-
use datafusion_common::{not_impl_err, DataFusionError, Result, ScalarValue};
43+
use datafusion_common::{not_impl_err, DataFusionError, JoinSide, Result, ScalarValue};
4544

4645
use crate::common::proto_error;
4746
use crate::convert_required;

0 commit comments

Comments
 (0)