aboutsummaryrefslogtreecommitdiff
path: root/src/alter.c
diff options
context:
space:
mode:
authordan <dan@noemail.net>2019-06-11 12:03:10 +0000
committerdan <dan@noemail.net>2019-06-11 12:03:10 +0000
commit0b277a980a799a4fc3e17d8f44fce6a3ea1eb8d8 (patch)
treed2642ebba4ca24820b6724a1878c4ca1b08dd23c /src/alter.c
parent8e34e4061b534130bc7495c102120371c8738d95 (diff)
downloadsqlite-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.c15
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);
}