Skip to content

Commit 466b6c3

Browse files
DandandanDaniël Heres
and
Daniël Heres
authored
Speedup scalar_to_array for decimal (#7055)
Co-authored-by: Daniël Heres <[email protected]>
1 parent 77fafb9 commit 466b6c3

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

datafusion/common/src/scalar.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2750,11 +2750,18 @@ impl ScalarValue {
27502750
scale: i8,
27512751
size: usize,
27522752
) -> Decimal128Array {
2753-
std::iter::repeat(value)
2754-
.take(size)
2755-
.collect::<Decimal128Array>()
2756-
.with_precision_and_scale(precision, scale)
2757-
.unwrap()
2753+
match value {
2754+
Some(val) => Decimal128Array::from(vec![val; size])
2755+
.with_precision_and_scale(precision, scale)
2756+
.unwrap(),
2757+
None => {
2758+
let mut builder = Decimal128Array::builder(size)
2759+
.with_precision_and_scale(precision, scale)
2760+
.unwrap();
2761+
builder.append_nulls(size);
2762+
builder.finish()
2763+
}
2764+
}
27582765
}
27592766

27602767
/// Converts a scalar value into an array of `size` rows.

0 commit comments

Comments
 (0)