aboutsummaryrefslogtreecommitdiff
path: root/src/attach.c
diff options
context:
space:
mode:
authordrh <>2021-05-20 00:44:04 +0000
committerdrh <>2021-05-20 00:44:04 +0000
commitcd1499f47b1de7c6ca9eb9e68e169218a203c5df (patch)
tree9426f29f5bd89df5876ea8af4aa0535e088cff9a /src/attach.c
parent5da5b71435fcb7d4cd8e43a3ce386b5c852e4e2e (diff)
downloadsqlite-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.c17
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;
}