Module transform::fusion::filter [−][src]
Expand description
Fuses multiple Filter
operators into one; deduplicates predicates.
If the Filter
operator is empty, removes it.
use expr::{MirRelationExpr, MirScalarExpr};
use repr::{ColumnType, Datum, RelationType, ScalarType};
use transform::fusion::filter::Filter;
let input = MirRelationExpr::constant(vec![], RelationType::new(vec![
ScalarType::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()]);
// .transform() will deduplicate any predicates
use transform::{Transform, TransformArgs};
Filter.transform(&mut expr, TransformArgs {
id_gen: &mut Default::default(),
indexes: &std::collections::HashMap::new(),
});
let correct = input.filter(vec![predicate0]);
assert_eq!(expr, correct);
Structs
Fuses multiple Filter
operators into one and deduplicates predicates.