Expand description
Fuses multiple Filter operators into one and canonicalizes predicates.
If the Filter operator is empty, removes it.
use mz_expr::{MirRelationExpr, MirScalarExpr};
use mz_repr::{ReprColumnType, ReprRelationType, ReprScalarType};
use mz_repr::optimize::OptimizerFeatures;
use mz_transform::{reprtypecheck, Transform, TransformCtx};
use mz_transform::dataflow::DataflowMetainfo;
use mz_transform::fusion::filter::Filter;
let input = MirRelationExpr::Constant {
rows: Ok(vec![]),
typ: ReprRelationType::new(vec![
ReprColumnType { scalar_type: ReprScalarType::Bool, nullable: false },
]),
};
let predicate0 = MirScalarExpr::column(0);
let predicate1 = MirScalarExpr::column(0);
let predicate2 = MirScalarExpr::column(0);
let mut expr = input
.clone()
.filter(vec![predicate0.clone()])
.filter(vec![predicate1.clone()])
.filter(vec![predicate2.clone()]);
let features = OptimizerFeatures::default();
let typecheck_ctx = reprtypecheck::empty_context();
let mut df_meta = DataflowMetainfo::default();
let mut transform_ctx = TransformCtx::local(&features, &typecheck_ctx, &mut df_meta, None, None);
// Filter.transform() will deduplicate any predicates
Filter.transform(&mut expr, &mut transform_ctx);
let correct = input.filter(vec![predicate0]);
assert_eq!(expr, correct);Structsยง
- Filter
- Fuses multiple
Filteroperators into one and deduplicates predicates.