Index: src/where.c ================================================================== --- src/where.c +++ src/where.c @@ -4586,10 +4586,11 @@ requireUnique = !isUnique; iCur = pWInfo->pTabList->a[pLoop->iTab].iCursor; j = 0; revSet = rev = 0; for(j=0; j<=nColumn && nUseda[nUsed].pExpr); assert( pOBExpr->op==TK_COLUMN ); if( pOBExpr->iTable!=iCur ) break; if( isUnique ) continue; if( ju.btree.nEq && pLoop->aTerm[j]->eOperator!=WO_IN; if( pOBExpr->iColumn!=iColumn ){ - if( ju.btree.nEq ){ nUsed--; continue; } + if( skipable ){ nUsed--; continue; } return 0; } if( iColumn>=0 ){ pColl = sqlite3ExprCollSeq(pWInfo->pParse, pOrderBy->a[nUsed].pExpr); if( !pColl ) pColl = db->pDfltColl; - if( sqlite3StrICmp(pColl->zName, pIndex->azColl[j])!=0 ) return 0; + if( sqlite3StrICmp(pColl->zName, pIndex->azColl[j])!=0 ){ + return 0; + } } - if( revSet ){ - if( (rev ^ revIdx)!=pOrderBy->a[nUsed].sortOrder ) return 0; - }else{ - rev = revIdx ^ pOrderBy->a[nUsed].sortOrder; - revSet = 1; + if( !skipable ){ + if( revSet ){ + if( (rev ^ revIdx)!=pOrderBy->a[nUsed].sortOrder ) return 0; + }else{ + rev = revIdx ^ pOrderBy->a[nUsed].sortOrder; + revSet = 1; + } } } if( rev ) revMask |= ((Bitmask)1)<