diff options
author | dan <dan@noemail.net> | 2018-08-24 16:04:26 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2018-08-24 16:04:26 +0000 |
commit | 1b0c5de43435213aae89bd3080cd84f3b0da788a (patch) | |
tree | b99a779c2cad2ae127181c4bd43917952c86f92b /src | |
parent | 355f2e02e9634cc066b08ab1cfdee2f0f58b6a28 (diff) | |
download | sqlite-1b0c5de43435213aae89bd3080cd84f3b0da788a.tar.gz sqlite-1b0c5de43435213aae89bd3080cd84f3b0da788a.zip |
Avoid incorrectly replacing tokens that refer to a column being renamed via an
alias. For example, do not overwrite "xyz" when "a" is renamed in "CREATE VIEW
v1 AS SELECT a AS xyz FROM tbl WHERE xyz=1"
FossilOrigin-Name: ad072a835f97ff418f5919d94f547ce8afb4fc7c7b590deba41f1e62136a79ac
Diffstat (limited to 'src')
-rw-r--r-- | src/alter.c | 3 | ||||
-rw-r--r-- | src/resolve.c | 3 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/alter.c b/src/alter.c index ee19a0e22..c42b7bb20 100644 --- a/src/alter.c +++ b/src/alter.c @@ -966,7 +966,7 @@ void sqlite3RenameTokenRemap(Parse *pParse, void *pTo, void *pFrom){ break; } } - assert( p ); + assert( pTo==0 || p ); } /* @@ -989,6 +989,7 @@ static void renameTokenFree(sqlite3 *db, RenameToken *pToken){ */ static void renameTokenFind(Parse *pParse, struct RenameCtx *pCtx, void *pPtr){ RenameToken **pp; + assert( pPtr!=0 ); for(pp=&pParse->pRename; (*pp); pp=&(*pp)->pNext){ if( (*pp)->p==pPtr ){ RenameToken *pToken = *pp; diff --git a/src/resolve.c b/src/resolve.c index 40ffe8ce9..3ac6f5305 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -436,6 +436,9 @@ static int lookupName( cnt = 1; pMatch = 0; assert( zTab==0 && zDb==0 ); + if( IN_RENAME_COLUMN ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pExpr); + } goto lookupname_end; } } |