diff options
author | drh <drh@noemail.net> | 2019-10-19 18:47:27 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2019-10-19 18:47:27 +0000 |
commit | dd6cc9b52abf6c4ae15a57a9f3d6e3c1e848f589 (patch) | |
tree | 5a8469f624dbd5b85f18c1eb19f58ceb29cced34 /src/expr.c | |
parent | c5f808d85ef130717aee1bc7e7ffcd934c84ab66 (diff) | |
download | sqlite-dd6cc9b52abf6c4ae15a57a9f3d6e3c1e848f589.tar.gz sqlite-dd6cc9b52abf6c4ae15a57a9f3d6e3c1e848f589.zip |
Work toward getting generated columns to work with triggers. Still more
work to do in this area.
FossilOrigin-Name: 932a37275d7e932f8237d32c8fc6087ed8cd342fe01ef2f7a43c7237ab84c9ac
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/src/expr.c b/src/expr.c index 01e99428f..b868ed969 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3604,16 +3604,11 @@ expr_code_doover: return 0; } pCol->colFlags |= COLFLAG_BUSY; - if( pCol->colFlags & COLFLAG_VIRTUAL ){ - target = sqlite3ExprCodeTarget(pParse, pCol->pDflt, target); - }else{ - target = iSrc; - if( pCol->colFlags & COLFLAG_NOTAVAIL ){ - sqlite3ExprCode(pParse, pCol->pDflt, iSrc); - } + if( pCol->colFlags & COLFLAG_NOTAVAIL ){ + sqlite3ExprCode(pParse, pCol->pDflt, iSrc); } pCol->colFlags &= ~(COLFLAG_BUSY|COLFLAG_NOTAVAIL); - return target; + return iSrc; }else #endif /* SQLITE_OMIT_GENERATED_COLUMNS */ if( pCol->affinity==SQLITE_AFF_REAL ){ @@ -4088,17 +4083,19 @@ expr_code_doover: ** p1==2 -> old.b p1==5 -> new.b */ Table *pTab = pExpr->y.pTab; - int p1 = pExpr->iTable * (pTab->nCol+1) + 1 + pExpr->iColumn; + int iCol = pExpr->iColumn; + int p1 = pExpr->iTable * (pTab->nCol+1) + 1 + + (iCol>=0 ? sqlite3TableColumnToStorage(pTab, iCol) : -1); assert( pExpr->iTable==0 || pExpr->iTable==1 ); - assert( pExpr->iColumn>=-1 && pExpr->iColumn<pTab->nCol ); - assert( pTab->iPKey<0 || pExpr->iColumn!=pTab->iPKey ); + assert( iCol>=-1 && iCol<pTab->nCol ); + assert( pTab->iPKey<0 || iCol!=pTab->iPKey ); assert( p1>=0 && p1<(pTab->nCol*2+2) ); sqlite3VdbeAddOp2(v, OP_Param, p1, target); VdbeComment((v, "r[%d]=%s.%s", target, (pExpr->iTable ? "new" : "old"), - (pExpr->iColumn<0 ? "rowid" : pExpr->y.pTab->aCol[pExpr->iColumn].zName) + (pExpr->iColumn<0 ? "rowid" : pExpr->y.pTab->aCol[iCol].zName) )); #ifndef SQLITE_OMIT_FLOATING_POINT @@ -4107,9 +4104,7 @@ expr_code_doover: ** ** EVIDENCE-OF: R-60985-57662 SQLite will convert the value back to ** floating point when extracting it from the record. */ - if( pExpr->iColumn>=0 - && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL - ){ + if( iCol>=0 && pTab->aCol[iCol].affinity==SQLITE_AFF_REAL ){ sqlite3VdbeAddOp1(v, OP_RealAffinity, target); } #endif |