Re: Row pattern recognition

From: Henson Choi <assam258(at)gmail(dot)com>
To: Tatsuo Ishii <ishii(at)postgresql(dot)org>
Cc: jacob(dot)champion(at)enterprisedb(dot)com, david(dot)g(dot)johnston(at)gmail(dot)com, vik(at)postgresfriends(dot)org, er(at)xs4all(dot)nl, peter(at)eisentraut(dot)org, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Row pattern recognition
Date: 2026-01-15 09:31:20
Message-ID: CAAAe_zBbeBckRpbasfwn74FUoOVMcaUE0hwfNuQtGY_=QpjoBQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2026-01-15 09:33:59 Re: Extended Statistics set/restore/clear functions.
Previous Message Tatsuro Yamada 2026-01-15 09:20:52 Re: [PATCH] psql: add \dcs to list all constraints