Re: Row pattern recognition
Henson Choi <assam258@gmail.com>
From: Henson Choi <assam258@gmail.com>
To: Tatsuo Ishii <ishii@postgresql.org>
Cc: jacob.champion@enterprisedb.com, david.g.johnston@gmail.com, vik@postgresfriends.org, er@xs4all.nl, peter@eisentraut.org, pgsql-hackers@postgresql.org
Date: 2026-01-15T09:31:20Z
Lists: pgsql-hackers
Hi Ishii-san,
I have one question regaring your patch.
>
> In update_reduced_frame():
> + hasLimitedFrame = (frameOptions & FRAMEOPTION_ROWS) &&
> + !(frameOptions &
> FRAMEOPTION_END_UNBOUNDED_FOLLOWING);
> + if (hasLimitedFrame && winstate->endOffsetValue != 0)
> + frameOffset = DatumGetInt64(winstate->endOffsetValue);
>
> frameOffset is a offset value n from "ROWS BETWEEN CURRENT ROW AND n
> FOLLOWING".
> Later you use this here:
>
> + ctxFrameEnd = ctx->matchStartRow + frameOffset + 1;
>
> So my question is, how do you ensure that ctxFrameEnd does not go
> beyond the full window frame end?
>
In update_reduced_frame():
frameOffset = endOffsetValue; // e.g., 2 from "2 FOLLOWING"
for each row (currentPos):
if (!rowExists) // partition end reached
finalize all contexts;
break;
for each context:
ctxFrameEnd = matchStartRow + frameOffset + 1;
if (currentPos >= ctxFrameEnd)
finalize this context;
continue;
Even if ctxFrameEnd exceeds partition end, the "if (!rowExists)" check
fires first and finalizes all contexts at the actual partition boundary.
Best regards,
Henson
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Adjust cross-version upgrade tests for seg_out() fix
- 3e3d7875e956 19 (unreleased) cited
-
Rationalize error comments in partition split/merge tests
- ecb2508aaf9b 19 (unreleased) cited
-
Add fast path for foreign key constraint checks
- 2da86c1ef9b5 19 (unreleased) cited
-
Fix assorted pretty-trivial memory leaks in the backend.
- e78d1d6d47dc 19 (unreleased) cited
-
Add temporal FOREIGN KEY contraints
- 89f908a6d0ac 18.0 cited
-
Add trailing commas to enum definitions
- 611806cd726f 17.0 cited
-
Remove obsolete executor cleanup code
- d060e921ea5a 17.0 cited