aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2022-04-10 17:14:48 +0000
committerdrh <>2022-04-10 17:14:48 +0000
commite21e36dd2cf71d4164bc188774fab5e4d2976cb6 (patch)
treec8fc67ddbc5107b22c4fb2b2b9b7ed1910d36db7 /src
parenta20c71e9e8300d9c60a83fb3d47b600c556bd952 (diff)
downloadsqlite-e21e36dd2cf71d4164bc188774fab5e4d2976cb6.tar.gz
sqlite-e21e36dd2cf71d4164bc188774fab5e4d2976cb6.zip
More test cases and bug fixes.
FossilOrigin-Name: 140e97fde94fdc3babdd456ce1b22900ead0e40e2afe63d89d21ccdbf141b607
Diffstat (limited to 'src')
-rw-r--r--src/where.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/where.c b/src/where.c
index 4216829e2..56c3a0171 100644
--- a/src/where.c
+++ b/src/where.c
@@ -5894,6 +5894,7 @@ WhereInfo *sqlite3WhereBegin(
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRJ->iMatch, pPk->nKeyCol);
sqlite3VdbeSetP4KeyInfo(pParse, pPk);
}
+ pLoop->wsFlags &= ~WHERE_IDX_ONLY;
}
}
pWInfo->iTop = sqlite3VdbeCurrentAddr(v);
@@ -6169,10 +6170,15 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
WhereClause *pWC = &pWInfo->sWC;
WhereInfo *pSubWInfo;
SrcList sFrom;
+ Bitmask mAll = 0;
+ for(k=0; k<=i; k++){
+ mAll |= pWInfo->a[k].pWLoop->maskSelf;
+ }
for(k=0; k<pWC->nTerm; k++){
- WhereTerm *pTerm = &pWC->a[i];
+ WhereTerm *pTerm = &pWC->a[k];
if( pTerm->wtFlags & TERM_VIRTUAL ) break;
- if( pTerm->prereqAll & ~pLoop->maskSelf ) continue;
+ if( pTerm->prereqAll & ~mAll ) continue;
+ if( ExprHasProperty(pTerm->pExpr, EP_FromJoin) ) continue;
pSubWhere = sqlite3ExprAnd(pParse, pSubWhere,
sqlite3ExprDup(db, pTerm->pExpr, 0));
}
@@ -6208,6 +6214,7 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
sqlite3WhereEnd(pSubWInfo);
}
sqlite3ExprDelete(pParse->db, pSubWhere);
+ continue;
}
/* For a co-routine, change all OP_Column references to the table of