Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Increase test coverage of wal.c provided by permutation "coverage-wal" on this branch. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | wal2 |
Files: | files | file ages | folders |
SHA3-256: |
2f7f893a702728745445f6ef5f914c11 |
User & Date: | dan 2018-12-27 16:49:33.954 |
Context
2018-12-28
| ||
16:20 | Add new test file wal2rollback.test to this branch. (check-in: 85a376fc6c user: dan tags: wal2) | |
2018-12-27
| ||
17:11 | Merge latest wal2 changes with this branch. (check-in: ea96001e80 user: dan tags: begin-concurrent-wal2) | |
16:49 | Increase test coverage of wal.c provided by permutation "coverage-wal" on this branch. (check-in: 2f7f893a70 user: dan tags: wal2) | |
2018-12-26
| ||
20:42 | Improve testing of the wal.c changes on this branch. (check-in: 63483e22c7 user: dan tags: wal2) | |
Changes
Changes to src/wal.c.
︙ | ︙ | |||
3881 3882 3883 3884 3885 3886 3887 | nWalSize = (pWal->mxWalSize-WAL_HDRSIZE+pWal->szPage+WAL_FRAME_HDRSIZE-1) / (pWal->szPage+WAL_FRAME_HDRSIZE); nWalSize = MAX(nWalSize, 1); } if( walidxGetMxFrame(&pWal->hdr, iApp)>=nWalSize ){ volatile WalCkptInfo *pInfo = walCkptInfo(pWal); | | > | 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 | nWalSize = (pWal->mxWalSize-WAL_HDRSIZE+pWal->szPage+WAL_FRAME_HDRSIZE-1) / (pWal->szPage+WAL_FRAME_HDRSIZE); nWalSize = MAX(nWalSize, 1); } if( walidxGetMxFrame(&pWal->hdr, iApp)>=nWalSize ){ volatile WalCkptInfo *pInfo = walCkptInfo(pWal); u32 mxFrame = walidxGetMxFrame(&pWal->hdr, !iApp); if( mxFrame==0 || pInfo->nBackfill ){ rc = wal2RestartOk(pWal, iApp); if( rc==SQLITE_OK ){ int iNew = !iApp; pWal->nCkpt++; walidxSetFile(&pWal->hdr, iNew); walidxSetMxFrame(&pWal->hdr, iNew, 0); sqlite3Put4byte((u8*)&pWal->hdr.aSalt[0], pWal->hdr.aFrameCksum[0]); |
︙ | ︙ | |||
4425 4426 4427 4428 4429 4430 4431 | } } /* Copy data from the log to the database file. */ if( rc==SQLITE_OK ){ int iCkpt = walidxGetFile(&pWal->hdr); | | > > | 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 | } } /* Copy data from the log to the database file. */ if( rc==SQLITE_OK ){ int iCkpt = walidxGetFile(&pWal->hdr); if( (walPagesize(pWal)!=nBuf) && ((pWal->hdr.mxFrame2 & 0x7FFFFFFF) || pWal->hdr.mxFrame) ){ rc = SQLITE_CORRUPT_BKPT; }else{ rc = walCheckpoint(pWal, db, eMode2, xBusy2, pBusyArg, sync_flags, zBuf); } /* If no error occurred, set the output variables. */ if( rc==SQLITE_OK || rc==SQLITE_BUSY ){ |
︙ | ︙ |
Changes to test/wal.test.
︙ | ︙ | |||
1170 1171 1172 1173 1174 1175 1176 | 5 2048 1 6 4096 1 7 8192 1 8 16384 1 9 32768 1 10 65536 1 11 131072 0 | | | | | 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 | 5 2048 1 6 4096 1 7 8192 1 8 16384 1 9 32768 1 10 65536 1 11 131072 0 12 1016 0 } { if {$::SQLITE_MAX_PAGE_SIZE < $pgsz} { set works 0 } for {set pg 1} {$pg <= 3} {incr pg} { forcecopy testX.db test.db forcedelete test.db-wal # Check that the database now exists and consists of three pages. And # that there is no associated wal file. # do_test wal-18.2.$tn.$pg.1 { file exists test.db-wal } 0 do_test wal-18.2.$tn.$pg.2 { file exists test.db } 1 do_test wal-18.2.$tn.$pg.3 { file size test.db } [expr 1024*3] do_test wal-18.2.$tn.$pg.4 { # Create a wal file that contains a single frame (database page # number $pg) with the commit flag set. The frame checksum is # correct, but the contents of the database page are corrupt. # # The page-size in the log file header is set to $pgsz. If the |
︙ | ︙ | |||
1219 1220 1221 1222 1223 1224 1225 | set fd [open test.db-wal w] fconfigure $fd -encoding binary -translation binary puts -nonewline $fd $walhdr puts -nonewline $fd $framehdr puts -nonewline $fd $framebody close $fd | | | | | 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 | set fd [open test.db-wal w] fconfigure $fd -encoding binary -translation binary puts -nonewline $fd $walhdr puts -nonewline $fd $framehdr puts -nonewline $fd $framebody close $fd file size test.db-wal } [wal_file_size 1 $pgsz] do_test wal-18.2.$tn.$pg.5 { sqlite3 db test.db set rc [catch { db one {PRAGMA integrity_check} } msg] expr { $rc!=0 || $msg!="ok" } } $works db close } } #------------------------------------------------------------------------- # The following test - wal-19.* - fixes a bug that was present during # development. |
︙ | ︙ |
Changes to test/wal2recover2.test.
︙ | ︙ | |||
180 181 182 183 184 185 186 | 4 test.db2-wal2 salt1 } { do_test 1.6.$tn { forcecopy test.db test.db2 forcecopy test.db-wal2 test.db2-wal forcecopy test.db-wal test.db2-wal2 wal_incr_hdrfield $file $field | < | 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | 4 test.db2-wal2 salt1 } { do_test 1.6.$tn { forcecopy test.db test.db2 forcecopy test.db-wal2 test.db2-wal forcecopy test.db-wal test.db2-wal2 wal_incr_hdrfield $file $field sqlite3 db2 test.db2 execsql { SELECT sum(x) FROM t1; SELECT sum(x) FROM t2; } db2 } [list $H $L] db2 close |
︙ | ︙ | |||
207 208 209 210 211 212 213 | forcecopy test.db-wal2 test.db2-wal forcecopy test.db-wal test.db2-wal2 wal_set_nckpt test.db2-wal2 $nCkpt2 wal_set_nckpt test.db2-wal $nCkpt1 wal_set_follow test.db2-wal test.db2-wal2 | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | forcecopy test.db-wal2 test.db2-wal forcecopy test.db-wal test.db2-wal2 wal_set_nckpt test.db2-wal2 $nCkpt2 wal_set_nckpt test.db2-wal $nCkpt1 wal_set_follow test.db2-wal test.db2-wal2 sqlite3 db2 test.db2 execsql { SELECT sum(x) FROM t1; SELECT sum(x) FROM t2; } db2 } $res db2 close } #------------------------------------------------------------------------- reset_db do_execsql_test 1.8.1 { PRAGMA autovacuum = 0; PRAGMA page_size = 4096; CREATE TABLE t1(x); CREATE TABLE t2(x); WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1500 ) INSERT INTO t1 SELECT i FROM s; WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1500 ) INSERT INTO t2 SELECT i FROM s; PRAGMA journal_mode = wal2; PRAGMA journal_size_limit = 10000; WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1500 ) INSERT INTO t2 SELECT i FROM s; } {wal2 10000} do_test 1.8.2 { list [file size test.db-wal] [file size test.db-wal2] } {24752 0} do_execsql_test 1.8.3 { PRAGMA user_version = 123 } do_test 1.8.4 { list [file size test.db-wal] [file size test.db-wal2] } {24752 4152} do_test 1.8.5 { hexio_write test.db-wal2 [expr 56+16] 0400 fix_wal_cksums test.db-wal2 } {} do_test 1.8.6 { forcecopy test.db test.db2 forcecopy test.db-wal test.db2-wal forcecopy test.db-wal2 test.db2-wal2 sqlite3 db2 test.db2 catchsql { SELECT * FROM sqlite_master } db2 } {1 {database disk image is malformed}} db2 close finish_test |
Changes to test/wal2snapshot.test.
︙ | ︙ | |||
63 64 65 66 67 68 69 | do_test 1.6 { execsql BEGIN set SNAPSHOT [sqlite3_snapshot_get_blob db main] sqlite3_snapshot_open_blob db main $SNAPSHOT execsql COMMIT } {} } else { | | > > > > > > > > > | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | do_test 1.6 { execsql BEGIN set SNAPSHOT [sqlite3_snapshot_get_blob db main] sqlite3_snapshot_open_blob db main $SNAPSHOT execsql COMMIT } {} } else { do_test 2.6.1 { execsql BEGIN set res [ list [catch { sqlite3_snapshot_open_blob db main $SNAPSHOT } msg] $msg ] execsql COMMIT set res } {1 SQLITE_ERROR} do_test 2.6.2 { execsql BEGIN execsql {SELECT * FROM sqlite_master} set res [ list [catch { sqlite3_snapshot_open_blob db main $SNAPSHOT } msg] $msg ] execsql COMMIT set res } {1 SQLITE_ERROR} } |
︙ | ︙ |