Simplify planner's final setup of Aggrefs for partial aggregation.
Commit e06a3896's original coding for constructing the execution-time expression tree for a combining aggregate was rather messy, involving duplicating quite a lot of code in setrefs.c so that it could inject a nonstandard matching rule for Aggrefs. Get rid of that in favor of explicitly constructing a combining Aggref with a partial Aggref as input, then allowing setref's normal matching logic to match the partial Aggref to the output of the lower plan node and hence replace it with a Var. In passing, rename and redocument make_partialgroup_input_target to have some connection to what it actually does.
Showing
- src/backend/optimizer/plan/planner.c 89 additions, 37 deletionssrc/backend/optimizer/plan/planner.c
- src/backend/optimizer/plan/setrefs.c 80 additions, 245 deletionssrc/backend/optimizer/plan/setrefs.c
- src/backend/optimizer/util/tlist.c 0 additions, 51 deletionssrc/backend/optimizer/util/tlist.c
- src/include/optimizer/planner.h 2 additions, 0 deletionssrc/include/optimizer/planner.h
- src/include/optimizer/tlist.h 0 additions, 1 deletionsrc/include/optimizer/tlist.h
Loading
Please register or sign in to comment