@ -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 ) ;