On Fri, 3 Oct 2025 at 04:18, Tom Lane <[email protected]> wrote: > 0001's change in is_dummy_rel() seems like a complete hack, especially > since you didn't bother to change the adjacent comment. Why is that > necessary?
build_setop_child_paths() wraps the child inputs in SubqueryScanPaths,
so we need to see through those.
An alternative way would be to propagate those during build_setop_child_paths()
--- a/src/backend/optimizer/prep/prepunion.c
+++ b/src/backend/optimizer/prep/prepunion.c
@@ -523,6 +523,13 @@ build_setop_child_paths(PlannerInfo *root, RelOptInfo *rel,
bool is_sorted;
int presorted_keys;
+ /* If the input rel is dummy, propagate that to this query level */
+ if (is_dummy_rel(final_rel))
+ {
+ mark_dummy_rel(rel);
+ continue;
+ }
+
As attached.
> v2 LGTM otherwise.
Thanks
David
v3-0001-Teach-UNION-planner-to-remove-dummy-inputs.patch
Description: Binary data
v3-0002-Teach-planner-to-short-circuit-EXCEPT-INTERSECT-w.patch
Description: Binary data
