Index: src/alter.c ================================================================== --- src/alter.c +++ src/alter.c @@ -964,11 +964,11 @@ if( p->p==pFrom ){ p->p = pTo; break; } } - assert( p ); + assert( pTo==0 || p ); } /* ** Free the list of RenameToken objects given in the second argument */ @@ -987,10 +987,11 @@ ** from the Parse object and add it to the list maintained by the ** RenameCtx object passed as the second argument. */ static void renameTokenFind(Parse *pParse, struct RenameCtx *pCtx, void *pPtr){ RenameToken **pp; + assert( pPtr!=0 ); for(pp=&pParse->pRename; (*pp); pp=&(*pp)->pNext){ if( (*pp)->p==pPtr ){ RenameToken *pToken = *pp; *pp = pToken->pNext; pToken->pNext = pCtx->pList; Index: src/resolve.c ================================================================== --- src/resolve.c +++ src/resolve.c @@ -434,10 +434,13 @@ } resolveAlias(pParse, pEList, j, pExpr, "", nSubquery); cnt = 1; pMatch = 0; assert( zTab==0 && zDb==0 ); + if( IN_RENAME_COLUMN ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pExpr); + } goto lookupname_end; } } } Index: test/altercol.test ================================================================== --- test/altercol.test +++ test/altercol.test @@ -631,7 +631,23 @@ SELECT sqlite_rename_column(sql, type, object, db, tbl, icol, znew, bquote) FROM ddd; } {{} {} {}} +#------------------------------------------------------------------------- +# +reset_db +do_execsql_test 15.0 { + CREATE TABLE xxx(a, b, c); + SELECT a AS d FROM xxx WHERE d=0; +} + +do_execsql_test 15.1 { + CREATE VIEW vvv AS SELECT a AS d FROM xxx WHERE d=0; + ALTER TABLE xxx RENAME a TO xyz; +} + +do_execsql_test 15.2 { + SELECT sql FROM sqlite_master WHERE type='view'; +} {{CREATE VIEW vvv AS SELECT xyz AS d FROM xxx WHERE d=0}} finish_test