Expand `ROLLUP(a, b, c)` → `[[a,b,c], [a,b], [a], []]`. The input is `Vec >` where each inner vec is one composite element. We flatten composite elements to individual expressions for simplicity — the outer product is: suffix-strip from all-present down to empty.
(groups: &[Vec<ast::Expr>])
| 156 | /// We flatten composite elements to individual expressions for simplicity — the |
| 157 | /// outer product is: suffix-strip from all-present down to empty. |
| 158 | fn expand_rollup(groups: &[Vec<ast::Expr>]) -> Vec<Vec<&ast::Expr>> { |
| 159 | // Flatten composite groups (e.g. `(a, b)` as one element) into atoms. |
| 160 | let atoms: Vec<&ast::Expr> = groups.iter().flat_map(|g| g.iter()).collect(); |
| 161 | let n = atoms.len(); |
| 162 | // Prefixes: atoms[0..n], atoms[0..n-1], ..., atoms[0..0] (empty). |
| 163 | (0..=n).rev().map(|len| atoms[..len].to_vec()).collect() |
| 164 | } |
| 165 | |
| 166 | /// Expand `CUBE(a, b)` → all 2^N subsets. |
| 167 | fn expand_cube(groups: &[Vec<ast::Expr>]) -> Vec<Vec<&ast::Expr>> { |
no test coverage detected