(
&self,
nested: &mut Iterative<'b, S, u64>,
local_arrangements: &VariableMap<Iterative<'b, S, u64>>,
context: &mut I,
)
| 71 | } |
| 72 | |
| 73 | fn implement<'b, T, I, S>( |
| 74 | &self, |
| 75 | nested: &mut Iterative<'b, S, u64>, |
| 76 | local_arrangements: &VariableMap<Iterative<'b, S, u64>>, |
| 77 | context: &mut I, |
| 78 | ) -> (Implemented<'b, S>, ShutdownHandle) |
| 79 | where |
| 80 | T: Timestamp + Lattice, |
| 81 | I: ImplContext<T>, |
| 82 | S: Scope<Timestamp = T>, |
| 83 | { |
| 84 | let (relation, mut shutdown_handle) = |
| 85 | self.plan.implement(nested, local_arrangements, context); |
| 86 | |
| 87 | let key_offsets: Vec<usize> = self |
| 88 | .variables |
| 89 | .iter() |
| 90 | .map(|variable| relation.binds(*variable).expect("variable not found")) |
| 91 | .collect(); |
| 92 | |
| 93 | let binary_predicate = match self.predicate { |
| 94 | Predicate::LT => lt, |
| 95 | Predicate::LTE => lte, |
| 96 | Predicate::GT => gt, |
| 97 | Predicate::GTE => gte, |
| 98 | Predicate::EQ => eq, |
| 99 | Predicate::NEQ => neq, |
| 100 | }; |
| 101 | |
| 102 | let variables = relation.variables(); |
| 103 | let projected = { |
| 104 | let (projected, shutdown) = relation.projected(nested, context, &variables); |
| 105 | shutdown_handle.merge_with(shutdown); |
| 106 | projected |
| 107 | }; |
| 108 | |
| 109 | let filtered = if let Some(constant) = self.constants[0].clone() { |
| 110 | CollectionRelation { |
| 111 | variables, |
| 112 | tuples: projected |
| 113 | .filter(move |tuple| binary_predicate(&constant, &tuple[key_offsets[0]])), |
| 114 | } |
| 115 | } else if let Some(constant) = self.constants[1].clone() { |
| 116 | CollectionRelation { |
| 117 | variables, |
| 118 | tuples: projected |
| 119 | .filter(move |tuple| binary_predicate(&tuple[key_offsets[0]], &constant)), |
| 120 | } |
| 121 | } else { |
| 122 | CollectionRelation { |
| 123 | variables, |
| 124 | tuples: projected.filter(move |tuple| { |
| 125 | binary_predicate(&tuple[key_offsets[0]], &tuple[key_offsets[1]]) |
| 126 | }), |
| 127 | } |
| 128 | }; |
| 129 | |
| 130 | (Implemented::Collection(filtered), shutdown_handle) |
nothing calls this directly
no test coverage detected