Skip to content

Simpify PyExpr::python_value by using ScalarValue::into_py #729

@Michael-J-Ward

Description

@Michael-J-Ward

Is your feature request related to a problem or challenge? Please describe what you are trying to do.
Currently, we de-structure every ScalarValue variant

pub fn python_value(&self, py: Python) -> PyResult<PyObject> {
match &self.expr {
Expr::Literal(scalar_value) => match scalar_value {
ScalarValue::Null => Err(py_datafusion_err(
datafusion_common::DataFusionError::NotImplemented(
"ScalarValue::Null".to_string(),
),
)),
ScalarValue::Boolean(v) => Ok(v.into_py(py)),
ScalarValue::Float32(v) => Ok(v.into_py(py)),
ScalarValue::Float64(v) => Ok(v.into_py(py)),
ScalarValue::Decimal128(v, _, _) => Ok(v.into_py(py)),

But ScalarValue already implements IntoPy:
https://github.com/apache/datafusion/blob/b7d2aea1dd4bb4a3abe3163dae936d7bfa5b32c9/datafusion/common/src/pyarrow.rs#L72-L76

If we want to avoid that unwrap, we could use the ToPyArrow trait:
https://github.com/apache/datafusion/blob/b7d2aea1dd4bb4a3abe3163dae936d7bfa5b32c9/datafusion/common/src/pyarrow.rs#L55-L64

Additional context
Are there other constraints the ScalarValue variants that datafusion-python can support other than what datafusion can convert?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions