pub struct Join {
pub left: Arc<LogicalPlan>,
pub right: Arc<LogicalPlan>,
pub on: Vec<(Expr, Expr)>,
pub filter: Option<Expr>,
pub join_type: JoinType,
pub join_constraint: JoinConstraint,
pub schema: DFSchemaRef,
pub null_equality: NullEquality,
pub null_aware: bool,
}Expand description
Join two logical plans on one or more join columns
Fields§
§left: Arc<LogicalPlan>Left input
right: Arc<LogicalPlan>Right input
on: Vec<(Expr, Expr)>Equijoin clause expressed as pairs of (left, right) join expressions
filter: Option<Expr>Filters applied during join (non-equi conditions)
join_type: JoinTypeJoin type
join_constraint: JoinConstraintJoin constraint
schema: DFSchemaRefThe output schema, containing fields from the left and right inputs
null_equality: NullEqualityDefines the null equality for the join.
null_aware: boolWhether this is a null-aware anti join (for NOT IN semantics).
Only applies to LeftAnti joins. When true, implements SQL NOT IN semantics where:
- If the right side (subquery) contains any NULL in join keys, no rows are output
- Left side rows with NULL in join keys are not output
This is required for correct NOT IN subquery behavior with three-valued logic.
Implementations§
Source§impl Join
impl Join
Sourcepub fn try_new(
left: Arc<LogicalPlan>,
right: Arc<LogicalPlan>,
on: Vec<(Expr, Expr)>,
filter: Option<Expr>,
join_type: JoinType,
join_constraint: JoinConstraint,
null_equality: NullEquality,
null_aware: bool,
) -> Result<Self>
pub fn try_new( left: Arc<LogicalPlan>, right: Arc<LogicalPlan>, on: Vec<(Expr, Expr)>, filter: Option<Expr>, join_type: JoinType, join_constraint: JoinConstraint, null_equality: NullEquality, null_aware: bool, ) -> Result<Self>
Creates a new Join operator with automatically computed schema.
This constructor computes the schema based on the join type and inputs,
removing the need to manually specify the schema or call recompute_schema.
§Arguments
left- Left input planright- Right input planon- Join condition as a vector of (left_expr, right_expr) pairsfilter- Optional filter expression (for non-equijoin conditions)join_type- Type of join (Inner, Left, Right, etc.)join_constraint- Join constraint (On, Using)null_equality- How to handle nulls in join comparisonsnull_aware- Whether this is a null-aware anti join (for NOT IN semantics)
§Returns
A new Join operator with the computed schema
Sourcepub fn try_new_with_project_input(
original: &LogicalPlan,
left: Arc<LogicalPlan>,
right: Arc<LogicalPlan>,
column_on: (Vec<Column>, Vec<Column>),
) -> Result<(Self, bool)>
pub fn try_new_with_project_input( original: &LogicalPlan, left: Arc<LogicalPlan>, right: Arc<LogicalPlan>, column_on: (Vec<Column>, Vec<Column>), ) -> Result<(Self, bool)>
Create Join with input which wrapped with projection, this method is used in physical planning only to help create the physical join.
Trait Implementations§
Source§impl PartialOrd for Join
impl PartialOrd for Join
impl Eq for Join
impl StructuralPartialEq for Join
Auto Trait Implementations§
impl Freeze for Join
impl !RefUnwindSafe for Join
impl Send for Join
impl Sync for Join
impl Unpin for Join
impl UnsafeUnpin for Join
impl !UnwindSafe for Join
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more