diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/alter.c | 18 | ||||
-rw-r--r-- | src/build.c | 3 | ||||
-rw-r--r-- | src/sqliteInt.h | 1 |
3 files changed, 22 insertions, 0 deletions
diff --git a/src/alter.c b/src/alter.c index 013257f90..ff3845290 100644 --- a/src/alter.c +++ b/src/alter.c @@ -724,6 +724,24 @@ void sqlite3RenameExprUnmap(Parse *pParse, Expr *pExpr){ } /* +** Remove all nodes that are part of expression-list pEList from the +** rename list. +*/ +void sqlite3RenameExprlistUnmap(Parse *pParse, ExprList *pEList){ + if( pEList ){ + int i; + Walker sWalker; + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = renameUnmapExprCb; + sqlite3WalkExprList(&sWalker, pEList); + for(i=0; i<pEList->nExpr; i++){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pEList->a[i].zName); + } + } +} + +/* ** Free the list of RenameToken objects given in the second argument */ static void renameTokenFree(sqlite3 *db, RenameToken *pToken){ diff --git a/src/build.c b/src/build.c index 18dad8b45..cbdfafe09 100644 --- a/src/build.c +++ b/src/build.c @@ -2211,6 +2211,9 @@ void sqlite3CreateView( create_view_fail: sqlite3SelectDelete(db, pSelect); + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprlistUnmap(pParse, pCNames); + } sqlite3ExprListDelete(db, pCNames); return; } diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 310460c16..79d41e8a0 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -4242,6 +4242,7 @@ void sqlite3AlterBeginAddColumn(Parse *, SrcList *); void *sqlite3RenameTokenMap(Parse*, void*, Token*); void sqlite3RenameTokenRemap(Parse*, void *pTo, void *pFrom); void sqlite3RenameExprUnmap(Parse*, Expr*); +void sqlite3RenameExprlistUnmap(Parse*, ExprList*); CollSeq *sqlite3GetCollSeq(Parse*, u8, CollSeq *, const char*); char sqlite3AffinityType(const char*, Column*); void sqlite3Analyze(Parse*, Token*, Token*); |