diff options
author | drh <> | 2021-02-08 15:56:01 +0000 |
---|---|---|
committer | drh <> | 2021-02-08 15:56:01 +0000 |
commit | 82ab4f6b1a68147d63b7887873a96ebf33082040 (patch) | |
tree | 4bc4015d684d0384bf47b5bad33a19cbbf22e777 /src/resolve.c | |
parent | d5101972763c64fce051b477ef046b2476f18392 (diff) | |
download | sqlite-82ab4f6b1a68147d63b7887873a96ebf33082040.tar.gz sqlite-82ab4f6b1a68147d63b7887873a96ebf33082040.zip |
Correctly detect correlated subqueries when resolving names in RETURNING
clauses.
FossilOrigin-Name: b43cfa04922a401442b9d1708e3e4a88d3cfa2c591f9a6b253d99ba83f4b280a
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/resolve.c b/src/resolve.c index 8642dffac..57ba75f30 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -383,7 +383,7 @@ static int lookupName( }else if( op!=TK_INSERT && zTab && sqlite3StrICmp("old",zTab)==0 ){ pExpr->iTable = 0; pTab = pParse->pTriggerTab; - }else if( pParse->bReturning ){ + }else if( pParse->bReturning && (pNC->ncFlags & NC_UBaseReg)!=0 ){ pExpr->iTable = op!=TK_DELETE; pTab = pParse->pTriggerTab; } @@ -435,14 +435,9 @@ static int lookupName( { pExpr->y.pTab = pTab; if( pParse->bReturning ){ - NameContext *pUp = pNC; - while( (pUp->ncFlags & NC_UBaseReg)==0 && ALWAYS(pUp->pNext) ){ - pUp = pUp->pNext; - } - assert( pUp->ncFlags & NC_UBaseReg ); eNewExprOp = TK_REGISTER; - pExpr->iTable = pUp->uNC.iBaseReg + (pTab->nCol+1)*pExpr->iTable - + iCol + 1; + pExpr->iTable = pNC->uNC.iBaseReg + (pTab->nCol+1)*pExpr->iTable + + iCol + 1; }else{ pExpr->iColumn = (i16)iCol; eNewExprOp = TK_TRIGGER; |