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>,
)
| 33 | /// |
| 34 | /// This maps arrow-rs' [`Datum`] kernels to DataFusion's [`ColumnarValue`] abstraction |
| 35 | pub 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` |
| 59 | pub fn apply_cmp( |
no test coverage detected
searching dependent graphs…