diff options
author | dan <dan@noemail.net> | 2019-06-11 12:03:10 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2019-06-11 12:03:10 +0000 |
commit | 0b277a980a799a4fc3e17d8f44fce6a3ea1eb8d8 (patch) | |
tree | d2642ebba4ca24820b6724a1878c4ca1b08dd23c /src/alter.c | |
parent | 8e34e4061b534130bc7495c102120371c8738d95 (diff) | |
download | sqlite-0b277a980a799a4fc3e17d8f44fce6a3ea1eb8d8.tar.gz sqlite-0b277a980a799a4fc3e17d8f44fce6a3ea1eb8d8.zip |
Have the ALTER TABLE code handle the case where an entire expression that includes a sub-select is excluded from a view, trigger or index.
FossilOrigin-Name: f2c8179f3c0b77f10da3f9b0771db4dec30d0bbf0b7f4751ce439bfb08da8f6f
Diffstat (limited to 'src/alter.c')
-rw-r--r-- | src/alter.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/alter.c b/src/alter.c index e5f4e2b18..765110042 100644 --- a/src/alter.c +++ b/src/alter.c @@ -728,6 +728,20 @@ static int renameUnmapExprCb(Walker *pWalker, Expr *pExpr){ } /* +** Walker callback used by sqlite3RenameExprUnmap(). +*/ +static int renameUnmapSelectCb(Walker *pWalker, Select *p){ + if( p->pSrc ){ + Parse *pParse = pWalker->pParse; + int i; + for(i=0; i<p->pSrc->nSrc; i++){ + sqlite3RenameTokenRemap(pParse, 0, (void*)p->pSrc->a[0].zName); + } + } + return WRC_Continue; +} + +/* ** Remove all nodes that are part of expression pExpr from the rename list. */ void sqlite3RenameExprUnmap(Parse *pParse, Expr *pExpr){ @@ -735,6 +749,7 @@ void sqlite3RenameExprUnmap(Parse *pParse, Expr *pExpr){ memset(&sWalker, 0, sizeof(Walker)); sWalker.pParse = pParse; sWalker.xExprCallback = renameUnmapExprCb; + sWalker.xSelectCallback = renameUnmapSelectCb; sqlite3WalkExpr(&sWalker, pExpr); } |