prepare group optimizations to be extensible

moonshot/custom-path
Nils Dijk 2021-11-30 17:55:07 +01:00
parent 4542265dbf
commit ffc73634a8
No known key found for this signature in database
GPG Key ID: CA1177EF9434F241
1 changed files with 14 additions and 5 deletions

View File

@ -145,6 +145,11 @@ static optimizeFn joinOptimizations[] = {
/* GeoOverlapJoin, */ /* GeoOverlapJoin, */
}; };
static optimizeFn groupOptimizations[] = {
PushDownAggPath,
RepartitionAggPath,
};
const CustomPathMethods geoScanMethods = { const CustomPathMethods geoScanMethods = {
.CustomName = "GeoScan", .CustomName = "GeoScan",
}; };
@ -1590,10 +1595,9 @@ PathBasedPlannerJoinHook(PlannerInfo *root,
*/ */
List *newPaths = NIL; List *newPaths = NIL;
ListCell *pathCell = NULL; Path *originalPath = NULL;
foreach(pathCell, joinrel->pathlist) foreach_ptr(originalPath, joinrel->pathlist)
{ {
Path *originalPath = lfirst(pathCell);
for (int i = 0; i < sizeof(joinOptimizations) / sizeof(joinOptimizations[1]); i++) for (int i = 0; i < sizeof(joinOptimizations) / sizeof(joinOptimizations[1]); i++)
{ {
List *alternativePaths = joinOptimizations[i](root, originalPath); List *alternativePaths = joinOptimizations[i](root, originalPath);
@ -1991,10 +1995,15 @@ PathBasedPlannerGroupAgg(PlannerInfo *root,
Path *originalPath = NULL; Path *originalPath = NULL;
foreach_ptr(originalPath, output_rel->pathlist) foreach_ptr(originalPath, output_rel->pathlist)
{ {
newPaths = list_concat(newPaths, PushDownAggPath(root, originalPath)); /* apply all optimizations on every available path */
newPaths = list_concat(newPaths, RepartitionAggPath(root, originalPath)); for (int i = 0; i < sizeof(groupOptimizations) / sizeof(groupOptimizations[1]); i++)
{
List *alternativePaths = groupOptimizations[i](root, originalPath);
newPaths = list_concat(newPaths, alternativePaths);
}
} }
/* offer new paths to output_rel */
Path *newPath = NULL; Path *newPath = NULL;
foreach_ptr(newPath, newPaths) foreach_ptr(newPath, newPaths)
{ {