Function mz_compute::render::join::delta_join::build_halfjoin
source ยท fn build_halfjoin<G, Tr, K, 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_token: ShutdownToken,
) -> (Collection<G, (Row, G::Timestamp), Diff>, Collection<G, DataflowError, Diff>)where
G: Scope,
G::Timestamp: RenderTimestamp,
Tr: TraceReader<Time = G::Timestamp, Diff = Diff> + Clone + 'static,
K: ExchangeData + Hashable + Default + FromDatumIter + ToDatumIter,
for<'a> Tr::Key<'a>: IntoOwned<'a, Owned = K>,
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.