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

Function concat_elements_dyn

arrow-string/src/concat_elements.rs:311–367  ·  view source on GitHub ↗

Returns the elementwise concatenation of [`Array`]s. # Errors This function errors if the arrays are of different types.

(left: &dyn Array, right: &dyn Array)

Source from the content-addressed store, hash-verified

309///
310/// This function errors if the arrays are of different types.
311pub fn concat_elements_dyn(left: &dyn Array, right: &dyn Array) -> Result<ArrayRef, ArrowError> {
312 if left.data_type() != right.data_type() {
313 return Err(ArrowError::ComputeError(format!(
314 "Cannot concat arrays of different types: {} != {}",
315 left.data_type(),
316 right.data_type()
317 )));
318 }
319 match (left.data_type(), right.data_type()) {
320 (DataType::Utf8, DataType::Utf8) => {
321 let left = left.as_any().downcast_ref::<StringArray>().unwrap();
322 let right = right.as_any().downcast_ref::<StringArray>().unwrap();
323 Ok(Arc::new(concat_elements_utf8(left, right)?))
324 }
325 (DataType::LargeUtf8, DataType::LargeUtf8) => {
326 let left = left.as_any().downcast_ref::<LargeStringArray>().unwrap();
327 let right = right.as_any().downcast_ref::<LargeStringArray>().unwrap();
328 Ok(Arc::new(concat_elements_utf8(left, right)?))
329 }
330 (DataType::Binary, DataType::Binary) => {
331 let left = left.as_any().downcast_ref::<BinaryArray>().unwrap();
332 let right = right.as_any().downcast_ref::<BinaryArray>().unwrap();
333 Ok(Arc::new(concat_element_binary(left, right)?))
334 }
335 (DataType::LargeBinary, DataType::LargeBinary) => {
336 let left = left.as_any().downcast_ref::<LargeBinaryArray>().unwrap();
337 let right = right.as_any().downcast_ref::<LargeBinaryArray>().unwrap();
338 Ok(Arc::new(concat_element_binary(left, right)?))
339 }
340 (DataType::BinaryView, DataType::BinaryView) => {
341 let left = left.as_any().downcast_ref::<BinaryViewArray>().unwrap();
342 let right = right.as_any().downcast_ref::<BinaryViewArray>().unwrap();
343 Ok(Arc::new(concat_elements_binary_view_array(left, right)?))
344 }
345 (DataType::Utf8View, DataType::Utf8View) => {
346 let left = left.as_any().downcast_ref::<StringViewArray>().unwrap();
347 let right = right.as_any().downcast_ref::<StringViewArray>().unwrap();
348 Ok(Arc::new(concat_elements_string_view_array(left, right)?))
349 }
350 (DataType::FixedSizeBinary(_), DataType::FixedSizeBinary(_)) => {
351 let left = left
352 .as_any()
353 .downcast_ref::<FixedSizeBinaryArray>()
354 .unwrap();
355 let right = right
356 .as_any()
357 .downcast_ref::<FixedSizeBinaryArray>()
358 .unwrap();
359 Ok(Arc::new(concat_elements_fixed_size_binary(left, right)?))
360 }
361 // unimplemented
362 _ => Err(ArrowError::NotYetImplemented(format!(
363 "concat not supported for {}",
364 left.data_type()
365 ))),
366 }
367}
368

Callers 2

Calls 7

concat_elements_utf8Function · 0.85
concat_element_binaryFunction · 0.85
data_typeMethod · 0.45
as_anyMethod · 0.45

Tested by 2