mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
Require non-NULL pstate for all addRangeTableEntryFor* functions.
Per discussion, it's better to have a consistent coding rule here. Michael Paquier, per a node from Greg Stark referencing an old post from Tom Lane.
This commit is contained in:
parent
c6b3c939b7
commit
bc93ac12c2
@ -345,6 +345,7 @@ UpdateRangeTableOfViewParse(Oid viewOid, Query *viewParse)
|
||||
List *new_rt;
|
||||
RangeTblEntry *rt_entry1,
|
||||
*rt_entry2;
|
||||
ParseState *pstate;
|
||||
|
||||
/*
|
||||
* Make a copy of the given parsetree. It's not so much that we don't
|
||||
@ -356,6 +357,9 @@ UpdateRangeTableOfViewParse(Oid viewOid, Query *viewParse)
|
||||
*/
|
||||
viewParse = (Query *) copyObject(viewParse);
|
||||
|
||||
/* Create a dummy ParseState for addRangeTableEntryForRelation */
|
||||
pstate = make_parsestate(NULL);
|
||||
|
||||
/* need to open the rel for addRangeTableEntryForRelation */
|
||||
viewRel = relation_open(viewOid, AccessShareLock);
|
||||
|
||||
@ -363,10 +367,10 @@ UpdateRangeTableOfViewParse(Oid viewOid, Query *viewParse)
|
||||
* Create the 2 new range table entries and form the new range table...
|
||||
* OLD first, then NEW....
|
||||
*/
|
||||
rt_entry1 = addRangeTableEntryForRelation(NULL, viewRel,
|
||||
rt_entry1 = addRangeTableEntryForRelation(pstate, viewRel,
|
||||
makeAlias("old", NIL),
|
||||
false, false);
|
||||
rt_entry2 = addRangeTableEntryForRelation(NULL, viewRel,
|
||||
rt_entry2 = addRangeTableEntryForRelation(pstate, viewRel,
|
||||
makeAlias("new", NIL),
|
||||
false, false);
|
||||
/* Must override addRangeTableEntry's default access-check flags */
|
||||
|
@ -1233,6 +1233,7 @@ convert_ANY_sublink_to_join(PlannerInfo *root, SubLink *sublink,
|
||||
RangeTblRef *rtr;
|
||||
List *subquery_vars;
|
||||
Node *quals;
|
||||
ParseState *pstate;
|
||||
|
||||
Assert(sublink->subLinkType == ANY_SUBLINK);
|
||||
|
||||
@ -1264,6 +1265,9 @@ convert_ANY_sublink_to_join(PlannerInfo *root, SubLink *sublink,
|
||||
if (contain_volatile_functions(sublink->testexpr))
|
||||
return NULL;
|
||||
|
||||
/* Create a dummy ParseState for addRangeTableEntryForSubquery */
|
||||
pstate = make_parsestate(NULL);
|
||||
|
||||
/*
|
||||
* Okay, pull up the sub-select into upper range table.
|
||||
*
|
||||
@ -1272,7 +1276,7 @@ convert_ANY_sublink_to_join(PlannerInfo *root, SubLink *sublink,
|
||||
* below). Therefore this is a lot easier than what pull_up_subqueries has
|
||||
* to go through.
|
||||
*/
|
||||
rte = addRangeTableEntryForSubquery(NULL,
|
||||
rte = addRangeTableEntryForSubquery(pstate,
|
||||
subselect,
|
||||
makeAlias("ANY_subquery", NIL),
|
||||
false,
|
||||
|
@ -1245,6 +1245,8 @@ addRangeTableEntryForRelation(ParseState *pstate,
|
||||
RangeTblEntry *rte = makeNode(RangeTblEntry);
|
||||
char *refname = alias ? alias->aliasname : RelationGetRelationName(rel);
|
||||
|
||||
Assert(pstate != NULL);
|
||||
|
||||
rte->rtekind = RTE_RELATION;
|
||||
rte->alias = alias;
|
||||
rte->relid = RelationGetRelid(rel);
|
||||
@ -1276,8 +1278,7 @@ addRangeTableEntryForRelation(ParseState *pstate,
|
||||
* Add completed RTE to pstate's range table list, but not to join list
|
||||
* nor namespace --- caller must do that if appropriate.
|
||||
*/
|
||||
if (pstate != NULL)
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
|
||||
return rte;
|
||||
}
|
||||
@ -1302,6 +1303,8 @@ addRangeTableEntryForSubquery(ParseState *pstate,
|
||||
int varattno;
|
||||
ListCell *tlistitem;
|
||||
|
||||
Assert(pstate != NULL);
|
||||
|
||||
rte->rtekind = RTE_SUBQUERY;
|
||||
rte->relid = InvalidOid;
|
||||
rte->subquery = subquery;
|
||||
@ -1354,8 +1357,7 @@ addRangeTableEntryForSubquery(ParseState *pstate,
|
||||
* Add completed RTE to pstate's range table list, but not to join list
|
||||
* nor namespace --- caller must do that if appropriate.
|
||||
*/
|
||||
if (pstate != NULL)
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
|
||||
return rte;
|
||||
}
|
||||
@ -1391,6 +1393,8 @@ addRangeTableEntryForFunction(ParseState *pstate,
|
||||
int natts,
|
||||
totalatts;
|
||||
|
||||
Assert(pstate != NULL);
|
||||
|
||||
rte->rtekind = RTE_FUNCTION;
|
||||
rte->relid = InvalidOid;
|
||||
rte->subquery = NULL;
|
||||
@ -1608,8 +1612,7 @@ addRangeTableEntryForFunction(ParseState *pstate,
|
||||
* Add completed RTE to pstate's range table list, but not to join list
|
||||
* nor namespace --- caller must do that if appropriate.
|
||||
*/
|
||||
if (pstate != NULL)
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
|
||||
return rte;
|
||||
}
|
||||
@ -1633,6 +1636,8 @@ addRangeTableEntryForValues(ParseState *pstate,
|
||||
int numaliases;
|
||||
int numcolumns;
|
||||
|
||||
Assert(pstate != NULL);
|
||||
|
||||
rte->rtekind = RTE_VALUES;
|
||||
rte->relid = InvalidOid;
|
||||
rte->subquery = NULL;
|
||||
@ -1680,8 +1685,7 @@ addRangeTableEntryForValues(ParseState *pstate,
|
||||
* Add completed RTE to pstate's range table list, but not to join list
|
||||
* nor namespace --- caller must do that if appropriate.
|
||||
*/
|
||||
if (pstate != NULL)
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
|
||||
return rte;
|
||||
}
|
||||
@ -1703,6 +1707,8 @@ addRangeTableEntryForJoin(ParseState *pstate,
|
||||
Alias *eref;
|
||||
int numaliases;
|
||||
|
||||
Assert(pstate != NULL);
|
||||
|
||||
/*
|
||||
* Fail if join has too many columns --- we must be able to reference any
|
||||
* of the columns with an AttrNumber.
|
||||
@ -1748,8 +1754,7 @@ addRangeTableEntryForJoin(ParseState *pstate,
|
||||
* Add completed RTE to pstate's range table list, but not to join list
|
||||
* nor namespace --- caller must do that if appropriate.
|
||||
*/
|
||||
if (pstate != NULL)
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
|
||||
return rte;
|
||||
}
|
||||
@ -1774,6 +1779,8 @@ addRangeTableEntryForCTE(ParseState *pstate,
|
||||
int varattno;
|
||||
ListCell *lc;
|
||||
|
||||
Assert(pstate != NULL);
|
||||
|
||||
rte->rtekind = RTE_CTE;
|
||||
rte->ctename = cte->ctename;
|
||||
rte->ctelevelsup = levelsup;
|
||||
@ -1848,8 +1855,7 @@ addRangeTableEntryForCTE(ParseState *pstate,
|
||||
* Add completed RTE to pstate's range table list, but not to join list
|
||||
* nor namespace --- caller must do that if appropriate.
|
||||
*/
|
||||
if (pstate != NULL)
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
pstate->p_rtable = lappend(pstate->p_rtable, rte);
|
||||
|
||||
return rte;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user