vortex_array/expr/forms/
extract_conjuncts.rs1use crate::expr::Expression;
5use crate::expr::exprs::binary::Binary;
6use crate::expr::exprs::operators::Operator;
7
8pub fn conjuncts(expr: &Expression) -> Vec<Expression> {
13 let mut conjuncts = vec![];
14 conjuncts_impl(expr, &mut conjuncts);
15 if conjuncts.is_empty() {
16 conjuncts.push(expr.clone());
17 }
18 conjuncts
19}
20
21fn conjuncts_impl(expr: &Expression, conjuncts: &mut Vec<Expression>) {
22 if let Some(expr) = expr.as_opt::<Binary>()
23 && expr.operator() == Operator::And
24 {
25 conjuncts_impl(expr.lhs(), conjuncts);
26 conjuncts_impl(expr.rhs(), conjuncts);
27 } else {
28 conjuncts.push(expr.clone())
29 }
30}