MCPcopy Create free account
hub / github.com/apache/datafusion / apply

Function apply

datafusion/physical-expr-common/src/datum.rs:35–56  ·  view source on GitHub ↗

Applies a binary [`Datum`] kernel `f` to `lhs` and `rhs` This maps arrow-rs' [`Datum`] kernels to DataFusion's [`ColumnarValue`] abstraction

(
    lhs: &ColumnarValue,
    rhs: &ColumnarValue,
    f: impl Fn(&dyn Datum, &dyn Datum) -> Result<ArrayRef, ArrowError>,
)

Source from the content-addressed store, hash-verified

33///
34/// This maps arrow-rs' [`Datum`] kernels to DataFusion's [`ColumnarValue`] abstraction
35pub fn apply(
36 lhs: &ColumnarValue,
37 rhs: &ColumnarValue,
38 f: impl Fn(&dyn Datum, &dyn Datum) -> Result<ArrayRef, ArrowError>,
39) -> Result<ColumnarValue> {
40 match (&lhs, &rhs) {
41 (ColumnarValue::Array(left), ColumnarValue::Array(right)) => {
42 Ok(ColumnarValue::Array(f(&left.as_ref(), &right.as_ref())?))
43 }
44 (ColumnarValue::Scalar(left), ColumnarValue::Array(right)) => Ok(
45 ColumnarValue::Array(f(&left.to_scalar()?, &right.as_ref())?),
46 ),
47 (ColumnarValue::Array(left), ColumnarValue::Scalar(right)) => Ok(
48 ColumnarValue::Array(f(&left.as_ref(), &right.to_scalar()?)?),
49 ),
50 (ColumnarValue::Scalar(left), ColumnarValue::Scalar(right)) => {
51 let array = f(&left.to_scalar()?, &right.to_scalar()?)?;
52 let scalar = ScalarValue::try_from_array(array.as_ref(), 0)?;
53 Ok(ColumnarValue::Scalar(scalar))
54 }
55 }
56}
57
58/// Applies a binary [`Datum`] comparison operator `op` to `lhs` and `rhs`
59pub fn apply_cmp(

Callers 4

apply_date_subtractionFunction · 0.85
evaluateMethod · 0.85
apply_cmpFunction · 0.85
apply_cmp_for_nestedFunction · 0.85

Calls 2

to_scalarMethod · 0.80
as_refMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…