MCPcopy Create free account
hub / github.com/apache/arrow-rs / string_apply

Function string_apply

arrow-string/src/like.rs:298–346  ·  view source on GitHub ↗
(
    op: Op,
    l: T,
    l_s: bool,
    l_v: Option<&'a dyn AnyDictionaryArray>,
    r: T,
    r_s: bool,
    r_v: Option<&'a dyn AnyDictionaryArray>,
)

Source from the content-addressed store, hash-verified

296}
297
298fn string_apply<'a, T: StringArrayType<'a> + 'a>(
299 op: Op,
300 l: T,
301 l_s: bool,
302 l_v: Option<&'a dyn AnyDictionaryArray>,
303 r: T,
304 r_s: bool,
305 r_v: Option<&'a dyn AnyDictionaryArray>,
306) -> Result<BooleanArray, ArrowError> {
307 let l_len = l_v.map(|l| l.len()).unwrap_or(l.len());
308 if r_s {
309 let idx = match r_v {
310 Some(dict) if dict.null_count() != 0 => return Ok(BooleanArray::new_null(l_len)),
311 Some(dict) => dict.normalized_keys()[0],
312 None => 0,
313 };
314 if r.is_null(idx) {
315 return Ok(BooleanArray::new_null(l_len));
316 }
317 op_scalar::<T>(op, l, l_v, r.value(idx))
318 } else {
319 match (l_s, l_v, r_v) {
320 (true, None, None) => {
321 let v = l.is_valid(0).then(|| l.value(0));
322 op_binary(op, std::iter::repeat(v), r.iter())
323 }
324 (true, Some(l_v), None) => {
325 let idx = l_v.is_valid(0).then(|| l_v.normalized_keys()[0]);
326 let v = idx.and_then(|idx| l.is_valid(idx).then(|| l.value(idx)));
327 op_binary(op, std::iter::repeat(v), r.iter())
328 }
329 (true, None, Some(r_v)) => {
330 let v = l.is_valid(0).then(|| l.value(0));
331 op_binary(op, std::iter::repeat(v), vectored_iter(r, r_v))
332 }
333 (true, Some(l_v), Some(r_v)) => {
334 let idx = l_v.is_valid(0).then(|| l_v.normalized_keys()[0]);
335 let v = idx.and_then(|idx| l.is_valid(idx).then(|| l.value(idx)));
336 op_binary(op, std::iter::repeat(v), vectored_iter(r, r_v))
337 }
338 (false, None, None) => op_binary(op, l.iter(), r.iter()),
339 (false, Some(l_v), None) => op_binary(op, vectored_iter(l, l_v), r.iter()),
340 (false, None, Some(r_v)) => op_binary(op, l.iter(), vectored_iter(r, r_v)),
341 (false, Some(l_v), Some(r_v)) => {
342 op_binary(op, vectored_iter(l, l_v), vectored_iter(r, r_v))
343 }
344 }
345 }
346}
347
348#[inline(never)]
349fn op_scalar<'a, T: StringArrayType<'a>>(

Callers

nothing calls this directly

Calls 10

normalized_keysMethod · 0.80
and_thenMethod · 0.80
op_binaryFunction · 0.70
vectored_iterFunction · 0.70
lenMethod · 0.45
null_countMethod · 0.45
is_nullMethod · 0.45
valueMethod · 0.45
is_validMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected