aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2019-12-16 16:52:22 +0000
committerdrh <drh@noemail.net>2019-12-16 16:52:22 +0000
commit4dad7ed532ef1a6b50e5ebf4dedf2a4611a82159 (patch)
tree3489c2019a78dae3b113eb1d4271f68ba05a7fa2 /src/expr.c
parentd35bdd6c090ddc4d85213dc0bf8cb432966eb38a (diff)
downloadsqlite-4dad7ed532ef1a6b50e5ebf4dedf2a4611a82159.tar.gz
sqlite-4dad7ed532ef1a6b50e5ebf4dedf2a4611a82159.zip
When a table is part of a LEFT JOIN and should be a completely NULL row due to
the semantics of a LEFT JOIN, make sure any generated columns on that row evaluate to NULL. Ticket [3b84b42943644d6f] FossilOrigin-Name: 0271491438ad2a985aeff355173a8d0f1e5813954c82147bc68cb26cca5804c8
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c13
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 */