use crate::expr::Expression;
use crate::scalar_fn::fns::binary::Binary;
use crate::scalar_fn::fns::operators::Operator;
pub fn conjuncts(expr: &Expression) -> Vec<Expression> {
let mut conjuncts = vec![];
conjuncts_impl(expr, &mut conjuncts);
if conjuncts.is_empty() {
conjuncts.push(expr.clone());
}
conjuncts
}
fn conjuncts_impl(expr: &Expression, conjuncts: &mut Vec<Expression>) {
if let Some(operator) = expr.as_opt::<Binary>()
&& *operator == Operator::And
{
conjuncts_impl(expr.child(0), conjuncts);
conjuncts_impl(expr.child(1), conjuncts);
} else {
conjuncts.push(expr.clone())
}
}