in src/pyarrow_filter_expression.rs [56:88]
fn extract_scalar_list<'py>(
exprs: &[Expr],
py: Python<'py>,
) -> PyDataFusionResult<Vec<Bound<'py, PyAny>>> {
let ret = exprs
.iter()
.map(|expr| match expr {
// TODO: should we also leverage `ScalarValue::to_pyarrow` here?
Expr::Literal(v) => match v {
// The unwraps here are for infallible conversions
ScalarValue::Boolean(Some(b)) => Ok(b.into_bound_py_any(py)?),
ScalarValue::Int8(Some(i)) => Ok(i.into_bound_py_any(py)?),
ScalarValue::Int16(Some(i)) => Ok(i.into_bound_py_any(py)?),
ScalarValue::Int32(Some(i)) => Ok(i.into_bound_py_any(py)?),
ScalarValue::Int64(Some(i)) => Ok(i.into_bound_py_any(py)?),
ScalarValue::UInt8(Some(i)) => Ok(i.into_bound_py_any(py)?),
ScalarValue::UInt16(Some(i)) => Ok(i.into_bound_py_any(py)?),
ScalarValue::UInt32(Some(i)) => Ok(i.into_bound_py_any(py)?),
ScalarValue::UInt64(Some(i)) => Ok(i.into_bound_py_any(py)?),
ScalarValue::Float32(Some(f)) => Ok(f.into_bound_py_any(py)?),
ScalarValue::Float64(Some(f)) => Ok(f.into_bound_py_any(py)?),
ScalarValue::Utf8(Some(s)) => Ok(s.into_bound_py_any(py)?),
_ => Err(PyDataFusionError::Common(format!(
"PyArrow can't handle ScalarValue: {v:?}"
))),
},
_ => Err(PyDataFusionError::Common(format!(
"Only a list of Literals are supported got {expr:?}"
))),
})
.collect();
ret
}