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

Function regexp_count_inner

datafusion/functions/src/regex/regexpcount.rs:258–549  ·  view source on GitHub ↗
(
    values: &S,
    regex_array: &S,
    is_regex_scalar: bool,
    start_array: Option<&Int64Array>,
    is_start_scalar: bool,
    flags_array: Option<&S>,
    is_flags_scalar: bool,
)

Source from the content-addressed store, hash-verified

256}
257
258fn regexp_count_inner<'a, S>(
259 values: &S,
260 regex_array: &S,
261 is_regex_scalar: bool,
262 start_array: Option<&Int64Array>,
263 is_start_scalar: bool,
264 flags_array: Option<&S>,
265 is_flags_scalar: bool,
266) -> Result<ArrayRef, ArrowError>
267where
268 S: StringArrayType<'a>,
269{
270 let (regex_scalar, is_regex_scalar) = if is_regex_scalar || regex_array.len() == 1 {
271 (
272 (!regex_array.is_null(0)).then(|| regex_array.value(0)),
273 true,
274 )
275 } else {
276 (None, false)
277 };
278
279 let (start_array, start_scalar, is_start_scalar) =
280 if let Some(start_array) = start_array {
281 if is_start_scalar || start_array.len() == 1 {
282 (None, Some(start_array.value(0)), true)
283 } else {
284 (Some(start_array), None, false)
285 }
286 } else {
287 (None, Some(1), true)
288 };
289
290 let (flags_array, flags_scalar, is_flags_scalar) =
291 if let Some(flags_array) = flags_array {
292 if is_flags_scalar || flags_array.len() == 1 {
293 (None, Some(flags_array.value(0)), true)
294 } else {
295 (Some(flags_array), None, false)
296 }
297 } else {
298 (None, None, true)
299 };
300
301 let mut regex_cache = HashMap::new();
302
303 match (is_regex_scalar, is_start_scalar, is_flags_scalar) {
304 (true, true, true) => {
305 let regex = match regex_scalar {
306 None => {
307 return Ok(Arc::new(Int64Array::from(vec![0; values.len()])));
308 }
309 Some(regex) => regex,
310 };
311
312 let pattern = compile_regex(regex, flags_scalar)?;
313
314 Ok(Arc::new(
315 values

Callers 1

regexp_countFunction · 0.85

Calls 9

newFunction · 0.85
compile_regexFunction · 0.85
compile_and_cache_regexFunction · 0.85
count_matchesFunction · 0.70
lenMethod · 0.45
is_nullMethod · 0.45
valueMethod · 0.45
mapMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…