MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / transform

Method transform

src/transform/src/monotonic.rs:29–56  ·  view source on GitHub ↗

Transforms `expr` by propagating information about monotonicity through operators, using [`mz_repr::optimize::OptimizerFeatures`] from `ctx` and global monotonic ids.

(
        &self,
        expr: &mut MirRelationExpr,
        ctx: &mut TransformCtx,
        global_monotonic_ids: &BTreeSet<GlobalId>,
    )

Source from the content-addressed store, hash-verified

27 /// Transforms `expr` by propagating information about monotonicity through operators,
28 /// using [`mz_repr::optimize::OptimizerFeatures`] from `ctx` and global monotonic ids.
29 pub fn transform(
30 &self,
31 expr: &mut MirRelationExpr,
32 ctx: &mut TransformCtx,
33 global_monotonic_ids: &BTreeSet<GlobalId>,
34 ) -> Result<(), crate::RecursionLimitError> {
35 let mut builder = DerivedBuilder::new(ctx.features);
36 builder.require(Monotonic::new(global_monotonic_ids.clone()));
37 let derived = builder.visit(&*expr);
38
39 let mut todo = vec![(&mut *expr, derived.as_view())];
40 while let Some((expr, view)) = todo.pop() {
41 match expr {
42 MirRelationExpr::Reduce { monotonic, .. }
43 | MirRelationExpr::TopK { monotonic, .. } => {
44 *monotonic = *view
45 .last_child()
46 .value::<Monotonic>()
47 .expect("Monotonic required");
48 }
49 _ => {}
50 }
51 todo.extend(expr.children_mut().rev().zip_eq(view.children_rev()))
52 }
53
54 mz_repr::explain::trace_plan(&*expr);
55 Ok(())
56 }
57}

Callers 7

build_case_literalFunction · 0.45
run_single_view_testcaseFunction · 0.45
apply_transformFunction · 0.45

Calls 10

trace_planFunction · 0.85
expectMethod · 0.80
last_childMethod · 0.80
children_revMethod · 0.80
requireMethod · 0.45
cloneMethod · 0.45
visitMethod · 0.45
popMethod · 0.45
extendMethod · 0.45
children_mutMethod · 0.45

Tested by 2

run_single_view_testcaseFunction · 0.36
apply_transformFunction · 0.36