MCPcopy Create free account
hub / github.com/apache/datafusion / generic_string_substr_copy

Function generic_string_substr_copy

datafusion/functions/src/unicode/substr.rs:413–447  ·  view source on GitHub ↗

Fallback for `generic_string_substr` if we can't use zerocopy because the input string array is too large.

(
    string_array: &GenericStringArray<T>,
    args: &[ArrayRef],
)

Source from the content-addressed store, hash-verified

411// Fallback for `generic_string_substr` if we can't use zerocopy because the
412// input string array is too large.
413fn generic_string_substr_copy<T: OffsetSizeTrait>(
414 string_array: &GenericStringArray<T>,
415 args: &[ArrayRef],
416) -> Result<ArrayRef> {
417 let start_array = as_int64_array(&args[0])?;
418 let count_array_opt = args.get(1).map(|a| as_int64_array(a)).transpose()?;
419
420 let is_ascii = enable_ascii_fast_path(&string_array, start_array, count_array_opt);
421
422 // Combine null bitmaps from all inputs in bulk.
423 let nulls = NullBuffer::union_many([
424 string_array.nulls(),
425 start_array.nulls(),
426 count_array_opt.and_then(|a| a.nulls()),
427 ]);
428
429 let len = string_array.len();
430 let mut result_builder = StringViewArrayBuilder::with_capacity(len);
431
432 for i in 0..len {
433 if nulls.as_ref().is_some_and(|n| n.is_null(i)) {
434 result_builder.append_placeholder();
435 continue;
436 }
437
438 let string = string_array.value(i);
439 let start = start_array.value(i);
440 let count = count_array_opt.map(|a| a.value(i));
441
442 let (byte_start, byte_end) = get_true_start_end(string, start, count, is_ascii)?;
443 result_builder.append_value(&string[byte_start..byte_end]);
444 }
445
446 Ok(Arc::new(result_builder.finish(nulls)?) as ArrayRef)
447}
448
449#[cfg(test)]
450mod tests {

Callers 1

generic_string_substrFunction · 0.85

Calls 14

as_int64_arrayFunction · 0.85
enable_ascii_fast_pathFunction · 0.85
get_true_start_endFunction · 0.85
newFunction · 0.85
append_placeholderMethod · 0.80
mapMethod · 0.45
getMethod · 0.45
nullsMethod · 0.45
lenMethod · 0.45
as_refMethod · 0.45
is_nullMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…