aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2022-04-09 18:48:11 +0000
committerdrh <>2022-04-09 18:48:11 +0000
commitde24dd706e3f5e23389ad314a8941af8f56c8a2f (patch)
tree8970b3cac72f8eacec2d6113801a828c293799ae /src
parent86c1beb402ef54c1427d5f2e6bbc38ebe1249843 (diff)
downloadsqlite-de24dd706e3f5e23389ad314a8941af8f56c8a2f.tar.gz
sqlite-de24dd706e3f5e23389ad314a8941af8f56c8a2f.zip
Bug fixes. A basic FULL OUTER JOIN now works.
FossilOrigin-Name: 34bbeeb77bd530b2b1f0390e9e552f65ae35f09a74d80a09dd327e64f9be51a1
Diffstat (limited to 'src')
-rw-r--r--src/where.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/where.c b/src/where.c
index eec8ccb98..bec9da8db 100644
--- a/src/where.c
+++ b/src/where.c
@@ -6009,7 +6009,7 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
/* Terminate the subroutine that forms the interior of the loop of
** the RIGHT JOIN table */
WhereRightJoin *pRJ = pLevel->pRJ;
- sqlite3VdbeChangeP2(v, pRJ->addrSubrtn-1, sqlite3VdbeCurrentAddr(v));
+ sqlite3VdbeChangeP1(v, pRJ->addrSubrtn-1, sqlite3VdbeCurrentAddr(v));
sqlite3VdbeAddOp2(v, OP_Return, pRJ->regReturn, pRJ->addrSubrtn);
}
pLoop = pLevel->pWLoop;
@@ -6184,6 +6184,7 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
int iCur = pLevel->iTabCur;
int r = ++pParse->nMem;
int nPk;
+ int jmp;
int addrCont = sqlite3WhereContinueLabel(pSubWInfo);
if( HasRowid(pTab) ){
sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, -1, r);
@@ -6198,8 +6199,9 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol,r+iPk);
}
}
- sqlite3VdbeAddOp4Int(v, OP_Filter, pRJ->regBloom, addrCont, r, nPk);
+ jmp = sqlite3VdbeAddOp4Int(v, OP_Filter, pRJ->regBloom, 0, r, nPk);
sqlite3VdbeAddOp4Int(v, OP_Found, pRJ->iMatch, addrCont, r, nPk);
+ sqlite3VdbeJumpHere(v, jmp);
sqlite3VdbeAddOp2(v, OP_Gosub, pRJ->regReturn, pRJ->addrSubrtn);
sqlite3WhereEnd(pSubWInfo);
}