aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2019-10-19 18:47:27 +0000
committerdrh <drh@noemail.net>2019-10-19 18:47:27 +0000
commitdd6cc9b52abf6c4ae15a57a9f3d6e3c1e848f589 (patch)
tree5a8469f624dbd5b85f18c1eb19f58ceb29cced34 /src/expr.c
parentc5f808d85ef130717aee1bc7e7ffcd934c84ab66 (diff)
downloadsqlite-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.c25
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