aboutsummaryrefslogtreecommitdiff
path: root/src/select.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2015-10-11 20:39:46 +0000
committerdrh <drh@noemail.net>2015-10-11 20:39:46 +0000
commitbfad7be78a7080c49b56bb65428d3078972f18e5 (patch)
tree3ee74464edaac12330daa078c89590ad88ad9b6a /src/select.c
parent2906490b716daac524fbb3c1863c3ab9f4e2fc64 (diff)
downloadsqlite-bfad7be78a7080c49b56bb65428d3078972f18e5.tar.gz
sqlite-bfad7be78a7080c49b56bb65428d3078972f18e5.zip
Detect and report circularly defined views even if the views have the
columns defined in the CREATE VIEW statement. FossilOrigin-Name: 9ab9c8c6d747647f8ade58c2c4812fc69a813368
Diffstat (limited to 'src/select.c')
-rw-r--r--src/select.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/select.c b/src/select.c
index 566cec44b..fad46f0b4 100644
--- a/src/select.c
+++ b/src/select.c
@@ -4248,6 +4248,7 @@ static int selectExpander(Walker *pWalker, Select *p){
pTab->nRef++;
#if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
if( pTab->pSelect || IsVirtual(pTab) ){
+ i16 nCol;
if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
assert( pFrom->pSelect==0 );
if( pFrom->fg.isTabFunc && !IsVirtual(pTab) ){
@@ -4256,7 +4257,10 @@ static int selectExpander(Walker *pWalker, Select *p){
}
pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
sqlite3SelectSetName(pFrom->pSelect, pTab->zName);
+ nCol = pTab->nCol;
+ pTab->nCol = -1;
sqlite3WalkSelect(pWalker, pFrom->pSelect);
+ pTab->nCol = nCol;
}
#endif
}