(
args: &[ArrayRef],
handler_err: impl Fn(Result<Option<String>>) -> Result<Option<String>>,
)
| 218 | } |
| 219 | |
| 220 | pub fn spark_handled_parse_url( |
| 221 | args: &[ArrayRef], |
| 222 | handler_err: impl Fn(Result<Option<String>>) -> Result<Option<String>>, |
| 223 | ) -> Result<ArrayRef> { |
| 224 | if args.len() < 2 || args.len() > 3 { |
| 225 | return exec_err!( |
| 226 | "{} expects 2 or 3 arguments, but got {}", |
| 227 | "`parse_url`", |
| 228 | args.len() |
| 229 | ); |
| 230 | } |
| 231 | // Required arguments |
| 232 | let url = &args[0]; |
| 233 | let part = &args[1]; |
| 234 | |
| 235 | if args.len() == 3 { |
| 236 | // In this case, the 'key' argument is passed |
| 237 | let key = &args[2]; |
| 238 | |
| 239 | match (url.data_type(), part.data_type(), key.data_type()) { |
| 240 | (DataType::Utf8, DataType::Utf8, DataType::Utf8) => { |
| 241 | process_parse_url::<_, _, _, StringArray>( |
| 242 | as_string_array(url)?, |
| 243 | as_string_array(part)?, |
| 244 | as_string_array(key)?, |
| 245 | handler_err, |
| 246 | true, |
| 247 | ) |
| 248 | } |
| 249 | (DataType::Utf8View, DataType::Utf8View, DataType::Utf8View) => { |
| 250 | process_parse_url::<_, _, _, StringViewArray>( |
| 251 | as_string_view_array(url)?, |
| 252 | as_string_view_array(part)?, |
| 253 | as_string_view_array(key)?, |
| 254 | handler_err, |
| 255 | true, |
| 256 | ) |
| 257 | } |
| 258 | (DataType::LargeUtf8, DataType::LargeUtf8, DataType::LargeUtf8) => { |
| 259 | process_parse_url::<_, _, _, LargeStringArray>( |
| 260 | as_large_string_array(url)?, |
| 261 | as_large_string_array(part)?, |
| 262 | as_large_string_array(key)?, |
| 263 | handler_err, |
| 264 | true, |
| 265 | ) |
| 266 | } |
| 267 | _ => exec_err!( |
| 268 | "`parse_url` expects STRING arguments, got ({}, {}, {})", |
| 269 | url.data_type(), |
| 270 | part.data_type(), |
| 271 | key.data_type() |
| 272 | ), |
| 273 | } |
| 274 | } else { |
| 275 | // The 'key' argument is omitted, assume all values are null |
| 276 | // Create 'null' string array for 'key' argument |
| 277 | let mut builder: GenericStringBuilder<i32> = GenericStringBuilder::new(); |
searching dependent graphs…