Index: src/where.c ================================================================== --- src/where.c +++ src/where.c @@ -5082,12 +5082,14 @@ sqlite3VdbeResolveLabel(v, pLevel->addrNxt); for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){ sqlite3VdbeJumpHere(v, pIn->addrInTop+1); if( pIn->eEndLoopOp!=OP_Noop ){ if( pIn->nPrefix ){ - sqlite3VdbeAddOp3(v, OP_Noop, pLevel->iIdxCur, + sqlite3VdbeAddOp4Int(v, OP_NotFound, pLevel->iIdxCur, + sqlite3VdbeCurrentAddr(v)+2, pIn->iBase, pIn->nPrefix); + VdbeCoverage(v); } sqlite3VdbeAddOp2(v, pIn->eEndLoopOp, pIn->iCur, pIn->addrInTop); VdbeCoverage(v); VdbeCoverageIf(v, pIn->eEndLoopOp==OP_PrevIfOpen); VdbeCoverageIf(v, pIn->eEndLoopOp==OP_NextIfOpen); Index: src/wherecode.c ================================================================== --- src/wherecode.c +++ src/wherecode.c @@ -590,12 +590,16 @@ } sqlite3VdbeAddOp1(v, OP_IsNull, iOut); VdbeCoverage(v); if( i==iEq ){ pIn->iCur = iTab; pIn->eEndLoopOp = bRev ? OP_PrevIfOpen : OP_NextIfOpen; - pIn->iBase = iReg - i; - pIn->nPrefix = i; + if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 ){ + pIn->iBase = iReg - i; + pIn->nPrefix = i; + }else{ + pIn->nPrefix = 0; + } }else{ pIn->eEndLoopOp = OP_Noop; } pIn++; }