fn build_halfjoin_trace<'scope, T, Tr>(
updates: VecCollection<'scope, T, (Row, T), Diff>,
trace: Arranged<'scope, Tr>,
prev_key: Vec<LirScalarExpr>,
prev_thinning: Vec<usize>,
strict: bool,
closure: JoinClosure,
) -> (VecCollection<'scope, T, (Row, T), Diff>, VecCollection<'scope, T, DataflowErrorSer, Diff>)where
T: RenderTimestamp,
Tr: TraceReader<Batch: Navigable, Time = T> + Clone + 'static,
for<'a> BatchCursor<Tr>: Cursor<Val<'a>: ExtendDatums, KeyContainer: BatchContainer<Owned = Row>, Time = T, Diff = Diff>,Expand description
Constructs a half_join from supplied arguments.
This method exists to factor common logic from the code paths that are generic over the type of
trace. strict breaks ties consistently: it is false when the source relation precedes the
lookup relation in the total order on relations, and true otherwise. A delta query pairs a
strict operator with a non-strict one, so each pair of matching updates interacts exactly once.
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.