Committed after incorporating your other fixes and updating the optimizer README.
Thanks Robert.
Off-list Rajkumar has reported an issue. When we have enable_hashagg set to false, and Gather Merge path is chosen, it ended-up in an error saying "ERROR: Aggref found in non-Agg plan node".
I had a look over his provided testcase and observed that when we create a Gather Merge path over a cheapest partial path by sorting it explicitly as generate_gather_paths won't consider it, we accidentally used cheapest partial path from the input_rel to create a Gather Merge; instead we need a cheapest partial path from the partially_grouped_rel.
Attached fix_aggref_in_non-agg_error.patch fixing this. test_for_aggref_in_non-agg_error.patch has a testcase reported by Rajkumar which I have added in a aggregates.sql.
While doing so, I have observed few cleanup changes, added those in misc_cleanup.patch.
---
While re-basing my partitionwise aggregate changes, I observed that when we want to create partial aggregation paths for a child partition, we don't need to add Gather or Gather Merge on top of it as we first want to append them all and then want to stick a gather on it. So it will be better to have that code part in a separate function so that we can call it from required places.
I have attached patch (create_non_partial_paths.patch) for it including all above fix.