fn build_halfjoin<G, Tr, CF>(
updates: Collection<G, (Row, G::Timestamp), Diff>,
trace: Arranged<G, Tr>,
prev_key: Vec<MirScalarExpr>,
prev_thinning: Vec<usize>,
comparison: CF,
closure: JoinClosure,
shutdown_probe: ShutdownProbe,
) -> (Collection<G, (Row, G::Timestamp), Diff>, Collection<G, DataflowError, Diff>)where
G: Scope,
G::Timestamp: RenderTimestamp,
Tr: TraceReader<KeyOwn = Row, Time = G::Timestamp, Diff = Diff> + Clone + 'static,
for<'a> Tr::Val<'a>: ToDatumIter,
CF: Fn(Tr::TimeGat<'_>, &G::Timestamp) -> bool + 'static,Expand description
Constructs a half_join from supplied arguments.
This method exists to factor common logic from four code paths that are generic over the type of trace.
The comparison function should either be le or lt depending on which relation comes first in the
total order on relations (in order to break ties consistently).
The input and output streams are of pairs (data, time) where the time component can be greater than
the time of the update. This operator may manipulate time as part of this pair, but will not manipulate
the time of the update. This is crucial for correctness, as the total order on times of updates is used
to ensure that any two updates are matched at most once.