use datafusion::{
arrow::datatypes::SchemaRef,
catalog::Session,
common::DFSchema,
logical_expr::utils::conjunction,
physical_plan::{PhysicalExpr, expressions},
prelude::*,
};
use std::sync::Arc;
pub fn filters_to_predicate(
schema: SchemaRef,
state: &dyn Session,
filters: &[Expr],
) -> datafusion::error::Result<Arc<dyn PhysicalExpr>> {
let df_schema = DFSchema::try_from(schema)?;
let predicate = conjunction(filters.to_vec());
let predicate = predicate
.map(|predicate| state.create_physical_expr(predicate, &df_schema))
.transpose()?
.unwrap_or_else(|| expressions::lit(true));
Ok(predicate)
}