On Fri, 4 Feb 2022 at 13:48, Robert Haas <robertmhaas@gmail.com> wrote: > I think the actual rule is: every path under a Gather or GatherMerge > must be parallel-safe.
I've adjusted the patch so that it counts parallel_aware and parallel_safe Paths independently and verifies everything below a Gather[Merge] is parallel_safe.
I still feel this is quite a bit of code for what we're getting here. I'd be more for it if the path traversal function existed for some other reason and I was just adding the callback functions and Asserts.
I'm keen to hear what others think about that.
David
Hi,
+ break;
+ case T_MergeAppend:
The case for T_MergeAppend should be left indented.
+ case T_Result: + if (IsA(path, ProjectionPath))
Since the remaining sub-cases don't have subpath, they are covered by the final `else` block - MinMaxAggPath and GroupResultPath don't need to be checked.
For contains_a_parallel_aware_path(), it seems path_type_counter() can return bool indicating whether the walker should return early (when parallel aware count reaches 1).