| 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() { |