diff options
author | drh <drh@noemail.net> | 2017-05-23 01:29:35 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2017-05-23 01:29:35 +0000 |
commit | 10d33c17816f263d6911b741631fb305f5b264df (patch) | |
tree | 8b3d28500fceed9a44638eb8b96fcc56ba70d2ff /src | |
parent | 2435fa69161be6b253cb08541cb6452b232ba9dd (diff) | |
download | sqlite-10d33c17816f263d6911b741631fb305f5b264df.tar.gz sqlite-10d33c17816f263d6911b741631fb305f5b264df.zip |
When flattening a query, make sure iTable attribute of TK_IF_NULL_ROW
operators (that result from a prior flattening of a LEFT JOIN) are updated
correctly. Fix for ticket [cad1ab4cb7b0fc344].
FossilOrigin-Name: 919d36e6ea112c8c94f01e02611c48e78c441657e6898a466cfc39f1e0001403
Diffstat (limited to 'src')
-rw-r--r-- | src/select.c | 2 | ||||
-rw-r--r-- | src/vdbe.c | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/src/select.c b/src/select.c index eabbcc8c9..efb6e4173 100644 --- a/src/select.c +++ b/src/select.c @@ -3213,6 +3213,8 @@ static Expr *substExpr( pExpr = pNew; } } + }else if( pExpr->op==TK_IF_NULL_ROW && pExpr->iTable==pSubst->iTable ){ + pExpr->iTable = pSubst->iNewTable; }else{ pExpr->pLeft = substExpr(pSubst, pExpr->pLeft); pExpr->pRight = substExpr(pSubst, pExpr->pRight); diff --git a/src/vdbe.c b/src/vdbe.c index 495cec219..61b2e4e9e 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -2441,6 +2441,7 @@ case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ */ case OP_IfNullRow: { /* jump */ assert( pOp->p1>=0 && pOp->p1<p->nCursor ); + assert( p->apCsr[pOp->p1]!=0 ); if( p->apCsr[pOp->p1]->nullRow ){ sqlite3VdbeMemSetNull(aMem + pOp->p3); goto jump_to_p2; |