1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-18 10:21:03 +03:00

Ensure that objects within view definitions are not incorrectly resolved to CTEs that are part of the statement using the view.

FossilOrigin-Name: f7dcc4b5197c6413be31384b390bb98a737d3f9edb7964433448c3b90b35a436
This commit is contained in:
dan
2021-05-20 17:15:06 +00:00
parent a8f249f1e7
commit 90bc36fb30
5 changed files with 69 additions and 8 deletions

View File

@@ -5011,6 +5011,7 @@ static struct Cte *searchWith(
return &p->a[i];
}
}
if( p->bView ) break;
}
return 0;
}
@@ -5323,6 +5324,15 @@ static int selectExpander(Walker *pWalker, Select *p){
}
pTabList = p->pSrc;
pEList = p->pEList;
if( pParse->pWith && (p->selFlags & SF_View) ){
if( p->pWith==0 ){
p->pWith = (With*)sqlite3DbMallocZero(db, sizeof(With));
if( p->pWith==0 ){
return WRC_Abort;
}
}
p->pWith->bView = 1;
}
sqlite3WithPush(pParse, p->pWith, 0);
/* Make sure cursor numbers have been assigned to all entries in

View File

@@ -3926,6 +3926,7 @@ struct Cte {
*/
struct With {
int nCte; /* Number of CTEs in the WITH clause */
int bView; /* Belongs to the outermost Select of a view */
With *pOuter; /* Containing WITH clause, or NULL */
Cte a[1]; /* For each CTE in the WITH clause.... */
};