mirror of
https://github.com/postgres/postgres.git
synced 2025-07-18 17:42:25 +03:00
Fix failure to set correct operator in window run condition
This was a simple omission in9d9c02ccd
where the code didn't correctly set the operator to use in the run condition OpExpr when the window function was both monotonically increasing and decreasing. Bug discovered by Julien Roze, although he did not report it. Reported-by: Phil Florent Discussion: https://postgr.es/m/PA4P191MB160009A09B9D0624359278CFBA9F9@PA4P191MB1600.EURP191.PROD.OUTLOOK.COM Backpatch-through: 15, where9d9c02ccd
was added
This commit is contained in:
@ -2306,6 +2306,7 @@ find_window_run_conditions(Query *subquery, RangeTblEntry *rte, Index rti,
|
||||
{
|
||||
*keep_original = false;
|
||||
runopexpr = opexpr;
|
||||
runoperator = opexpr->opno;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -3646,6 +3646,23 @@ WHERE c <= 3;
|
||||
3 | sales | 4800 | 3
|
||||
(8 rows)
|
||||
|
||||
-- Ensure we get the correct run condition when the window function is both
|
||||
-- monotonically increasing and decreasing.
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT * FROM
|
||||
(SELECT empno,
|
||||
depname,
|
||||
salary,
|
||||
count(empno) OVER () c
|
||||
FROM empsalary) emp
|
||||
WHERE c = 1;
|
||||
QUERY PLAN
|
||||
--------------------------------------------------------
|
||||
WindowAgg
|
||||
Run Condition: (count(empsalary.empno) OVER (?) = 1)
|
||||
-> Seq Scan on empsalary
|
||||
(3 rows)
|
||||
|
||||
-- Some more complex cases with multiple window clauses
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT * FROM
|
||||
|
@ -1150,6 +1150,17 @@ SELECT * FROM
|
||||
FROM empsalary) emp
|
||||
WHERE c <= 3;
|
||||
|
||||
-- Ensure we get the correct run condition when the window function is both
|
||||
-- monotonically increasing and decreasing.
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT * FROM
|
||||
(SELECT empno,
|
||||
depname,
|
||||
salary,
|
||||
count(empno) OVER () c
|
||||
FROM empsalary) emp
|
||||
WHERE c = 1;
|
||||
|
||||
-- Some more complex cases with multiple window clauses
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT * FROM
|
||||
|
Reference in New Issue
Block a user