From 4132c2144c71c4dac91a0428e97f6d5d81843f62 Mon Sep 17 00:00:00 2001 From: jcoleman Date: Fri, 7 May 2021 15:37:22 +0000 Subject: [PATCH v2 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 5ab6d0e23f..17438d2ea1 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 25ed2b2788..7cde1da3c3 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -4095,6 +4095,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, RelOptInfo *input_rel) * 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. @@ -4646,6 +4648,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 393db3b42d..3e1001fa86 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -1020,6 +1020,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; @@ -2176,6 +2177,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; } /* @@ -2184,6 +2186,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 16cb35c914..ab92e7d7e4 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