@@ -169,20 +169,6 @@ void sqlite3AlterRenameTable(
169169 goto exit_rename_table ;
170170 }
171171
172- /* If this is a virtual table, invoke the xRename() function if
173- ** one is defined. The xRename() callback will modify the names
174- ** of any resources used by the v-table implementation (including other
175- ** SQLite tables) that are identified by the name of the virtual table.
176- */
177- #ifndef SQLITE_OMIT_VIRTUALTABLE
178- if ( pVTab ){
179- int i = ++ pParse -> nMem ;
180- sqlite3VdbeLoadString (v , i , zName );
181- sqlite3VdbeAddOp4 (v , OP_VRename , i , 0 , 0 ,(const char * )pVTab , P4_VTAB );
182- sqlite3MayAbort (pParse );
183- }
184- #endif
185-
186172 /* figure out how many UTF-8 characters are in zName */
187173 zTabName = pTab -> zName ;
188174 nTabName = sqlite3Utf8CharLen (zTabName , -1 );
@@ -240,6 +226,20 @@ void sqlite3AlterRenameTable(
240226 , zDb , zTabName , zName , zTabName , zDb , zName );
241227 }
242228
229+ /* If this is a virtual table, invoke the xRename() function if
230+ ** one is defined. The xRename() callback will modify the names
231+ ** of any resources used by the v-table implementation (including other
232+ ** SQLite tables) that are identified by the name of the virtual table.
233+ */
234+ #ifndef SQLITE_OMIT_VIRTUALTABLE
235+ if ( pVTab ){
236+ int i = ++ pParse -> nMem ;
237+ sqlite3VdbeLoadString (v , i , zName );
238+ sqlite3VdbeAddOp4 (v , OP_VRename , i , 0 , 0 ,(const char * )pVTab , P4_VTAB );
239+ sqlite3MayAbort (pParse );
240+ }
241+ #endif
242+
243243 renameReloadSchema (pParse , iDb );
244244 renameTestSchema (pParse , zDb , iDb == 1 );
245245
@@ -1076,7 +1076,7 @@ static int renameResolveTrigger(Parse *pParse, const char *zDb){
10761076 Table * pTarget = sqlite3LocateTable (pParse , 0 , pStep -> zTarget , zDb );
10771077 if ( pTarget == 0 ){
10781078 rc = SQLITE_ERROR ;
1079- }else {
1079+ }else if ( SQLITE_OK == ( rc = sqlite3ViewGetColumnNames ( pParse , pTarget )) ) {
10801080 SrcList sSrc ;
10811081 memset (& sSrc , 0 , sizeof (sSrc ));
10821082 sSrc .nSrc = 1 ;
@@ -1422,17 +1422,20 @@ static void renameTableFunc(
14221422 rc = renameParseSql (& sParse , zDb , 1 , db , zInput , bTemp );
14231423
14241424 if ( rc == SQLITE_OK ){
1425+ int isLegacy = (db -> flags & SQLITE_LegacyAlter );
14251426 if ( sParse .pNewTable ){
14261427 Table * pTab = sParse .pNewTable ;
14271428
14281429 if ( pTab -> pSelect ){
1429- NameContext sNC ;
1430- memset (& sNC , 0 , sizeof (sNC ));
1431- sNC .pParse = & sParse ;
1432-
1433- sqlite3SelectPrep (& sParse , pTab -> pSelect , & sNC );
1434- if ( sParse .nErr ) rc = sParse .rc ;
1435- sqlite3WalkSelect (& sWalker , pTab -> pSelect );
1430+ if ( isLegacy == 0 ){
1431+ NameContext sNC ;
1432+ memset (& sNC , 0 , sizeof (sNC ));
1433+ sNC .pParse = & sParse ;
1434+
1435+ sqlite3SelectPrep (& sParse , pTab -> pSelect , & sNC );
1436+ if ( sParse .nErr ) rc = sParse .rc ;
1437+ sqlite3WalkSelect (& sWalker , pTab -> pSelect );
1438+ }
14361439 }else {
14371440 /* Modify any FK definitions to point to the new table. */
14381441#ifndef SQLITE_OMIT_FOREIGN_KEY
@@ -1451,15 +1454,19 @@ static void renameTableFunc(
14511454 ** "CREATE [VIRTUAL] TABLE" bit. */
14521455 if ( sqlite3_stricmp (zOld , pTab -> zName )== 0 ){
14531456 sCtx .pTab = pTab ;
1454- sqlite3WalkExprList (& sWalker , pTab -> pCheck );
1457+ if ( isLegacy == 0 ){
1458+ sqlite3WalkExprList (& sWalker , pTab -> pCheck );
1459+ }
14551460 renameTokenFind (& sParse , & sCtx , pTab -> zName );
14561461 }
14571462 }
14581463 }
14591464
14601465 else if ( sParse .pNewIndex ){
14611466 renameTokenFind (& sParse , & sCtx , sParse .pNewIndex -> zName );
1462- sqlite3WalkExpr (& sWalker , sParse .pNewIndex -> pPartIdxWhere );
1467+ if ( isLegacy == 0 ){
1468+ sqlite3WalkExpr (& sWalker , sParse .pNewIndex -> pPartIdxWhere );
1469+ }
14631470 }
14641471
14651472#ifndef SQLITE_OMIT_TRIGGER
@@ -1472,12 +1479,14 @@ static void renameTableFunc(
14721479 renameTokenFind (& sParse , & sCtx , sParse .pNewTrigger -> table );
14731480 }
14741481
1475- rc = renameResolveTrigger (& sParse , bTemp ? 0 : zDb );
1476- if ( rc == SQLITE_OK ){
1477- renameWalkTrigger (& sWalker , pTrigger );
1478- for (pStep = pTrigger -> step_list ; pStep ; pStep = pStep -> pNext ){
1479- if ( pStep -> zTarget && 0 == sqlite3_stricmp (pStep -> zTarget , zOld ) ){
1480- renameTokenFind (& sParse , & sCtx , pStep -> zTarget );
1482+ if ( isLegacy == 0 ){
1483+ rc = renameResolveTrigger (& sParse , bTemp ? 0 : zDb );
1484+ if ( rc == SQLITE_OK ){
1485+ renameWalkTrigger (& sWalker , pTrigger );
1486+ for (pStep = pTrigger -> step_list ; pStep ; pStep = pStep -> pNext ){
1487+ if ( pStep -> zTarget && 0 == sqlite3_stricmp (pStep -> zTarget , zOld ) ){
1488+ renameTokenFind (& sParse , & sCtx , pStep -> zTarget );
1489+ }
14811490 }
14821491 }
14831492 }
@@ -1535,6 +1544,7 @@ static void renameTableTest(
15351544 char const * zDb = (const char * )sqlite3_value_text (argv [0 ]);
15361545 char const * zInput = (const char * )sqlite3_value_text (argv [1 ]);
15371546 int bTemp = sqlite3_value_int (argv [4 ]);
1547+ int isLegacy = (db -> flags & SQLITE_LegacyAlter );
15381548
15391549#ifndef SQLITE_OMIT_AUTHORIZATION
15401550 sqlite3_xauth xAuth = db -> xAuth ;
@@ -1547,7 +1557,7 @@ static void renameTableTest(
15471557 Parse sParse ;
15481558 rc = renameParseSql (& sParse , zDb , 1 , db , zInput , bTemp );
15491559 if ( rc == SQLITE_OK ){
1550- if ( sParse .pNewTable && sParse .pNewTable -> pSelect ){
1560+ if ( isLegacy == 0 && sParse .pNewTable && sParse .pNewTable -> pSelect ){
15511561 NameContext sNC ;
15521562 memset (& sNC , 0 , sizeof (sNC ));
15531563 sNC .pParse = & sParse ;
@@ -1556,7 +1566,9 @@ static void renameTableTest(
15561566 }
15571567
15581568 else if ( sParse .pNewTrigger ){
1559- rc = renameResolveTrigger (& sParse , bTemp ? 0 : zDb );
1569+ if ( isLegacy == 0 ){
1570+ rc = renameResolveTrigger (& sParse , bTemp ? 0 : zDb );
1571+ }
15601572 if ( rc == SQLITE_OK ){
15611573 int i1 = sqlite3SchemaToIndex (db , sParse .pNewTrigger -> pTabSchema );
15621574 int i2 = sqlite3FindDbName (db , zDb );
0 commit comments