(op: Op, lhs: &dyn Datum, rhs: &dyn Datum)
| 216 | } |
| 217 | |
| 218 | fn like_op(op: Op, lhs: &dyn Datum, rhs: &dyn Datum) -> Result<BooleanArray, ArrowError> { |
| 219 | use arrow_schema::DataType::*; |
| 220 | let (l, l_s) = lhs.get(); |
| 221 | let (r, r_s) = rhs.get(); |
| 222 | |
| 223 | if l.len() != r.len() && !l_s && !r_s { |
| 224 | return Err(ArrowError::InvalidArgumentError(format!( |
| 225 | "Cannot compare arrays of different lengths, got {} vs {}", |
| 226 | l.len(), |
| 227 | r.len() |
| 228 | ))); |
| 229 | } |
| 230 | |
| 231 | let l_v = l.as_any_dictionary_opt(); |
| 232 | let l = l_v.map(|x| x.values().as_ref()).unwrap_or(l); |
| 233 | |
| 234 | let r_v = r.as_any_dictionary_opt(); |
| 235 | let r = r_v.map(|x| x.values().as_ref()).unwrap_or(r); |
| 236 | |
| 237 | match (l.data_type(), r.data_type()) { |
| 238 | (Utf8, Utf8) => string_apply::<&GenericStringArray<i32>>( |
| 239 | op, |
| 240 | l.as_string(), |
| 241 | l_s, |
| 242 | l_v, |
| 243 | r.as_string(), |
| 244 | r_s, |
| 245 | r_v, |
| 246 | ), |
| 247 | (LargeUtf8, LargeUtf8) => string_apply::<&GenericStringArray<i64>>( |
| 248 | op, |
| 249 | l.as_string(), |
| 250 | l_s, |
| 251 | l_v, |
| 252 | r.as_string(), |
| 253 | r_s, |
| 254 | r_v, |
| 255 | ), |
| 256 | (Utf8View, Utf8View) => string_apply::<&StringViewArray>( |
| 257 | op, |
| 258 | l.as_string_view(), |
| 259 | l_s, |
| 260 | l_v, |
| 261 | r.as_string_view(), |
| 262 | r_s, |
| 263 | r_v, |
| 264 | ), |
| 265 | (Binary, Binary) => binary_apply::<&GenericBinaryArray<i32>>( |
| 266 | op.try_into()?, |
| 267 | l.as_binary(), |
| 268 | l_s, |
| 269 | l_v, |
| 270 | r.as_binary(), |
| 271 | r_s, |
| 272 | r_v, |
| 273 | ), |
| 274 | (LargeBinary, LargeBinary) => binary_apply::<&GenericBinaryArray<i64>>( |
| 275 | op.try_into()?, |
no test coverage detected