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

Function string_to_array_column_args

datafusion/functions-nested/src/string.rs:446–496  ·  view source on GitHub ↗
(
    string_array: &StringArrType,
    delimiter_array: &ArrayRef,
    null_value_array: Option<&ArrayRef>,
    string_builder: StringBuilderType,
)

Source from the content-addressed store, hash-verified

444}
445
446fn string_to_array_column_args<'a, StringArrType, StringBuilderType>(
447 string_array: &StringArrType,
448 delimiter_array: &ArrayRef,
449 null_value_array: Option<&ArrayRef>,
450 string_builder: StringBuilderType,
451) -> Result<ArrayRef>
452where
453 StringArrType: StringArrayType<'a>,
454 StringBuilderType: StringArrayBuilderType,
455{
456 let mut list_builder = ListBuilder::new(string_builder);
457
458 for i in 0..string_array.len() {
459 if string_array.is_null(i) {
460 list_builder.append(false);
461 continue;
462 }
463
464 let string = string_array.value(i);
465 let delimiter = get_str_value(delimiter_array, i);
466 let null_value = null_value_array.and_then(|arr| get_str_value(arr, i));
467
468 match delimiter {
469 Some("") => {
470 if !string.is_empty() {
471 append_part(list_builder.values(), string, null_value);
472 }
473 }
474 Some(delimiter) => {
475 if !string.is_empty() {
476 for part in string.split(delimiter) {
477 append_part(list_builder.values(), part, null_value);
478 }
479 }
480 }
481 None => {
482 for (pos, c) in string.char_indices() {
483 append_part(
484 list_builder.values(),
485 &string[pos..pos + c.len_utf8()],
486 null_value,
487 );
488 }
489 }
490 }
491
492 list_builder.append(true);
493 }
494
495 Ok(Arc::new(list_builder.finish()) as ArrayRef)
496}
497
498/// Returns the string value at index `i` from a string array of any type.
499fn get_str_value(array: &ArrayRef, i: usize) -> Option<&str> {

Callers 1

string_to_array_fallbackFunction · 0.85

Calls 11

newFunction · 0.85
get_str_valueFunction · 0.85
append_partFunction · 0.85
lenMethod · 0.45
is_nullMethod · 0.45
appendMethod · 0.45
valueMethod · 0.45
is_emptyMethod · 0.45
valuesMethod · 0.45
splitMethod · 0.45
finishMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…