Selectively include window frames in expression walks/mutates.
Andrew Gierth <rhodiumtoad@postgresql.org>
Selectively include window frames in expression walks/mutates. query_tree_walker and query_tree_mutator were skipping the windowClause of the query, without regard for the fact that the startOffset and endOffset in a WindowClause node are expression trees that need to be processed. This was an oversight in commit ec4be2ee6 from 2010 which added the expression fields; the main symptom is that function parameters in window frame clauses don't work in inlined functions. Fix (as conservatively as possible since this needs to not break existing out-of-tree callers) and add tests. Backpatch all the way, since this has been broken since 9.0. Per report from Alastair McKinley; fix by me with kibitzing and review from Tom Lane. Discussion: https://postgr.es/m/DB6PR0202MB2904E7FDDA9D81504D1E8C68E3800@DB6PR0202MB2904.eurprd02.prod.outlook.com
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/catalog/dependency.c | modified | +2 −7 |
| src/backend/nodes/nodeFuncs.c | modified | +105 −0 |
| src/include/nodes/nodeFuncs.h | modified | +1 −0 |
| src/test/regress/expected/window.out | modified | +42 −0 |
| src/test/regress/sql/window.sql | modified | +19 −0 |
Discussion
- Possible bug: SQL function parameter in window frame definition 18 messages · 2019-09-28 → 2019-10-02