aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2017-05-23 01:29:35 +0000
committerdrh <drh@noemail.net>2017-05-23 01:29:35 +0000
commit10d33c17816f263d6911b741631fb305f5b264df (patch)
tree8b3d28500fceed9a44638eb8b96fcc56ba70d2ff /src
parent2435fa69161be6b253cb08541cb6452b232ba9dd (diff)
downloadsqlite-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.c2
-rw-r--r--src/vdbe.c1
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;