aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/alter.c18
-rw-r--r--src/build.c3
-rw-r--r--src/sqliteInt.h1
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*);