From 60b8ffb9af6eb20672547e90390d190774f5e329 Mon Sep 17 00:00:00 2001 From: Henson Choi Date: Mon, 6 Jul 2026 19:54:41 +0900 Subject: [PATCH] Add EXPLAIN test for simple FIRST(v, N) navigation mark lookahead The rpr_explain suite covered FIRST(v) without an offset and the compound PREV_FIRST/NEXT_FIRST forms, but not a simple FIRST(v, N) with a positive constant offset. Add an EXPLAIN case asserting its forward reach shows up as "Nav Mark Lookahead: N". --- src/test/regress/expected/rpr_explain.out | 18 ++++++++++++++++++ src/test/regress/sql/rpr_explain.sql | 9 +++++++++ 2 files changed, 27 insertions(+) diff --git a/src/test/regress/expected/rpr_explain.out b/src/test/regress/expected/rpr_explain.out index a2c52588361..ac064543a06 100644 --- a/src/test/regress/expected/rpr_explain.out +++ b/src/test/regress/expected/rpr_explain.out @@ -6031,6 +6031,24 @@ WINDOW w AS ( -> Function Scan on generate_series s (6 rows) +-- FIRST(v, 5): forward reach 5 +EXPLAIN (COSTS OFF) SELECT count(*) OVER w +FROM generate_series(1,10) s(v) +WINDOW w AS ( + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + PATTERN (A+) + DEFINE A AS v > FIRST(v, 5) +); + QUERY PLAN +------------------------------------------------------------------- + WindowAgg + Window: w AS (ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + Pattern: a+ + Nav Mark Lookback: 0 + Nav Mark Lookahead: 5 + -> Function Scan on generate_series s +(6 rows) + -- LAST(v, 1): backward reach 1, same as PREV(v, 1) EXPLAIN (COSTS OFF) SELECT count(*) OVER w FROM generate_series(1,10) s(v) diff --git a/src/test/regress/sql/rpr_explain.sql b/src/test/regress/sql/rpr_explain.sql index 2515c4cbec9..f78b1759809 100644 --- a/src/test/regress/sql/rpr_explain.sql +++ b/src/test/regress/sql/rpr_explain.sql @@ -3427,6 +3427,15 @@ WINDOW w AS ( DEFINE A AS v > FIRST(v) ); +-- FIRST(v, 5): forward reach 5 +EXPLAIN (COSTS OFF) SELECT count(*) OVER w +FROM generate_series(1,10) s(v) +WINDOW w AS ( + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + PATTERN (A+) + DEFINE A AS v > FIRST(v, 5) +); + -- LAST(v, 1): backward reach 1, same as PREV(v, 1) EXPLAIN (COSTS OFF) SELECT count(*) OVER w FROM generate_series(1,10) s(v)