edubraqd opened a new issue, #24894:
URL: https://github.com/apache/datafusion/issues/24894

   ### Describe the bug
   
   `DurationAvgAccumulator` (`datafusion/functions-aggregate/src/average.rs`) 
keeps its running sum with plain `+=` in `update_batch` / `merge_batch` and 
plain `-` in `retract_batch`. When the sum of the input durations does not fit 
in `i64` this panics in debug builds and wraps silently in release builds.
   
   The `sum` aggregate and the other `avg` accumulators deliberately wrap on 
overflow (see the comment on `add_avg_sum`: "Wraps on overflow, matching the 
`sum` aggregate and `arrow::compute::sum`"), so the Duration accumulator is the 
odd one out.
   
   ### To Reproduce
   
   Debug build of `datafusion-cli`:
   
   ```sql
   SELECT avg(x) OVER (ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
   FROM (VALUES (arrow_cast(9223372036854775807, 'Duration(Second)')),
                (arrow_cast(9223372036854775807, 'Duration(Second)'))) t(x);
   ```
   
   ```text
   thread 'main' panicked at 
datafusion/functions-aggregate/src/average.rs:887:13:
   attempt to add with overflow
   ```
   
   The plain aggregate `SELECT avg(x) FROM ...` with the same values hits the 
same line.
   
   ### Expected behavior
   
   Consistent with `sum` and the other `avg` accumulators: wrap, never panic.
   
   ### Additional context
   
   Found while running a corpus of extreme-value literals against a debug build 
of `datafusion-cli`.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to