mirror of
https://github.com/postgres/postgres.git
synced 2025-07-12 21:01:52 +03:00
Reimplement planner's handling of MIN/MAX aggregate optimization (again).
Instead of playing cute games with pathkeys, just build a direct representation of the intended sub-select, and feed it through query_planner to get a Path for the index access. This is a bit slower than 9.1's previous method, since we'll duplicate most of the overhead of query_planner; but since the whole optimization only applies to rather simple single-table queries, that probably won't be much of a problem in practice. The advantage is that we get to do the right thing when there's a partial index that needs the implicit IS NOT NULL clause to be usable. Also, although this makes planagg.c be a bit more closely tied to the ordering of operations in grouping_planner, we can get rid of some coupling to lower-level parts of the planner. Per complaint from Marti Raudsepp.
This commit is contained in:
@ -1930,22 +1930,6 @@ _copyPlaceHolderInfo(PlaceHolderInfo *from)
|
||||
return newnode;
|
||||
}
|
||||
|
||||
/*
|
||||
* _copyMinMaxAggInfo
|
||||
*/
|
||||
static MinMaxAggInfo *
|
||||
_copyMinMaxAggInfo(MinMaxAggInfo *from)
|
||||
{
|
||||
MinMaxAggInfo *newnode = makeNode(MinMaxAggInfo);
|
||||
|
||||
COPY_SCALAR_FIELD(aggfnoid);
|
||||
COPY_SCALAR_FIELD(aggsortop);
|
||||
COPY_NODE_FIELD(target);
|
||||
COPY_NODE_FIELD(pathkeys);
|
||||
|
||||
return newnode;
|
||||
}
|
||||
|
||||
/* ****************************************************************
|
||||
* parsenodes.h copy functions
|
||||
* ****************************************************************
|
||||
@ -4129,9 +4113,6 @@ copyObject(void *from)
|
||||
case T_PlaceHolderInfo:
|
||||
retval = _copyPlaceHolderInfo(from);
|
||||
break;
|
||||
case T_MinMaxAggInfo:
|
||||
retval = _copyMinMaxAggInfo(from);
|
||||
break;
|
||||
|
||||
/*
|
||||
* VALUE NODES
|
||||
|
Reference in New Issue
Block a user