diff options
author | drh <> | 2022-04-10 17:14:48 +0000 |
---|---|---|
committer | drh <> | 2022-04-10 17:14:48 +0000 |
commit | e21e36dd2cf71d4164bc188774fab5e4d2976cb6 (patch) | |
tree | c8fc67ddbc5107b22c4fb2b2b9b7ed1910d36db7 /src | |
parent | a20c71e9e8300d9c60a83fb3d47b600c556bd952 (diff) | |
download | sqlite-e21e36dd2cf71d4164bc188774fab5e4d2976cb6.tar.gz sqlite-e21e36dd2cf71d4164bc188774fab5e4d2976cb6.zip |
More test cases and bug fixes.
FossilOrigin-Name: 140e97fde94fdc3babdd456ce1b22900ead0e40e2afe63d89d21ccdbf141b607
Diffstat (limited to 'src')
-rw-r--r-- | src/where.c | 11 |
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 |