mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
Convert planner's AggInfo and AggTransInfo structs to proper Nodes.
This is mostly just to get outfuncs.c support for them, so that the agginfos and aggtransinfos lists can be dumped when dumping the contents of PlannerInfo. While here, improve some related comments; notably, clean up obsolete comments left over from when preprocess_minmax_aggregates had to make its own scan of the query tree. Discussion: https://postgr.es/m/742479.1658160504@sss.pgh.pa.us
This commit is contained in:
@ -223,13 +223,13 @@ preprocess_aggref(Aggref *aggref, PlannerInfo *root)
|
||||
aggno = find_compatible_agg(root, aggref, &same_input_transnos);
|
||||
if (aggno != -1)
|
||||
{
|
||||
AggInfo *agginfo = list_nth(root->agginfos, aggno);
|
||||
AggInfo *agginfo = list_nth_node(AggInfo, root->agginfos, aggno);
|
||||
|
||||
transno = agginfo->transno;
|
||||
}
|
||||
else
|
||||
{
|
||||
AggInfo *agginfo = palloc(sizeof(AggInfo));
|
||||
AggInfo *agginfo = makeNode(AggInfo);
|
||||
|
||||
agginfo->finalfn_oid = aggfinalfn;
|
||||
agginfo->representative_aggref = aggref;
|
||||
@ -266,7 +266,7 @@ preprocess_aggref(Aggref *aggref, PlannerInfo *root)
|
||||
same_input_transnos);
|
||||
if (transno == -1)
|
||||
{
|
||||
AggTransInfo *transinfo = palloc(sizeof(AggTransInfo));
|
||||
AggTransInfo *transinfo = makeNode(AggTransInfo);
|
||||
|
||||
transinfo->args = aggref->args;
|
||||
transinfo->aggfilter = aggref->aggfilter;
|
||||
@ -381,7 +381,7 @@ find_compatible_agg(PlannerInfo *root, Aggref *newagg,
|
||||
aggno = -1;
|
||||
foreach(lc, root->agginfos)
|
||||
{
|
||||
AggInfo *agginfo = (AggInfo *) lfirst(lc);
|
||||
AggInfo *agginfo = lfirst_node(AggInfo, lc);
|
||||
Aggref *existingRef;
|
||||
|
||||
aggno++;
|
||||
@ -452,7 +452,9 @@ find_compatible_trans(PlannerInfo *root, Aggref *newagg, bool shareable,
|
||||
foreach(lc, transnos)
|
||||
{
|
||||
int transno = lfirst_int(lc);
|
||||
AggTransInfo *pertrans = (AggTransInfo *) list_nth(root->aggtransinfos, transno);
|
||||
AggTransInfo *pertrans = list_nth_node(AggTransInfo,
|
||||
root->aggtransinfos,
|
||||
transno);
|
||||
|
||||
/*
|
||||
* if the transfns or transition state types are not the same then the
|
||||
@ -541,7 +543,7 @@ get_agg_clause_costs(PlannerInfo *root, AggSplit aggsplit, AggClauseCosts *costs
|
||||
|
||||
foreach(lc, root->aggtransinfos)
|
||||
{
|
||||
AggTransInfo *transinfo = (AggTransInfo *) lfirst(lc);
|
||||
AggTransInfo *transinfo = lfirst_node(AggTransInfo, lc);
|
||||
|
||||
/*
|
||||
* Add the appropriate component function execution costs to
|
||||
@ -645,7 +647,7 @@ get_agg_clause_costs(PlannerInfo *root, AggSplit aggsplit, AggClauseCosts *costs
|
||||
|
||||
foreach(lc, root->agginfos)
|
||||
{
|
||||
AggInfo *agginfo = (AggInfo *) lfirst(lc);
|
||||
AggInfo *agginfo = lfirst_node(AggInfo, lc);
|
||||
Aggref *aggref = agginfo->representative_aggref;
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user