1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-12 13:01:09 +03:00

Ensure that sqlite3RenameExprUnmap() does an unmap of the result set alias

names in subqueries when ALTER TABLE fails because of a syntax error in a
trigger.

FossilOrigin-Name: d3b6f1665f6fb5fc5cf1c0864d779d0b24746ada530f755c7b6ff34766bd2188
This commit is contained in:
drh
2019-06-15 15:21:49 +00:00
parent c164cc992f
commit bdf4cf0b90
4 changed files with 21 additions and 12 deletions

View File

@@ -731,11 +731,20 @@ static int renameUnmapExprCb(Walker *pWalker, Expr *pExpr){
** Walker callback used by sqlite3RenameExprUnmap().
*/
static int renameUnmapSelectCb(Walker *pWalker, Select *p){
Parse *pParse = pWalker->pParse;
int i;
if( ALWAYS(p->pEList) ){
ExprList *pList = p->pEList;
for(i=0; i<pList->nExpr; i++){
if( pList->a[i].zName ){
sqlite3RenameTokenRemap(pParse, 0, (void*)pList->a[i].zName);
}
}
}
if( ALWAYS(p->pSrc) ){ /* Every Select as a SrcList, even if it is empty */
Parse *pParse = pWalker->pParse;
int i;
for(i=0; i<p->pSrc->nSrc; i++){
sqlite3RenameTokenRemap(pParse, 0, (void*)p->pSrc->a[0].zName);
SrcList *pSrc = p->pSrc;
for(i=0; i<pSrc->nSrc; i++){
sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName);
}
}
return WRC_Continue;