Re: Row pattern recognition - Mailing list pgsql-hackers

From Henson Choi
Subject Re: Row pattern recognition
Date
Msg-id CAAAe_zBbeBckRpbasfwn74FUoOVMcaUE0hwfNuQtGY_=QpjoBQ@mail.gmail.com
Whole thread Raw
In response to Re: Row pattern recognition  (Tatsuo Ishii <ishii@postgresql.org>)
Responses Re: Row pattern recognition
List 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 

pgsql-hackers by date:

Previous
From: Tatsuro Yamada
Date:
Subject: Re: [PATCH] psql: add \dcs to list all constraints
Next
From: Michael Paquier
Date:
Subject: Re: Extended Statistics set/restore/clear functions.