Skip to main content

JoinStep

Trait JoinStep 

Source
pub trait JoinStep<Row, Joined, Kind, On = ()> {
    type Marker;
    type Row;
}
Expand description

The marker and row type after joining Joined with join kind Kind (InnerJoin, LeftJoin, RightJoin, FullJoin or Lateral).

Join builder methods use this to compute their return type. It pushes Joined onto the scope, wrapping the sources an outer join can leave NULL in OuterJoined.

On is the sources tree of the join’s ON condition. It is recorded against the scope that includes Joined, which is exactly what the condition may reference (plus the enclosing query, for a correlated subquery). The joined source’s own ScopeEntry::Sources resolve against the enclosing query only, or against the new scope for a Lateral join. Nothing is checked here; the check happens at the terminal method.

Required Associated Types§

Source

type Marker

The new marker, with Joined pushed into its scope.

Source

type Row

The new inferred row type.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<M, Scope, Used, Row, J, On> JoinStep<Row, J, FullJoin, On> for Scoped<M, Scope, Used>
where M: JoinRow<Row, J, FullJoin>, J: ScopeEntry, Scope: OuterJoinScope,

Source§

type Marker = Scoped<M, Cons<OuterJoined<J>, <Scope as OuterJoinScope>::Out>, ((Used, <J as ScopeEntry>::Sources), At<Cons<OuterJoined<J>, <Scope as OuterJoinScope>::Out>, On>)>

Source§

type Row = <M as JoinRow<Row, J, FullJoin>>::Row

Source§

impl<M, Scope, Used, Row, J, On> JoinStep<Row, J, InnerJoin, On> for Scoped<M, Scope, Used>
where M: JoinRow<Row, J, InnerJoin>, J: ScopeEntry,

Source§

type Marker = Scoped<M, Cons<J, Scope>, ((Used, <J as ScopeEntry>::Sources), At<Cons<J, Scope>, On>)>

Source§

type Row = <M as JoinRow<Row, J, InnerJoin>>::Row

Source§

impl<M, Scope, Used, Row, J, On> JoinStep<Row, J, Lateral<InnerJoin>, On> for Scoped<M, Scope, Used>
where M: JoinRow<Row, J, InnerJoin>, J: ScopeEntry,

Source§

type Marker = Scoped<M, Cons<J, Scope>, ((Used, ()), At<Cons<J, Scope>, (On, <J as ScopeEntry>::Sources)>)>

Source§

type Row = <M as JoinRow<Row, J, InnerJoin>>::Row

Source§

impl<M, Scope, Used, Row, J, On> JoinStep<Row, J, Lateral<LeftJoin>, On> for Scoped<M, Scope, Used>
where M: JoinRow<Row, J, LeftJoin>, J: ScopeEntry,

Source§

type Marker = Scoped<M, Cons<OuterJoined<J>, Scope>, ((Used, ()), At<Cons<OuterJoined<J>, Scope>, (On, <J as ScopeEntry>::Sources)>)>

Source§

type Row = <M as JoinRow<Row, J, LeftJoin>>::Row

Source§

impl<M, Scope, Used, Row, J, On> JoinStep<Row, J, LeftJoin, On> for Scoped<M, Scope, Used>
where M: JoinRow<Row, J, LeftJoin>, J: ScopeEntry,

Source§

type Marker = Scoped<M, Cons<OuterJoined<J>, Scope>, ((Used, <J as ScopeEntry>::Sources), At<Cons<OuterJoined<J>, Scope>, On>)>

Source§

type Row = <M as JoinRow<Row, J, LeftJoin>>::Row

Source§

impl<M, Scope, Used, Row, J, On> JoinStep<Row, J, RightJoin, On> for Scoped<M, Scope, Used>
where M: JoinRow<Row, J, RightJoin>, J: ScopeEntry, Scope: OuterJoinScope,

Source§

type Marker = Scoped<M, Cons<J, <Scope as OuterJoinScope>::Out>, ((Used, <J as ScopeEntry>::Sources), At<Cons<J, <Scope as OuterJoinScope>::Out>, On>)>

Source§

type Row = <M as JoinRow<Row, J, RightJoin>>::Row