aboutsummaryrefslogtreecommitdiff
path: root/src/resolve.c
diff options
context:
space:
mode:
authordrh <>2021-02-08 15:56:01 +0000
committerdrh <>2021-02-08 15:56:01 +0000
commit82ab4f6b1a68147d63b7887873a96ebf33082040 (patch)
tree4bc4015d684d0384bf47b5bad33a19cbbf22e777 /src/resolve.c
parentd5101972763c64fce051b477ef046b2476f18392 (diff)
downloadsqlite-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.c11
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;