Skip to content

Commit 63bc5fd

Browse files
refactor: simplify StringViewArray handling in octet_length
1 parent 0201565 commit 63bc5fd

File tree

1 file changed

+8
-11
lines changed

1 file changed

+8
-11
lines changed

datafusion/functions/src/string/octet_length.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ use std::any::Any;
2020

2121
use crate::utils::utf8_to_int_type;
2222
use arrow::array::{
23-
Array, ArrayRef, Int32Builder, Int64Builder, LargeStringArray, StringArray,
24-
StringViewArray,
23+
Array, ArrayRef, Int32Array, Int32Builder, Int64Builder, LargeStringArray,
24+
StringArray, StringViewArray,
2525
};
2626
use datafusion_common::types::logical_string;
2727
use datafusion_common::utils::take_function_args;
@@ -119,15 +119,12 @@ impl ScalarUDFImpl for OctetLengthFunc {
119119
}
120120
Ok(ColumnarValue::Array(Arc::new(builder.finish())))
121121
} else if let Some(arr) = arr.as_any().downcast_ref::<StringViewArray>() {
122-
let mut builder = Int32Builder::with_capacity(arr.len());
123-
for i in 0..arr.len() {
124-
if arr.is_null(i) {
125-
builder.append_null();
126-
} else {
127-
builder.append_value(arr.value(i).len() as i32);
128-
}
129-
}
130-
Ok(ColumnarValue::Array(Arc::new(builder.finish())))
122+
let result = arr
123+
.iter()
124+
.map(|s| s.map(|s| s.len() as i32))
125+
.collect::<Int32Array>();
126+
127+
Ok(ColumnarValue::Array(Arc::new(result)))
131128
} else {
132129
unreachable!("octet_length expects string arrays")
133130
}

0 commit comments

Comments
 (0)