in crates/datafusion/src/lib.rs [109:125]
fn can_push_down(&self, expr: &Expr) -> bool {
match expr {
Expr::BinaryExpr(binary_expr) => {
let left = &binary_expr.left;
let op = &binary_expr.op;
let right = &binary_expr.right;
self.is_supported_operator(op)
&& self.is_supported_operand(left)
&& self.is_supported_operand(right)
}
Expr::Not(inner_expr) => {
// Recursively check if the inner expression can be pushed down
self.can_push_down(inner_expr)
}
_ => false,
}
}