From 381e30a5b89e088da66a7a60dde3239455b508d4 Mon Sep 17 00:00:00 2001 From: Henson Choi Date: Fri, 29 May 2026 19:07:40 +0900 Subject: [PATCH 24/26] Tighten the RPR frame-boundary check from >= to == per Jian He's review currentPos advances by exactly one row per call, and a finalized context is skipped by the states == NULL guard, so it can only ever reach ctxFrameEnd, never overshoot it; >= and == behave identically here, and == states the intent. The >= was a defensive guard against an overshoot that cannot happen -- move that defense into Assert(currentPos <= ctxFrameEnd) so a future change that breaks the invariant fails immediately instead of silently slipping past the boundary, and change the comment from "exceeded" to "reached". No behavior change. --- src/backend/executor/execRPR.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/backend/executor/execRPR.c b/src/backend/executor/execRPR.c index 88c59cf3276..4463cfe0a5c 100644 --- a/src/backend/executor/execRPR.c +++ b/src/backend/executor/execRPR.c @@ -1706,7 +1706,7 @@ ExecRPRProcessRow(WindowAggState *winstate, int64 currentPos, if (ctx->states == NULL) continue; - /* Check frame boundary - finalize if exceeded */ + /* Check frame boundary - finalize the context when it is reached */ if (hasLimitedFrame) { int64 ctxFrameEnd; @@ -1716,9 +1716,18 @@ ExecRPRProcessRow(WindowAggState *winstate, int64 currentPos, &ctxFrameEnd)) ctxFrameEnd = PG_INT64_MAX; - if (currentPos >= ctxFrameEnd) + /* + * currentPos advances by exactly one per call, and a finalized + * context is skipped by the states == NULL guard above, so it can + * only ever reach ctxFrameEnd, never overshoot it. The Assert + * turns a future change that broke that invariant into an + * immediate failure rather than a silent slip past the boundary. + */ + Assert(currentPos <= ctxFrameEnd); + + if (currentPos == ctxFrameEnd) { - /* Frame boundary exceeded: force mismatch */ + /* Frame boundary reached: force mismatch */ nfa_match(winstate, ctx, NULL); continue; } -- 2.50.1 (Apple Git-155)