@ -342,6 +342,7 @@ static Query *
transformDeleteStmt ( ParseState * pstate , DeleteStmt * stmt )
{
Query * qry = makeNode ( Query ) ;
ParseNamespaceItem * nsitem ;
Node * qual ;
qry - > commandType = CMD_DELETE ;
@ -360,8 +361,15 @@ transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt)
true ,
ACL_DELETE ) ;
/* grab the namespace item made by setTargetTable */
nsitem = ( ParseNamespaceItem * ) llast ( pstate - > p_namespace ) ;
/* there's no DISTINCT in DELETE */
qry - > distinctClause = NIL ;
/* subqueries in USING can see the result relation only via LATERAL */
nsitem - > p_lateral_only = true ;
/*
* The USING clause is non - standard SQL syntax , and is equivalent in
* functionality to the FROM list that can be specified for UPDATE . The
@ -370,6 +378,9 @@ transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt)
*/
transformFromClause ( pstate , stmt - > usingClause ) ;
/* remaining clauses can see the result relation normally */
nsitem - > p_lateral_only = false ;
qual = transformWhereClause ( pstate , stmt - > whereClause ,
EXPR_KIND_WHERE , " WHERE " ) ;
@ -1889,6 +1900,7 @@ static Query *
transformUpdateStmt ( ParseState * pstate , UpdateStmt * stmt )
{
Query * qry = makeNode ( Query ) ;
ParseNamespaceItem * nsitem ;
RangeTblEntry * target_rte ;
Node * qual ;
ListCell * origTargetList ;
@ -1910,12 +1922,21 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt)
true ,
ACL_UPDATE ) ;
/* grab the namespace item made by setTargetTable */
nsitem = ( ParseNamespaceItem * ) llast ( pstate - > p_namespace ) ;
/* subqueries in FROM can see the result relation only via LATERAL */
nsitem - > p_lateral_only = true ;
/*
* the FROM clause is non - standard SQL syntax . We used to be able to do
* this with REPLACE in POSTQUEL so we keep the feature .
*/
transformFromClause ( pstate , stmt - > fromClause ) ;
/* remaining clauses can see the result relation normally */
nsitem - > p_lateral_only = false ;
qry - > targetList = transformTargetList ( pstate , stmt - > targetList ,
EXPR_KIND_UPDATE_SOURCE ) ;