@ -1151,6 +1151,7 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
Node * limitOffset ;
Node * limitCount ;
List * lockingClause ;
WithClause * withClause ;
Node * node ;
ListCell * left_tlist ,
* lct ,
@ -1193,11 +1194,13 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
limitOffset = stmt - > limitOffset ;
limitCount = stmt - > limitCount ;
lockingClause = stmt - > lockingClause ;
withClause = stmt - > withClause ;
stmt - > sortClause = NIL ;
stmt - > limitOffset = NULL ;
stmt - > limitCount = NULL ;
stmt - > lockingClause = NIL ;
stmt - > withClause = NULL ;
/* We don't support FOR UPDATE/SHARE with set ops at the moment. */
if ( lockingClause )
@ -1205,11 +1208,11 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
( errcode ( ERRCODE_FEATURE_NOT_SUPPORTED ) ,
errmsg ( " SELECT FOR UPDATE/SHARE is not allowed with UNION/INTERSECT/EXCEPT " ) ) ) ;
/* process the WITH clau se */
if ( stmt - > withClause )
/* Process the WITH clause independently of all el se */
if ( withClause )
{
qry - > hasRecursive = stmt - > withClause - > recursive ;
qry - > cteList = transformWithClause ( pstate , stmt - > withClause ) ;
qry - > hasRecursive = withClause - > recursive ;
qry - > cteList = transformWithClause ( pstate , withClause ) ;
}
/*
@ -1400,10 +1403,10 @@ transformSetOperationTree(ParseState *pstate, SelectStmt *stmt,
errmsg ( " SELECT FOR UPDATE/SHARE is not allowed with UNION/INTERSECT/EXCEPT " ) ) ) ;
/*
* If an internal node of a set - op tree has ORDER BY , UPDATE , or LIMIT
* clauses attached , we need to treat it like a leaf node to generate an
* independent sub - Query tree . Otherwise , it can be represented by a
* SetOperationStmt node underneath the parent Query .
* If an internal node of a set - op tree has ORDER BY , LIMIT , FOR UPDATE ,
* or WITH clauses attached , we need to treat it like a leaf node to
* generate an independent sub - Query tree . Otherwise , it can be
* represented by a SetOperationStmt node underneath the parent Query .
*/
if ( stmt - > op = = SETOP_NONE )
{
@ -1414,7 +1417,7 @@ transformSetOperationTree(ParseState *pstate, SelectStmt *stmt,
{
Assert ( stmt - > larg ! = NULL & & stmt - > rarg ! = NULL ) ;
if ( stmt - > sortClause | | stmt - > limitOffset | | stmt - > limitCount | |
stmt - > lockingClause )
stmt - > lockingClause | | stmt - > withClause )
isLeaf = true ;
else
isLeaf = false ;