Applies a function across two datasets, in the cases where the JoinFunc
evaluates to true. The branches represent the divergent operations applied
to some common src. Each branch references the src exactly once. (Since no
constructor has more than one recursive component, it’s guaranteed that
neither side references the src _more_ than once.)
This case represents a full θJoin, but we could have an algebra that
rewites it as
Filter(_, EquiJoin(...))
to simplify behavior for the backend.
Applies a function across two datasets, in the cases where the JoinFunc evaluates to true. The branches represent the divergent operations applied to some common src. Each branch references the src exactly once. (Since no constructor has more than one recursive component, it’s guaranteed that neither side references the src _more_ than once.)
This case represents a full θJoin, but we could have an algebra that rewites it as Filter(_, EquiJoin(...)) to simplify behavior for the backend.