diff options
Diffstat (limited to 'src/where.c')
-rw-r--r-- | src/where.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/where.c b/src/where.c index 2afc012f6..ce6ae3070 100644 --- a/src/where.c +++ b/src/where.c @@ -3463,10 +3463,9 @@ static int whereLoopAddBtree( ** Return true if pTerm is a virtual table LIMIT or OFFSET term. */ static int isLimitTerm(WhereTerm *pTerm){ - return pTerm->eOperator==WO_AUX && ( - pTerm->eMatchOp==SQLITE_INDEX_CONSTRAINT_LIMIT - || pTerm->eMatchOp==SQLITE_INDEX_CONSTRAINT_OFFSET - ); + assert( pTerm->eOperator==WO_AUX || pTerm->eMatchOp==0 ); + return pTerm->eMatchOp>=SQLITE_INDEX_CONSTRAINT_LIMIT + && pTerm->eMatchOp<=SQLITE_INDEX_CONSTRAINT_OFFSET; } /* @@ -3555,8 +3554,8 @@ static int whereLoopAddVirtualOne( mxTerm = -1; assert( pNew->nLSlot>=nConstraint ); - for(i=0; i<nConstraint; i++) pNew->aLTerm[i] = 0; - pNew->u.vtab.omitMask = 0; + memset(pNew->aLTerm, 0, sizeof(pNew->aLTerm[0])*nConstraint ); + memset(&pNew->u.vtab, 0, sizeof(pNew->u.vtab)); pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint; for(i=0; i<nConstraint; i++, pIdxCons++){ int iTerm; @@ -3590,6 +3589,9 @@ static int whereLoopAddVirtualOne( }else{ testcase( i!=iTerm ); } + if( pTerm->eMatchOp==SQLITE_INDEX_CONSTRAINT_OFFSET ){ + pNew->u.vtab.bOmitOffset = 1; + } } if( (pTerm->eOperator & WO_IN)!=0 ){ /* A virtual table that is constrained by an IN clause may not |