Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a problem in rbu vacuum on tables with a large sqlite_master table. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | rbu-vacuum |
Files: | files | file ages | folders |
SHA1: |
23eac52e987996afe8db847921aef434 |
User & Date: | dan 2016-04-21 15:26:26.501 |
Context
2016-04-21
| ||
16:44 | If a call to sqlite3rbu_close() on an rbu handle opened by sqlite3rbu_vacuum() returns other than SQLITE_OK, delete the contents of the rbu_state table. This ensures that if an RBU vacuum operation either completes successfully or encounters an error, the next call to sqlite3rbu_vacuum() with the same parameters starts a new RBU vacuum operation. (Closed-Leaf check-in: 6e4ac704f5 user: dan tags: rbu-vacuum) | |
15:26 | Fix a problem in rbu vacuum on tables with a large sqlite_master table. (check-in: 23eac52e98 user: dan tags: rbu-vacuum) | |
2016-04-20
| ||
20:08 | Add a documentation comment for sqlite3rbu_vacuum() to sqlite3rbu.h. (check-in: da5c753dda user: dan tags: rbu-vacuum) | |
Changes
Changes to ext/rbu/rbuvacuum.test.
︙ | ︙ | |||
237 238 239 240 241 242 243 244 245 246 247 248 249 250 | do_rbu_vacuum_test 1.9.1 $step do_execsql_test 1.9.2 { PRAGMA main.page_size; PRAGMA main.auto_vacuum; PRAGMA main.user_version; PRAGMA main.application_id; } {8192 2 412 413} } #------------------------------------------------------------------------- # Test some error cases: # # 2.1.* the db being vacuumed being in wal mode already. # 2.2.* database modified mid vacuum. | > > > > > > > > > > > > > > > | 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 | do_rbu_vacuum_test 1.9.1 $step do_execsql_test 1.9.2 { PRAGMA main.page_size; PRAGMA main.auto_vacuum; PRAGMA main.user_version; PRAGMA main.application_id; } {8192 2 412 413} # Vacuum a database with a large sqlite_master table. # reset_db do_test 1.10.1 { for {set i 1} {$i < 50} {incr i} { execsql "PRAGMA page_size = 1024" execsql "CREATE TABLE t$i (a, b, c, PRIMARY KEY(a, b));" execsql " INSERT INTO t$i VALUES(1, 2, 3); INSERT INTO t$i VALUES(4, 5, 6); " } } {} do_rbu_vacuum_test 1.10.2 $step } #------------------------------------------------------------------------- # Test some error cases: # # 2.1.* the db being vacuumed being in wal mode already. # 2.2.* database modified mid vacuum. |
︙ | ︙ |
Changes to ext/rbu/sqlite3rbu.c.
︙ | ︙ | |||
3948 3949 3950 3951 3952 3953 3954 | rbuPutU32(&aBuf[52], iRoot); /* largest root page number */ rbuPutU32(&aBuf[36], 0); /* number of free pages */ rbuPutU32(&aBuf[32], 0); /* first page on free list trunk */ rbuPutU32(&aBuf[28], 1); /* size of db file in pages */ rbuPutU32(&aBuf[24], pRbu->pRbuFd->iCookie+1); /* Change counter */ if( iAmt>100 ){ | < | > | 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 | rbuPutU32(&aBuf[52], iRoot); /* largest root page number */ rbuPutU32(&aBuf[36], 0); /* number of free pages */ rbuPutU32(&aBuf[32], 0); /* first page on free list trunk */ rbuPutU32(&aBuf[28], 1); /* size of db file in pages */ rbuPutU32(&aBuf[24], pRbu->pRbuFd->iCookie+1); /* Change counter */ if( iAmt>100 ){ memset(&aBuf[100], 0, iAmt-100); rbuPutU16(&aBuf[105], iAmt & 0xFFFF); aBuf[100] = 0x0D; } } } #endif } if( rc==SQLITE_OK && iOfst==0 && (p->openFlags & SQLITE_OPEN_MAIN_DB) ){ /* These look like magic numbers. But they are stable, as they are part |
︙ | ︙ |