diff options
author | dan <Dan Kennedy> | 2021-09-27 15:44:03 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2021-09-27 15:44:03 +0000 |
commit | 5a69d19eea897dd597f48ad994c2cbdfd7052687 (patch) | |
tree | 1e15d974b47ae820cae322a43e7593fc85a30ab4 /src | |
parent | 76ec55fddba94ea2c97d6f59b6c2417209a23079 (diff) | |
download | sqlite-5a69d19eea897dd597f48ad994c2cbdfd7052687.tar.gz sqlite-5a69d19eea897dd597f48ad994c2cbdfd7052687.zip |
Fix a problem in ALTER TABLE causing table or column references in sub-selects ton the RHS of a vector SET clause in an UPDATE within a trigger (i.e. "SET (a,b) = ( (SELECT...), <expr> )").
FossilOrigin-Name: 255b0eeed113d83b474efc5bc8fc790a270bc43ee598df4b2c378e1ad2d729b7
Diffstat (limited to 'src')
-rw-r--r-- | src/alter.c | 1 | ||||
-rw-r--r-- | src/expr.c | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/alter.c b/src/alter.c index 8fc9b1096..f358dcb0a 100644 --- a/src/alter.c +++ b/src/alter.c @@ -831,6 +831,7 @@ static void renameWalkWith(Walker *pWalker, Select *pSelect){ memset(&sNC, 0, sizeof(sNC)); sNC.pParse = pParse; if( pCopy ) sqlite3SelectPrep(sNC.pParse, p, &sNC); + if( sNC.pParse->db->mallocFailed ) return; sqlite3WalkSelect(pWalker, p); sqlite3RenameExprlistUnmap(pParse, pWith->a[i].pCols); } diff --git a/src/expr.c b/src/expr.c index baa1fce3d..5b7a58fb5 100644 --- a/src/expr.c +++ b/src/expr.c @@ -518,7 +518,10 @@ Expr *sqlite3ExprForVectorField( }else{ if( pVector->op==TK_VECTOR ) pVector = pVector->x.pList->a[iField].pExpr; pRet = sqlite3ExprDup(pParse->db, pVector, 0); - sqlite3RenameTokenRemap(pParse, pRet, pVector); + if( IN_RENAME_OBJECT && pRet ){ + SWAP(Expr, *pRet, *pVector); + sqlite3RenameTokenRemap(pParse, pRet, pVector); + } } return pRet; } |