Skip to content

Commit 1f91c8c

Browse files
committed
Avoid planner crash/Assert failure with joins to unflattened subqueries.
examine_simple_variable supposed that any RTE_SUBQUERY rel it gets pointed at must have been planned already. However, this isn't a safe assumption because we must do selectivity estimation while generating indexscan paths, and that code might look at join clauses involving a rel that the loop in set_base_rel_sizes() hasn't reached yet. The simplest fix is to play dumb in such a situation, that is give up trying to extract any stats for the Var. This could possibly be improved by making a separate pass over the RTE list to plan each unflattened subquery before we start the main planning work --- but that would be pretty invasive and it doesn't seem worth it, for now at least. (We couldn't just break set_base_rel_sizes() into two loops: the prescan would need to handle all subquery rels in the query, not only those in the current join subproblem.) This bug was introduced in commit 1cb108e, although I think that subsequent changes may have exposed it more than it was originally. Per bug #7580 from Maxim Boguk.
1 parent fe3b5eb commit 1f91c8c

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/backend/utils/adt/selfuncs.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4518,8 +4518,10 @@ examine_simple_variable(PlannerInfo *root, Var *var,
45184518
*/
45194519
rel = find_base_rel(root, var->varno);
45204520

4521-
/* Subquery should have been planned already */
4522-
Assert(rel->subroot && IsA(rel->subroot, PlannerInfo));
4521+
/* If the subquery hasn't been planned yet, we have to punt */
4522+
if (rel->subroot == NULL)
4523+
return;
4524+
Assert(IsA(rel->subroot, PlannerInfo));
45234525

45244526
/*
45254527
* Switch our attention to the subquery as mangled by the planner. It

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy