fn extract_scalar_list()

in src/pyarrow_filter_expression.rs [55:82]


fn extract_scalar_list(exprs: &[Expr], py: Python) -> Result<Vec<PyObject>, DataFusionError> {
    let ret: Result<Vec<PyObject>, DataFusionError> = exprs
        .iter()
        .map(|expr| match expr {
            Expr::Literal(v) => match v {
                ScalarValue::Boolean(Some(b)) => Ok(b.into_py(py)),
                ScalarValue::Int8(Some(i)) => Ok(i.into_py(py)),
                ScalarValue::Int16(Some(i)) => Ok(i.into_py(py)),
                ScalarValue::Int32(Some(i)) => Ok(i.into_py(py)),
                ScalarValue::Int64(Some(i)) => Ok(i.into_py(py)),
                ScalarValue::UInt8(Some(i)) => Ok(i.into_py(py)),
                ScalarValue::UInt16(Some(i)) => Ok(i.into_py(py)),
                ScalarValue::UInt32(Some(i)) => Ok(i.into_py(py)),
                ScalarValue::UInt64(Some(i)) => Ok(i.into_py(py)),
                ScalarValue::Float32(Some(f)) => Ok(f.into_py(py)),
                ScalarValue::Float64(Some(f)) => Ok(f.into_py(py)),
                ScalarValue::Utf8(Some(s)) => Ok(s.into_py(py)),
                _ => Err(DataFusionError::Common(format!(
                    "PyArrow can't handle ScalarValue: {v:?}"
                ))),
            },
            _ => Err(DataFusionError::Common(format!(
                "Only a list of Literals are supported got {expr:?}"
            ))),
        })
        .collect();
    ret
}