Window aggregate FILTER evaluates arguments for rejected rows
- Dominant language
- Rust
- Stars
- 9.3k
- Forks
- 2.4k
- Avg merge
- 3d 7h
- Merged PRs (30d)
- 344
Description
### Describe the bug
Window aggregates evaluate their argument expressions before applying the aggregate `FILTER`.
This can cause a query to fail while evaluating rows that should not participate in the window aggregate.
### To Reproduce
```sql
SELECT
id,
SUM(10 / x) FILTER (WHERE x <> 0) OVER (ORDER BY id) AS running_sum
FROM (
VALUES
(1, 2),
(2, 0),
(3, 5)
) AS t(id, x)
ORDER BY id;
```
The query fails even though the row where x = 0 is rejected by the aggregate filter:
```
Arrow error: Divide by zero error
```
### Expected behavior
The aggregate filter should prevent argument evaluation for rejected rows, and the query should return:
```
1 5
2 5
3 7
```
### Additional context
This is the window-aggregate counterpart of #24443.
#24444 addresses the same evaluation-order issue for grouped aggregates, but window aggregates use a separate physical evaluation path and remain affected.
Contributor guide
Assessment
This issue has not been assessed yet.