Function canonicalize_equivalence_classes

Source
pub fn canonicalize_equivalence_classes(
    equivalences: &mut Vec<Vec<MirScalarExpr>>,
)
Expand description

Canonicalize only the equivalence classes of a join.

This function:

  • ensures the same expression appears in only one equivalence class.
  • ensures the equivalence classes are sorted and dedupped.
use mz_expr::MirScalarExpr;
use mz_expr::canonicalize::canonicalize_equivalence_classes;

let mut equivalences = vec![
    vec![MirScalarExpr::column(1), MirScalarExpr::column(4)],
    vec![MirScalarExpr::column(3), MirScalarExpr::column(5)],
    vec![MirScalarExpr::column(0), MirScalarExpr::column(3)],
    vec![MirScalarExpr::column(2), MirScalarExpr::column(2)],
];
let expected = vec![
    vec![MirScalarExpr::column(0),
        MirScalarExpr::column(3),
        MirScalarExpr::column(5)],
    vec![MirScalarExpr::column(1), MirScalarExpr::column(4)],
];
canonicalize_equivalence_classes(&mut equivalences);
assert_eq!(expected, equivalences)