Finish incomplete revert of ec63622c0.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 May 2024 18:22:45 +0000 (14:22 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
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);