From 5c7e47d96765f2c86760a90c684b9d234a0b999e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Heres?= Date: Fri, 21 Jul 2023 22:42:38 +0200 Subject: [PATCH] Speedup scalar_to_array for decimal --- datafusion/common/src/scalar.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/datafusion/common/src/scalar.rs b/datafusion/common/src/scalar.rs index 2011247346e0..99ff5f3384d4 100644 --- a/datafusion/common/src/scalar.rs +++ b/datafusion/common/src/scalar.rs @@ -2750,11 +2750,18 @@ impl ScalarValue { scale: i8, size: usize, ) -> Decimal128Array { - std::iter::repeat(value) - .take(size) - .collect::() - .with_precision_and_scale(precision, scale) - .unwrap() + match value { + Some(val) => Decimal128Array::from(vec![val; size]) + .with_precision_and_scale(precision, scale) + .unwrap(), + None => { + let mut builder = Decimal128Array::builder(size) + .with_precision_and_scale(precision, scale) + .unwrap(); + builder.append_nulls(size); + builder.finish() + } + } } /// Converts a scalar value into an array of `size` rows.