diff --git a/vortex-array/src/aggregate_fn/fns/max/mod.rs b/vortex-array/src/aggregate_fn/fns/max/mod.rs index 79194f56941..dcec83c2b1f 100644 --- a/vortex-array/src/aggregate_fn/fns/max/mod.rs +++ b/vortex-array/src/aggregate_fn/fns/max/mod.rs @@ -67,7 +67,7 @@ impl MaxPartial { } fn is_poisoned(&self) -> bool { - self.max.as_ref().is_some_and(scalar_is_nan) + self.element_dtype.is_float() && self.max.as_ref().is_some_and(scalar_is_nan) } } diff --git a/vortex-array/src/aggregate_fn/fns/min/mod.rs b/vortex-array/src/aggregate_fn/fns/min/mod.rs index 8a0fbd889ed..6f557c2158f 100644 --- a/vortex-array/src/aggregate_fn/fns/min/mod.rs +++ b/vortex-array/src/aggregate_fn/fns/min/mod.rs @@ -67,7 +67,7 @@ impl MinPartial { } fn is_poisoned(&self) -> bool { - self.min.as_ref().is_some_and(scalar_is_nan) + self.element_dtype.is_float() && self.min.as_ref().is_some_and(scalar_is_nan) } } diff --git a/vortex-array/src/aggregate_fn/fns/min_max/mod.rs b/vortex-array/src/aggregate_fn/fns/min_max/mod.rs index 097d3137f42..312ed1e1408 100644 --- a/vortex-array/src/aggregate_fn/fns/min_max/mod.rs +++ b/vortex-array/src/aggregate_fn/fns/min_max/mod.rs @@ -149,6 +149,10 @@ pub(crate) fn nan_scalar(dtype: &DType) -> Scalar { /// Whether a scalar holds a primitive float NaN value. pub(crate) fn scalar_is_nan(scalar: &Scalar) -> bool { + if !scalar.dtype().is_float() { + return false; + } + scalar.as_primitive_opt().is_some_and(|p| p.is_nan()) } @@ -233,7 +237,7 @@ impl MinMaxPartial { /// Whether the partial state is poisoned to NaN. fn is_poisoned(&self) -> bool { - self.min.as_ref().is_some_and(scalar_is_nan) + self.element_dtype.is_float() && self.min.as_ref().is_some_and(scalar_is_nan) } } diff --git a/vortex-array/src/dtype/ptype.rs b/vortex-array/src/dtype/ptype.rs index ab443618d66..a038eb328c2 100644 --- a/vortex-array/src/dtype/ptype.rs +++ b/vortex-array/src/dtype/ptype.rs @@ -21,6 +21,7 @@ use num_traits::Unsigned; use num_traits::bounds::UpperBounded; use vortex_error::VortexError; use vortex_error::VortexResult; +use vortex_error::vortex_bail; use vortex_error::vortex_err; use crate::dtype::DType; @@ -845,7 +846,7 @@ impl TryFrom<&DType> for PType { if let DType::Primitive(p, _) = value { Ok(*p) } else { - Err(vortex_err!("Cannot convert DType {} into PType", value)) + vortex_bail!("Cannot convert DType {value} into PType") } } }