(
&self,
nested: &mut Iterative<'b, S, u64>,
local_arrangements: &VariableMap<Iterative<'b, S, u64>>,
context: &mut I,
)
| 309 | } |
| 310 | |
| 311 | fn implement<'b, T, I, S>( |
| 312 | &self, |
| 313 | nested: &mut Iterative<'b, S, u64>, |
| 314 | local_arrangements: &VariableMap<Iterative<'b, S, u64>>, |
| 315 | context: &mut I, |
| 316 | ) -> (Implemented<'b, S>, ShutdownHandle) |
| 317 | where |
| 318 | T: Timestamp + Lattice, |
| 319 | I: ImplContext<T>, |
| 320 | S: Scope<Timestamp = T>, |
| 321 | { |
| 322 | assert!(!self.variables.is_empty()); |
| 323 | |
| 324 | let (left, shutdown_left) = self |
| 325 | .left_plan |
| 326 | .implement(nested, local_arrangements, context); |
| 327 | let (right, shutdown_right) = |
| 328 | self.right_plan |
| 329 | .implement(nested, local_arrangements, context); |
| 330 | |
| 331 | let (implemented, mut shutdown_handle) = match left { |
| 332 | Implemented::Attribute(left) => { |
| 333 | match right { |
| 334 | Implemented::Attribute(right) => { |
| 335 | if self.variables.len() == 1 { |
| 336 | attribute_attribute(nested, context, self.variables[0], left, right) |
| 337 | } else if self.variables.len() == 2 { |
| 338 | unimplemented!(); |
| 339 | // intersect_attributes(nested, context, self.variables, left, right) |
| 340 | } else { |
| 341 | panic!( |
| 342 | "Attribute<->Attribute joins can't target more than two variables." |
| 343 | ); |
| 344 | } |
| 345 | } |
| 346 | Implemented::Collection(right) => { |
| 347 | collection_attribute(nested, context, &self.variables, right, left) |
| 348 | } |
| 349 | } |
| 350 | } |
| 351 | Implemented::Collection(left) => match right { |
| 352 | Implemented::Attribute(right) => { |
| 353 | collection_attribute(nested, context, &self.variables, left, right) |
| 354 | } |
| 355 | Implemented::Collection(right) => { |
| 356 | collection_collection(nested, context, &self.variables, left, right) |
| 357 | } |
| 358 | }, |
| 359 | }; |
| 360 | |
| 361 | shutdown_handle.merge_with(shutdown_left); |
| 362 | shutdown_handle.merge_with(shutdown_right); |
| 363 | |
| 364 | (implemented, shutdown_handle) |
| 365 | } |
| 366 | } |
nothing calls this directly
no test coverage detected