diff options
author | mistachkin <mistachkin@noemail.net> | 2015-02-27 19:40:08 +0000 |
---|---|---|
committer | mistachkin <mistachkin@noemail.net> | 2015-02-27 19:40:08 +0000 |
commit | 0404e74caa95a4cde7bdba71ad95d6eb8f924c01 (patch) | |
tree | c0bcde754c3ce16edbf06bfda8d4f0b058054fb5 /src/where.c | |
parent | bfefa4c27b42b74e6b1685a3c93585fd0fa7d666 (diff) | |
parent | 22ec13466cbc6ce4f3cc642e5c23c5d52dcace27 (diff) | |
download | sqlite-0404e74caa95a4cde7bdba71ad95d6eb8f924c01.tar.gz sqlite-0404e74caa95a4cde7bdba71ad95d6eb8f924c01.zip |
Merge updates from trunk.
FossilOrigin-Name: acf7684323da4dc3aaf9746bd13b0f56054a17dd
Diffstat (limited to 'src/where.c')
-rw-r--r-- | src/where.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/where.c b/src/where.c index 183a8cb66..d01945de7 100644 --- a/src/where.c +++ b/src/where.c @@ -1612,11 +1612,16 @@ static void constructAutomaticIndex( pLoop = pLevel->pWLoop; idxCols = 0; for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){ + Expr *pExpr = pTerm->pExpr; + assert( !ExprHasProperty(pExpr, EP_FromJoin) /* prereq always non-zero */ + || pExpr->iRightJoinTable!=pSrc->iCursor /* for the right-hand */ + || pLoop->prereq!=0 ); /* table of a LEFT JOIN */ if( pLoop->prereq==0 && (pTerm->wtFlags & TERM_VIRTUAL)==0 - && sqlite3ExprIsTableConstant(pTerm->pExpr, pSrc->iCursor) ){ + && !ExprHasProperty(pExpr, EP_FromJoin) + && sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor) ){ pPartial = sqlite3ExprAnd(pParse->db, pPartial, - sqlite3ExprDup(pParse->db, pTerm->pExpr, 0)); + sqlite3ExprDup(pParse->db, pExpr, 0)); } if( termCanDriveIndex(pTerm, pSrc, notReady) ){ int iCol = pTerm->u.leftColumn; @@ -4694,7 +4699,12 @@ static int whereUsablePartialIndex(int iTab, WhereClause *pWC, Expr *pWhere){ int i; WhereTerm *pTerm; for(i=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){ - if( sqlite3ExprImpliesExpr(pTerm->pExpr, pWhere, iTab) ) return 1; + Expr *pExpr = pTerm->pExpr; + if( sqlite3ExprImpliesExpr(pExpr, pWhere, iTab) + && (!ExprHasProperty(pExpr, EP_FromJoin) || pExpr->iRightJoinTable==iTab) + ){ + return 1; + } } return 0; } |