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

Method evaluate

datafusion/functions-aggregate/src/array_agg.rs:400–428  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

398 }
399
400 fn evaluate(&mut self) -> Result<ScalarValue> {
401 if self.values.is_empty() {
402 return Ok(ScalarValue::new_null_list(self.datatype.clone(), true, 1));
403 }
404
405 let element_arrays: Vec<ArrayRef> = self
406 .values
407 .iter()
408 .enumerate()
409 .map(|(i, a)| {
410 if i == 0 && self.front_offset > 0 {
411 a.slice(self.front_offset, a.len() - self.front_offset)
412 } else {
413 Arc::clone(a)
414 }
415 })
416 .collect();
417
418 let element_refs: Vec<&dyn Array> =
419 element_arrays.iter().map(|a| a.as_ref()).collect();
420
421 if element_refs.iter().all(|a| a.is_empty()) {
422 return Ok(ScalarValue::new_null_list(self.datatype.clone(), true, 1));
423 }
424
425 let concated_array = arrow::compute::concat(&element_refs)?;
426
427 Ok(SingleRowListArrayBuilder::new(concated_array).build_list_scalar())
428 }
429
430 fn retract_batch(&mut self, values: &[ArrayRef]) -> Result<()> {
431 if values.is_empty() {

Calls 15

newFunction · 0.85
collectMethod · 0.80
sliceMethod · 0.80
allMethod · 0.80
build_list_scalarMethod · 0.80
clear_stateMethod · 0.80
try_cmpMethod · 0.80
concatFunction · 0.50
ListClass · 0.50
is_emptyMethod · 0.45
cloneMethod · 0.45