diff options
author | drh <> | 2021-05-20 00:44:04 +0000 |
---|---|---|
committer | drh <> | 2021-05-20 00:44:04 +0000 |
commit | cd1499f47b1de7c6ca9eb9e68e169218a203c5df (patch) | |
tree | 9426f29f5bd89df5876ea8af4aa0535e088cff9a /src/attach.c | |
parent | 5da5b71435fcb7d4cd8e43a3ce386b5c852e4e2e (diff) | |
download | sqlite-cd1499f47b1de7c6ca9eb9e68e169218a203c5df.tar.gz sqlite-cd1499f47b1de7c6ca9eb9e68e169218a203c5df.zip |
Replace [0f0959c6f95046e8] with a new and better solution that also fixes the
CTE name resolution problem described in
[forum:/forumpost/8590e3f6dc|forum post 8590e3f6dc].
Test cases for both problems added.
FossilOrigin-Name: 5614279daff5007d6e047c5c1b3cc82ba80a5c91c529525b0fe68b79ee82dd2c
Diffstat (limited to 'src/attach.c')
-rw-r--r-- | src/attach.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/attach.c b/src/attach.c index 6d178b6ba..2fc84e5b8 100644 --- a/src/attach.c +++ b/src/attach.c @@ -464,14 +464,17 @@ static int fixSelectCb(Walker *p, Select *pSelect){ if( NEVER(pList==0) ) return WRC_Continue; for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){ if( pFix->bTemp==0 ){ - if( pItem->zDatabase && iDb!=sqlite3FindDbName(db, pItem->zDatabase) ){ - sqlite3ErrorMsg(pFix->pParse, - "%s %T cannot reference objects in database %s", - pFix->zType, pFix->pName, pItem->zDatabase); - return WRC_Abort; + if( pItem->zDatabase ){ + if( iDb!=sqlite3FindDbName(db, pItem->zDatabase) ){ + sqlite3ErrorMsg(pFix->pParse, + "%s %T cannot reference objects in database %s", + pFix->zType, pFix->pName, pItem->zDatabase); + return WRC_Abort; + } + sqlite3DbFree(db, pItem->zDatabase); + pItem->zDatabase = 0; + pItem->fg.notCte = 1; } - sqlite3DbFree(db, pItem->zDatabase); - pItem->zDatabase = 0; pItem->pSchema = pFix->pSchema; pItem->fg.fromDDL = 1; } |