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

Function regexp_count

datafusion/functions/src/regex/regexpcount.rs:181–256  ·  view source on GitHub ↗

`arrow-rs` style implementation of `regexp_count` function. This function `regexp_count` is responsible for counting the occurrences of a regular expression pattern within a string array. It supports optional start positions and flags for case insensitivity. The function accepts a variable number of arguments: - `values`: The array of strings to search within. - `regex_array`: The array of regula

(
    values: &dyn Array,
    regex_array: &dyn Datum,
    start_array: Option<&dyn Datum>,
    flags_array: Option<&dyn Datum>,
)

Source from the content-addressed store, hash-verified

179/// # Errors
180/// Returns an error if the input arrays have mismatched lengths or if the regular expression fails to compile.
181fn regexp_count(
182 values: &dyn Array,
183 regex_array: &dyn Datum,
184 start_array: Option<&dyn Datum>,
185 flags_array: Option<&dyn Datum>,
186) -> Result<ArrayRef, ArrowError> {
187 let (regex_array, is_regex_scalar) = regex_array.get();
188 let (start_array, is_start_scalar) = start_array.map_or((None, true), |start| {
189 let (start, is_start_scalar) = start.get();
190 (Some(start), is_start_scalar)
191 });
192 let (flags_array, is_flags_scalar) = flags_array.map_or((None, true), |flags| {
193 let (flags, is_flags_scalar) = flags.get();
194 (Some(flags), is_flags_scalar)
195 });
196
197 match (values.data_type(), regex_array.data_type(), flags_array) {
198 (Utf8, Utf8, None) => regexp_count_inner(
199 &values.as_string::<i32>(),
200 &regex_array.as_string::<i32>(),
201 is_regex_scalar,
202 start_array.map(|start| start.as_primitive::<Int64Type>()),
203 is_start_scalar,
204 None,
205 is_flags_scalar,
206 ),
207 (Utf8, Utf8, Some(flags_array)) if *flags_array.data_type() == Utf8 => regexp_count_inner(
208 &values.as_string::<i32>(),
209 &regex_array.as_string::<i32>(),
210 is_regex_scalar,
211 start_array.map(|start| start.as_primitive::<Int64Type>()),
212 is_start_scalar,
213 Some(&flags_array.as_string::<i32>()),
214 is_flags_scalar,
215 ),
216 (LargeUtf8, LargeUtf8, None) => regexp_count_inner(
217 &values.as_string::<i64>(),
218 &regex_array.as_string::<i64>(),
219 is_regex_scalar,
220 start_array.map(|start| start.as_primitive::<Int64Type>()),
221 is_start_scalar,
222 None,
223 is_flags_scalar,
224 ),
225 (LargeUtf8, LargeUtf8, Some(flags_array)) if *flags_array.data_type() == LargeUtf8 => regexp_count_inner(
226 &values.as_string::<i64>(),
227 &regex_array.as_string::<i64>(),
228 is_regex_scalar,
229 start_array.map(|start| start.as_primitive::<Int64Type>()),
230 is_start_scalar,
231 Some(&flags_array.as_string::<i64>()),
232 is_flags_scalar,
233 ),
234 (Utf8View, Utf8View, None) => regexp_count_inner(
235 &values.as_string_view(),
236 &regex_array.as_string_view(),
237 is_regex_scalar,
238 start_array.map(|start| start.as_primitive::<Int64Type>()),

Callers 1

regexp_count_funcFunction · 0.70

Calls 5

regexp_count_innerFunction · 0.85
getMethod · 0.45
data_typeMethod · 0.45
mapMethod · 0.45
to_stringMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…