Skip to content

Commit fa30489

Browse files
authored
perf: use new_repeated when converting scalar to an array (#19018)
## Which issue does this PR close? N/A ## Rationale for this change new_repeated is much faster than the iterator itself ## What changes are included in this PR? use `new_repeated` when convert scalar to array for Utf8/LargeUtf8/Binary/LargeBinary ## Are these changes tested? Existing tests ## Are there any user-facing changes? Nope
1 parent e43e8bf commit fa30489

File tree

1 file changed

+8
-12
lines changed
  • datafusion/common/src/scalar

1 file changed

+8
-12
lines changed

datafusion/common/src/scalar/mod.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3022,9 +3022,7 @@ impl ScalarValue {
30223022
)
30233023
}
30243024
ScalarValue::Utf8(e) => match e {
3025-
Some(value) => {
3026-
Arc::new(StringArray::from_iter_values(repeat_n(value, size)))
3027-
}
3025+
Some(value) => Arc::new(StringArray::new_repeated(value, size)),
30283026
None => new_null_array(&DataType::Utf8, size),
30293027
},
30303028
ScalarValue::Utf8View(e) => match e {
@@ -3034,15 +3032,13 @@ impl ScalarValue {
30343032
None => new_null_array(&DataType::Utf8View, size),
30353033
},
30363034
ScalarValue::LargeUtf8(e) => match e {
3037-
Some(value) => {
3038-
Arc::new(LargeStringArray::from_iter_values(repeat_n(value, size)))
3039-
}
3035+
Some(value) => Arc::new(LargeStringArray::new_repeated(value, size)),
30403036
None => new_null_array(&DataType::LargeUtf8, size),
30413037
},
30423038
ScalarValue::Binary(e) => match e {
3043-
Some(value) => Arc::new(
3044-
repeat_n(Some(value.as_slice()), size).collect::<BinaryArray>(),
3045-
),
3039+
Some(value) => {
3040+
Arc::new(BinaryArray::new_repeated(value.as_slice(), size))
3041+
}
30463042
None => new_null_array(&DataType::Binary, size),
30473043
},
30483044
ScalarValue::BinaryView(e) => match e {
@@ -3069,9 +3065,9 @@ impl ScalarValue {
30693065
}
30703066
},
30713067
ScalarValue::LargeBinary(e) => match e {
3072-
Some(value) => Arc::new(
3073-
repeat_n(Some(value.as_slice()), size).collect::<LargeBinaryArray>(),
3074-
),
3068+
Some(value) => {
3069+
Arc::new(LargeBinaryArray::new_repeated(value.as_slice(), size))
3070+
}
30753071
None => new_null_array(&DataType::LargeBinary, size),
30763072
},
30773073
ScalarValue::List(arr) => {

0 commit comments

Comments
 (0)