diff options
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c index 3552322ef..981e18a8e 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3408,11 +3408,20 @@ void sqlite3ExprCodeGeneratedColumn( Column *pCol, int regOut ){ + int iAddr; + Vdbe *v = pParse->pVdbe; + assert( v!=0 ); + assert( pParse->iSelfTab!=0 ); + if( pParse->iSelfTab>0 ){ + iAddr = sqlite3VdbeAddOp3(v, OP_IfNullRow, pParse->iSelfTab-1, 0, regOut); + }else{ + iAddr = 0; + } sqlite3ExprCode(pParse, pCol->pDflt, regOut); if( pCol->affinity>=SQLITE_AFF_TEXT ){ - sqlite3VdbeAddOp4(pParse->pVdbe, OP_Affinity, regOut, 1, 0, - &pCol->affinity, 1); + sqlite3VdbeAddOp4(v, OP_Affinity, regOut, 1, 0, &pCol->affinity, 1); } + if( iAddr ) sqlite3VdbeJumpHere(v, iAddr); } #endif /* SQLITE_OMIT_GENERATED_COLUMNS */ |