From ac93b6513dfd3fd066cbbe51eced2bc00146f0c0 Mon Sep 17 00:00:00 2001 From: jcoleman Date: Fri, 7 May 2021 15:37:22 +0000 Subject: [PATCH v1 3/3] Other places to consider for completeness --- src/backend/optimizer/path/allpaths.c | 4 ++++ src/backend/optimizer/plan/planmain.c | 2 +- src/backend/optimizer/plan/planner.c | 3 +++ src/backend/optimizer/plan/subselect.c | 3 +++ src/backend/optimizer/prep/prepunion.c | 2 ++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index ae744da135..5696a54b18 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -1142,6 +1142,8 @@ set_append_rel_size(PlannerInfo *root, RelOptInfo *rel, */ if (!childrel->consider_parallel) rel->consider_parallel = false; + if (!childrel->consider_parallel_rechecking_params) + rel->consider_parallel_rechecking_params = false; /* * Accumulate size information from each live child. @@ -1263,6 +1265,8 @@ set_append_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, */ if (!rel->consider_parallel) childrel->consider_parallel = false; + if (!childrel->consider_parallel_rechecking_params) + rel->consider_parallel_rechecking_params = false; /* * Compute the child's access paths. diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index bdbce2b87d..5135f9ee97 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -119,7 +119,7 @@ query_planner(PlannerInfo *root, if (root->glob->parallelModeOK && force_parallel_mode != FORCE_PARALLEL_OFF) final_rel->consider_parallel = - is_parallel_safe(root, parse->jointree->quals, NULL); + is_parallel_safe(root, parse->jointree->quals, &final_rel->consider_parallel_rechecking_params); /* * The only path for it is a trivial Result path. We cheat a diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 28b8f7d8b5..fb35cd78d1 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -4088,6 +4088,7 @@ create_window_paths(PlannerInfo *root, if (input_rel->consider_parallel && output_target_parallel_safe && is_parallel_safe(root, (Node *) activeWindows, NULL)) window_rel->consider_parallel = true; + /* consider_parallel_rechecking_params */ /* * If the input rel belongs to a single FDW, so does the window rel. @@ -4292,6 +4293,7 @@ create_distinct_paths(PlannerInfo *root, * expressions are parallel-safe. */ distinct_rel->consider_parallel = input_rel->consider_parallel; + distinct_rel->consider_parallel_rechecking_params = input_rel->consider_parallel_rechecking_params; /* * If the input rel belongs to a single FDW, so does the distinct_rel. @@ -4493,6 +4495,7 @@ create_ordered_paths(PlannerInfo *root, */ if (input_rel->consider_parallel && target_parallel_safe) ordered_rel->consider_parallel = true; + /* consider_parallel_rechecking_params */ /* * If the input rel belongs to a single FDW, so does the ordered_rel. diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index fd1cfe6c73..0c6fbf16a2 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -1022,6 +1022,7 @@ SS_process_ctes(PlannerInfo *root) * parallel-safe. */ splan->parallel_safe = false; + splan->parallel_safe_ignoring_params = false; splan->setParam = NIL; splan->parParam = NIL; splan->args = NIL; @@ -2178,6 +2179,7 @@ SS_charge_for_initplans(PlannerInfo *root, RelOptInfo *final_rel) path->startup_cost += initplan_cost; path->total_cost += initplan_cost; path->parallel_safe = false; + path->parallel_safe_ignoring_params = false; } /* @@ -2186,6 +2188,7 @@ SS_charge_for_initplans(PlannerInfo *root, RelOptInfo *final_rel) */ final_rel->partial_pathlist = NIL; final_rel->consider_parallel = false; + final_rel->consider_parallel_rechecking_params = false; /* We needn't do set_cheapest() here, caller will do it */ } diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index a57bc1c2a8..c535131144 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -273,6 +273,7 @@ recurse_set_operations(Node *setOp, PlannerInfo *root, */ final_rel = fetch_upper_rel(subroot, UPPERREL_FINAL, NULL); rel->consider_parallel = final_rel->consider_parallel; + rel->consider_parallel_rechecking_params = final_rel->consider_parallel_rechecking_params; /* * For the moment, we consider only a single Path for the subquery. @@ -617,6 +618,7 @@ generate_union_paths(SetOperationStmt *op, PlannerInfo *root, result_rel = fetch_upper_rel(root, UPPERREL_SETOP, relids); result_rel->reltarget = create_pathtarget(root, tlist); result_rel->consider_parallel = consider_parallel; + /* consider_parallel_rechecking_params */ /* * Append the child results together. -- 2.20.1