Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Allow the VACUUM following SQLITE_DBCONFIG_RESET_DATABASE to proceed even if the write-version in the header indicates that the database file is not writable. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
3dca8b9d5ab1f35f17fc527d8f2a20b6 |
User & Date: | drh 2018-07-19 14:40:41.861 |
Context
2018-07-19
| ||
15:27 | Avoid a branch in the commit logic that is unreachable when compiled without SQLITE_ENABLE_BATCH_ATOMIC_WRITE. (check-in: 271b8980c3 user: drh tags: trunk) | |
14:40 | Allow the VACUUM following SQLITE_DBCONFIG_RESET_DATABASE to proceed even if the write-version in the header indicates that the database file is not writable. (check-in: 3dca8b9d5a user: drh tags: trunk) | |
11:44 | Experimental fix for resetting databases that have been deemed read-only due to a corrupt "read-version" header field. (Closed-Leaf check-in: e2394002d0 user: dan tags: exp-dbreset-fix) | |
2018-07-18
| ||
19:09 | Add the SQLITE_FCNTL_DATA_VERSION file control (check-in: a5087c5c87 user: drh tags: trunk) | |
Changes
Changes to src/btree.c.
︙ | ︙ | |||
3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 | ** is already in a read-transaction and a read-transaction ** is requested, this is a no-op. */ if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){ goto trans_begun; } assert( pBt->inTransaction==TRANS_WRITE || IfNotOmitAV(pBt->bDoTruncate)==0 ); /* Write transactions are not possible on a read-only database */ if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){ rc = SQLITE_READONLY; goto trans_begun; } | > > > > > > | 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 | ** is already in a read-transaction and a read-transaction ** is requested, this is a no-op. */ if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){ goto trans_begun; } assert( pBt->inTransaction==TRANS_WRITE || IfNotOmitAV(pBt->bDoTruncate)==0 ); if( (p->db->flags & SQLITE_ResetDatabase) && sqlite3PagerIsreadonly(pBt->pPager)==0 ){ pBt->btsFlags &= ~BTS_READ_ONLY; } /* Write transactions are not possible on a read-only database */ if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){ rc = SQLITE_READONLY; goto trans_begun; } |
︙ | ︙ |
Changes to test/resetdb.test.
︙ | ︙ | |||
202 203 204 205 206 207 208 209 210 211 | set res } {1 2 3 4} do_execsql_test -db db2 630 { SELECT * FROM sqlite_master } {} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | set res } {1 2 3 4} do_execsql_test -db db2 630 { SELECT * FROM sqlite_master } {} #------------------------------------------------------------------------- reset_db do_execsql_test 700 { PRAGMA page_size=512; CREATE TABLE t1(a,b,c); CREATE INDEX t1a ON t1(a); CREATE INDEX t1bc ON t1(b,c); WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<10) INSERT INTO t1(a,b,c) SELECT x, randomblob(100),randomblob(100) FROM c; PRAGMA page_count; PRAGMA integrity_check; } {19 ok} do_execsql_test 710 { UPDATE sqlite_dbpage SET data= X'53514C69746520666F726D61742033000200030100402020000000000000001300000000000000000000000300000004000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000D00000003017C0001D801AC017C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E03061715110145696E6465787431626374310443524541544520494E4445582074316263204F4E20743128622C63292A0206171311013F696E64657874316174310343524541544520494E44455820743161204F4E20743128612926010617111101397461626C657431743102435245415445205441424C4520743128612C622C6329' WHERE pgno=1; } do_execsql_test 720 { PRAGMA integrity_check; } {ok} do_test 730 { sqlite3_db_config db RESET_DB 1 db eval VACUUM sqlite3_db_config db RESET_DB 0 } {0} do_execsql_test 740 { PRAGMA page_count; PRAGMA integrity_check; } {1 ok} finish_test |