Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Simplification to the random rowid picking logic that begins running when the maximum possible rowid has already been used. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
1330c72e172324c68ab49e5bb2ceba98 |
User & Date: | drh 2014-09-25 12:31:28.476 |
Context
2014-09-25
| ||
13:17 | Simplifications to the SQL function and aggregate calling procedures. (check-in: 3467049a17 user: drh tags: trunk) | |
12:31 | Simplification to the random rowid picking logic that begins running when the maximum possible rowid has already been used. (check-in: 1330c72e17 user: drh tags: trunk) | |
11:08 | Still more performance enhancements to the LIKE and GLOB operators. (check-in: 6c8924cacc user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
4016 4017 4018 4019 4020 4021 4022 | if( pC->useRandomRowid ){ /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the ** largest possible integer (9223372036854775807) then the database ** engine starts picking positive candidate ROWIDs at random until ** it finds one that is not previously used. */ assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is ** an AUTOINCREMENT table. */ | < | > > | | < | | < < < < < < < < < < | 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 | if( pC->useRandomRowid ){ /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the ** largest possible integer (9223372036854775807) then the database ** engine starts picking positive candidate ROWIDs at random until ** it finds one that is not previously used. */ assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is ** an AUTOINCREMENT table. */ cnt = 0; do{ sqlite3_randomness(sizeof(v), &v); v &= (MAX_ROWID>>1); v++; }while( ((rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, 0, (u64)v, 0, &res))==SQLITE_OK) && (res==0) && (++cnt<100)); if( rc==SQLITE_OK && res==0 ){ rc = SQLITE_FULL; /* IMP: R-38219-53002 */ goto abort_due_to_error; } assert( v>0 ); /* EV: R-40812-03570 */ } pC->rowidIsValid = 0; |
︙ | ︙ |
Changes to test/rowid.test.
︙ | ︙ | |||
675 676 677 678 679 680 681 | } {a} do_test rowid-12.2 { db close sqlite3 db test.db save_prng_state execsql { INSERT INTO t7 VALUES(NULL,'b'); | | | | 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 | } {a} do_test rowid-12.2 { db close sqlite3 db test.db save_prng_state execsql { INSERT INTO t7 VALUES(NULL,'b'); SELECT x, y FROM t7 ORDER BY x; } } {/\d+ b 9223372036854775807 a/} execsql {INSERT INTO t7 VALUES(2,'y');} for {set i 1} {$i<100} {incr i} { do_test rowid-12.3.$i { db eval {DELETE FROM t7temp; INSERT INTO t7temp VALUES(1);} restore_prng_state execsql { INSERT INTO t7 VALUES(NULL,'x'); |
︙ | ︙ |