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

Function case_conversion

datafusion/functions/src/string/common.rs:345–408  ·  view source on GitHub ↗
(
    args: &[ColumnarValue],
    lower: bool,
    name: &str,
)

Source from the content-addressed store, hash-verified

343}
344
345fn case_conversion(
346 args: &[ColumnarValue],
347 lower: bool,
348 name: &str,
349) -> Result<ColumnarValue> {
350 match &args[0] {
351 ColumnarValue::Array(array) => match array.data_type() {
352 DataType::Utf8 => Ok(ColumnarValue::Array(case_conversion_array::<i32>(
353 array, lower,
354 )?)),
355 DataType::LargeUtf8 => Ok(ColumnarValue::Array(
356 case_conversion_array::<i64>(array, lower)?,
357 )),
358 DataType::Utf8View => {
359 let string_array = as_string_view_array(array)?;
360 if string_array.is_ascii() {
361 return Ok(ColumnarValue::Array(Arc::new(
362 case_conversion_utf8view_ascii(string_array, lower),
363 )));
364 }
365 let item_len = string_array.len();
366 // Null-preserving: reuse the input null buffer as the output null buffer.
367 let nulls = string_array.nulls().cloned();
368 let mut builder = StringViewArrayBuilder::with_capacity(item_len);
369
370 if let Some(ref n) = nulls {
371 for i in 0..item_len {
372 if n.is_null(i) {
373 builder.append_placeholder();
374 } else {
375 // SAFETY: `n.is_null(i)` was false in the branch above.
376 let s = unsafe { string_array.value_unchecked(i) };
377 builder.append_value(&unicode_case(s, lower));
378 }
379 }
380 } else {
381 for i in 0..item_len {
382 // SAFETY: no null buffer means every index is valid.
383 let s = unsafe { string_array.value_unchecked(i) };
384 builder.append_value(&unicode_case(s, lower));
385 }
386 }
387
388 Ok(ColumnarValue::Array(Arc::new(builder.finish(nulls)?)))
389 }
390 other => exec_err!("Unsupported data type {other:?} for function {name}"),
391 },
392 ColumnarValue::Scalar(scalar) => match scalar {
393 ScalarValue::Utf8(a) => {
394 let result = a.as_ref().map(|x| unicode_case(x, lower));
395 Ok(ColumnarValue::Scalar(ScalarValue::Utf8(result)))
396 }
397 ScalarValue::LargeUtf8(a) => {
398 let result = a.as_ref().map(|x| unicode_case(x, lower));
399 Ok(ColumnarValue::Scalar(ScalarValue::LargeUtf8(result)))
400 }
401 ScalarValue::Utf8View(a) => {
402 let result = a.as_ref().map(|x| unicode_case(x, lower));

Callers 2

to_lowerFunction · 0.85
to_upperFunction · 0.85

Calls 14

as_string_view_arrayFunction · 0.85
newFunction · 0.85
unicode_caseFunction · 0.85
append_placeholderMethod · 0.80
data_typeMethod · 0.45
lenMethod · 0.45
clonedMethod · 0.45
nullsMethod · 0.45
is_nullMethod · 0.45
append_valueMethod · 0.45
finishMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…