Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Omit unnecessary OP_Next and OP_Prev operators when uniqueness constraints guarantee that the code will only make one pass through the loop. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
f000c9b2b7348238fe2085140d2dd052 |
User & Date: | drh 2011-03-09 21:02:31.691 |
References
2011-03-09
| ||
22:09 | Backport the OP_Next and OP_Prev for UNIQUE indices patch from checkin [f000c9b2b7] on the trunk. (check-in: 2d55234ea3 user: drh tags: branch-3.7.2) | |
Context
2011-03-09
| ||
21:36 | Fix issue with mem5 allocator when min request size is larger thatn 2^30. (check-in: d7dae06fb2 user: shaneh tags: trunk) | |
21:02 | Omit unnecessary OP_Next and OP_Prev operators when uniqueness constraints guarantee that the code will only make one pass through the loop. (check-in: f000c9b2b7 user: drh tags: trunk) | |
11:04 | Updates to the OS/2 implementation from Rich Walsh. (check-in: dc46156a22 user: drh tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
3997 3998 3999 4000 4001 4002 4003 | sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg); /* Deferred seek */ } /* Record the instruction used to terminate the loop. Disable ** WHERE clause terms made redundant by the index range scan. */ | > | > > > > > | 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 | sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg); /* Deferred seek */ } /* Record the instruction used to terminate the loop. Disable ** WHERE clause terms made redundant by the index range scan. */ if( pLevel->plan.wsFlags & WHERE_UNIQUE ){ pLevel->op = OP_Noop; }else if( bRev ){ pLevel->op = OP_Prev; }else{ pLevel->op = OP_Next; } pLevel->p1 = iIdxCur; }else #ifndef SQLITE_OMIT_OR_OPTIMIZATION if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){ /* Case 4: Two or more separately indexed terms connected by OR ** |
︙ | ︙ |
Changes to test/index.test.
︙ | ︙ | |||
350 351 352 353 354 355 356 | ); } for {set i 1} {$i<=50} {incr i} { execsql "INSERT INTO t3 VALUES('x${i}x',$i,0.$i)" } set sqlite_search_count 0 concat [execsql {SELECT c FROM t3 WHERE b==10}] $sqlite_search_count | | | 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 | ); } for {set i 1} {$i<=50} {incr i} { execsql "INSERT INTO t3 VALUES('x${i}x',$i,0.$i)" } set sqlite_search_count 0 concat [execsql {SELECT c FROM t3 WHERE b==10}] $sqlite_search_count } {0.1 2} integrity_check index-11.2 # Numeric strings should compare as if they were numbers. So even if the # strings are not character-by-character the same, if they represent the # same number they should compare equal to one another. Verify that this # is true in indices. |
︙ | ︙ |