Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita767cdc

Browse files
committed
Fix unnecessary use of moving-aggregate mode with non-moving frame.
When a plain aggregate is used as a window function, and the windowframe start is specified as UNBOUNDED PRECEDING, the frame's headcannot move so we do not need to use moving-aggregate mode. The checkfor that was put into initialize_peragg(), failing to notice thatExecInitWindowAgg() calls that function before it's filled inwinstate->frameOptions. Since makeNode() would have zeroed the field,this didn't provoke uninitialized-value complaints, nor would theerroneous decision have resulted in more than a little inefficiency.Still, it's wrong, so move the initialization ofwinstate->frameOptions earlier to make it work properly.While here, also fix a thinko in a comment. Both errors crept in incommita9d9acb which introduced the moving-aggregate mode.Spotted by Vallimaharajan G. Back-patch to all supported branches.Discussion:https://postgr.es/m/18e7f2a5167.fe36253866818.977923893562469143@zohocorp.com
1 parent44a4cca commita767cdc

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

‎src/backend/executor/nodeWindowAgg.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2399,6 +2399,9 @@ ExecInitWindowAgg(WindowAgg *node, EState *estate, int eflags)
23992399
winstate->ss.ps.state=estate;
24002400
winstate->ss.ps.ExecProcNode=ExecWindowAgg;
24012401

2402+
/* copy frame options to state node for easy access */
2403+
winstate->frameOptions=frameOptions;
2404+
24022405
/*
24032406
* Create expression contexts. We need two, one for per-input-tuple
24042407
* processing and one for per-output-tuple processing. We cheat a little
@@ -2649,9 +2652,6 @@ ExecInitWindowAgg(WindowAgg *node, EState *estate, int eflags)
26492652
/* Set the status to running */
26502653
winstate->status=WINDOWAGG_RUN;
26512654

2652-
/* copy frame options to state node for easy access */
2653-
winstate->frameOptions=frameOptions;
2654-
26552655
/* initialize frame bound offset expressions */
26562656
winstate->startOffset=ExecInitExpr((Expr*)node->startOffset,
26572657
(PlanState*)winstate);
@@ -2785,7 +2785,7 @@ initialize_peragg(WindowAggState *winstate, WindowFunc *wfunc,
27852785

27862786
/*
27872787
* Figure out whether we want to use the moving-aggregate implementation,
2788-
* and collect the right set of fields from thepg_attribute entry.
2788+
* and collect the right set of fields from thepg_aggregate entry.
27892789
*
27902790
* It's possible that an aggregate would supply a safe moving-aggregate
27912791
* implementation and an unsafe normal one, in which case our hand is

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp