Finish incomplete revert of ec63622c0.
authorTom Lane <[email protected]>
Mon, 6 May 2024 18:22:45 +0000 (14:22 -0400)
committerTom Lane <[email protected]>
Mon, 6 May 2024 18:22:45 +0000 (14:22 -0400)
The code change this made might well be fine to keep, but the
comment justifying it by reference to self-join removal isn't.
Let's just go back to the status quo ante, pending a more thorough
review/redesign of SJE.

(I found this by grepping to see if any references to self-join
removal remained in the tree.)

src/backend/optimizer/prep/prepunion.c

index 3f14e90a45bb09c77c60820230ea49a121f25b75..30068c27a1329207becdcc2dad004f0ceb9b9f93 100644 (file)
@@ -662,17 +662,14 @@ build_setop_child_paths(PlannerInfo *root, RelOptInfo *rel,
     * otherwise do statistical estimation.
     *
     * XXX you don't really want to know about this: we do the estimation
-    * using the subroot->parse's original targetlist expressions, not the
+    * using the subquery's original targetlist expressions, not the
     * subroot->processed_tlist which might seem more appropriate.  The reason
     * is that if the subquery is itself a setop, it may return a
     * processed_tlist containing "varno 0" Vars generated by
     * generate_append_tlist, and those would confuse estimate_num_groups
     * mightily.  We ought to get rid of the "varno 0" hack, but that requires
     * a redesign of the parsetree representation of setops, so that there can
-    * be an RTE corresponding to each setop's output.  Note, we use this not
-    * subquery's targetlist but subroot->parse's targetlist, because it was
-    * revised by self-join removal. subquery's targetlist might contain the
-    * references to the removed relids.
+    * be an RTE corresponding to each setop's output.
     */
    if (pNumGroups)
    {
@@ -685,7 +682,7 @@ build_setop_child_paths(PlannerInfo *root, RelOptInfo *rel,
            *pNumGroups = rel->cheapest_total_path->rows;
        else
            *pNumGroups = estimate_num_groups(subroot,
-                                             get_tlist_exprs(subroot->parse->targetList, false),
+                                             get_tlist_exprs(subquery->targetList, false),
                                              rel->cheapest_total_path->rows,
                                              NULL,
                                              NULL);