aboutsummaryrefslogtreecommitdiff
path: root/src/resolve.c
diff options
context:
space:
mode:
authordrh <>2021-02-04 20:52:20 +0000
committerdrh <>2021-02-04 20:52:20 +0000
commit552562c48feb6659f7fb72311c66d7a62154d523 (patch)
treef4c9d8b3618e15b1c4affc9b425278cd7e66f145 /src/resolve.c
parent381bdacc8fd374db52bba13be966189abc787257 (diff)
downloadsqlite-552562c48feb6659f7fb72311c66d7a62154d523.tar.gz
sqlite-552562c48feb6659f7fb72311c66d7a62154d523.zip
Snapshot. New design appears to work on a simple test case.
FossilOrigin-Name: 8a65fbeecf3597e30853c5f0ccd9b8b46c508854fa521e58e0db279deebca7d4
Diffstat (limited to 'src/resolve.c')
-rw-r--r--src/resolve.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/src/resolve.c b/src/resolve.c
index 5074a2881..84ba82a11 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -371,7 +371,7 @@ static int lookupName(
** it is a new.* or old.* trigger argument reference. Or
** maybe it is an excluded.* from an upsert.
*/
- if( zDb==0 && cntTab==0 ){
+ if( cntTab==0 && zDb==0 ){
pTab = 0;
#ifndef SQLITE_OMIT_TRIGGER
if( pParse->pTriggerTab!=0 ){
@@ -434,22 +434,27 @@ static int lookupName(
}else
#endif /* SQLITE_OMIT_UPSERT */
{
-#ifndef SQLITE_OMIT_TRIGGER
- if( iCol<0 ){
- pExpr->affExpr = SQLITE_AFF_INTEGER;
- }else if( pExpr->iTable==0 ){
- testcase( iCol==31 );
- testcase( iCol==32 );
- pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
- }else{
- testcase( iCol==31 );
- testcase( iCol==32 );
- pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
- }
pExpr->y.pTab = pTab;
- pExpr->iColumn = (i16)iCol;
- eNewExprOp = TK_TRIGGER;
+ if( iCol<0 ) pExpr->affExpr = SQLITE_AFF_INTEGER;
+ if( pParse->bReturning ){
+ eNewExprOp = TK_REGISTER;
+ pExpr->iTable = pNC->uNC.iBaseReg + (pTab->nCol+1)*pExpr->iTable
+ + iCol + 1;
+ }else{
+ pExpr->iColumn = (i16)iCol;
+ eNewExprOp = TK_TRIGGER;
+#ifndef SQLITE_OMIT_TRIGGER
+ if( pExpr->iTable==0 ){
+ testcase( iCol==31 );
+ testcase( iCol==32 );
+ pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
+ }else{
+ testcase( iCol==31 );
+ testcase( iCol==32 );
+ pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
+ }
#endif /* SQLITE_OMIT_TRIGGER */
+ }
}
}
}
@@ -630,7 +635,10 @@ static int lookupName(
lookupname_end:
if( cnt==1 ){
assert( pNC!=0 );
- if( !ExprHasProperty(pExpr, EP_Alias) ){
+ if( pParse->db->xAuth
+ && !ExprHasProperty(pExpr, EP_Alias)
+ && pExpr->op!=TK_REGISTER
+ ){
sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
}
/* Increment the nRef value on all name contexts from TopNC up to