diff --git a/arrow/src/compute/kernels/filter.rs b/arrow/src/compute/kernels/filter.rs index d1e2ad17593..150253b1c0d 100644 --- a/arrow/src/compute/kernels/filter.rs +++ b/arrow/src/compute/kernels/filter.rs @@ -338,6 +338,16 @@ fn filter_array(values: &dyn Array, predicate: &FilterPredicate) -> Result downcast_primitive_array! { values => Ok(Arc::new(filter_primitive(values, predicate))), + DataType::Decimal128(p, s) => { + let values = values.as_any().downcast_ref::().unwrap(); + let filtered = filter_primitive(values, predicate); + Ok(Arc::new(filtered.with_precision_and_scale(*p, *s).unwrap())) + } + DataType::Decimal256(p, s) => { + let values = values.as_any().downcast_ref::().unwrap(); + let filtered = filter_primitive(values, predicate); + Ok(Arc::new(filtered.with_precision_and_scale(*p, *s).unwrap())) + } DataType::Boolean => { let values = values.as_any().downcast_ref::().unwrap(); Ok(Arc::new(filter_boolean(values, predicate)))