Performs a relational equijoin among the input collections. The sequence `inputs` each describe different input collections, and the sequence `variables` describes equality constraints that some of their columns must satisfy. Each element in `variable` describes a set of pairs `(input_index, column_index)` where every value described by that set must be equal. For example, the pair `(input, col
(inputs: Vec<MirRelationExpr>, variables: Vec<Vec<(usize, usize)>>)
| 1290 | /// let result = joined.project(vec![0, 1, 3]); |
| 1291 | /// ``` |
| 1292 | pub fn join(inputs: Vec<MirRelationExpr>, variables: Vec<Vec<(usize, usize)>>) -> Self { |
| 1293 | let input_mapper = join_input_mapper::JoinInputMapper::new(&inputs); |
| 1294 | |
| 1295 | let equivalences = variables |
| 1296 | .into_iter() |
| 1297 | .map(|vs| { |
| 1298 | vs.into_iter() |
| 1299 | .map(|(r, c)| input_mapper.map_expr_to_global(MirScalarExpr::column(c), r)) |
| 1300 | .collect::<Vec<_>>() |
| 1301 | }) |
| 1302 | .collect::<Vec<_>>(); |
| 1303 | |
| 1304 | Self::join_scalars(inputs, equivalences) |
| 1305 | } |
| 1306 | |
| 1307 | /// Constructs a join operator from inputs and required-equal scalar expressions. |
| 1308 | pub fn join_scalars( |