Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/optimizer/path/allpaths.c1
-rw-r--r--src/test/regress/expected/window.out17
-rw-r--r--src/test/regress/sql/window.sql11
3 files changed, 29 insertions, 0 deletions
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index b23cc8ee82d..8fc28007f54 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -2306,6 +2306,7 @@ find_window_run_conditions(Query *subquery, RangeTblEntry *rte, Index rti,
{
*keep_original = false;
runopexpr = opexpr;
+ runoperator = opexpr->opno;
break;
}
diff --git a/src/test/regress/expected/window.out b/src/test/regress/expected/window.out
index 433a0bb0259..55dcd668c94 100644
--- a/src/test/regress/expected/window.out
+++ b/src/test/regress/expected/window.out
@@ -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
diff --git a/src/test/regress/sql/window.sql b/src/test/regress/sql/window.sql
index a504e46e403..57c39e796c1 100644
--- a/src/test/regress/sql/window.sql
+++ b/src/test/regress/sql/window.sql
@@ -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