From 3f94b6096163eed03d7a0ae72c8c7360ee9f6f8e Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 3 Jul 2010 13:45:52 +0000 Subject: [PATCH] Fix an assert in pager.c. And various test cases that fail with the in-memory journal permutation. FossilOrigin-Name: 78fc35ff4b01d4a583009ec8b8bf876738ca7b92 --- manifest | 30 ++++++++++-------------------- manifest.uuid | 2 +- src/pager.c | 5 ++++- test/jrnlmode.test | 16 ++++++++++++++++ test/pager1.test | 16 ++++++++++++---- test/walmode.test | 21 +++++++++++++++++++++ 6 files changed, 64 insertions(+), 26 deletions(-) diff --git a/manifest b/manifest index 88edf9d4af..9dda2f0fe0 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,5 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA1 - -C Remove\scode\saccidently\sappended\sto\spager.c. -D 2010-07-03T12:26:33 +C Fix\san\sassert\sin\spager.c.\sAnd\svarious\stest\scases\sthat\sfail\swith\sthe\sin-memory\sjournal\spermutation. +D 2010-07-03T13:45:53 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -159,7 +156,7 @@ F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f F src/os_os2.c 665876d5eec7585226b0a1cf5e18098de2b2da19 F src/os_unix.c d7910391a4c9fa6898f7c9abbbb821d5d7edb78f F src/os_win.c dd4c6f238fe464e01dab5e4bc9158187ae305fe8 -F src/pager.c eee7ac31ce893ed6b7e28f907fe99144c0696953 +F src/pager.c e4470e43f0fefe5f81034efb706a2b1f4db5ca41 F src/pager.h 879fdde5a102d2f21a3135d6f647530b21c2796c F src/parse.y ace5c7a125d9f2a410e431ee3209034105045f7e F src/pcache.c 1e9aa2dbc0845b52e1b51cc39753b6d1e041cb07 @@ -470,7 +467,7 @@ F test/join5.test 86675fc2919269aa923c84dd00ee4249b97990fe F test/join6.test bf82cf3f979e9eade83ad0d056a66c5ed71d1901 F test/journal1.test 36f2d1bb9bf03f790f43fbdb439e44c0657fab19 F test/journal2.test a08ea6545d987385e7cbb1d4e7dc2eaacd83b00b -F test/jrnlmode.test 76f94d61528c5ff32102a12f8cf34f4cc36f7849 +F test/jrnlmode.test 17881937be86841ad80431699222bf84aa01172a F test/jrnlmode2.test a19e28de1a6ec898067e46a122f1b71c9323bf00 F test/jrnlmode3.test cfcdb12b90e640a23b92785a002d96c0624c8710 F test/keyword1.test a2400977a2e4fde43bf33754c2929fda34dbca05 @@ -538,7 +535,7 @@ F test/notify3.test feb03d697f4a5327c1beb158c3e7e51c5e400703 F test/notnull.test cc7c78340328e6112a13c3e311a9ab3127114347 F test/null.test a8b09b8ed87852742343b33441a9240022108993 F test/openv2.test af02ed0a9cbc0d2a61b8f35171d4d117e588e4ec -F test/pager1.test b345014ce33efcc28a8810c476090068b279ee30 +F test/pager1.test 1fc67606e4c2e9cef17aa0c6f6fceae0fffaa9f3 F test/pager2.test f5c757c271ce642d36a393ecbfb3aef1c240dcef F test/pagerfault.test 17e51d1570c00df4a1902e6d500387017c87e74a F test/pagerfault2.test 2d2d4373b1365d693ba185323d0766feeacdb4dd @@ -787,7 +784,7 @@ F test/walcrash.test f6d5fb2bb108876f04848720a488065d9deef69f F test/walcrash2.test 019d60b89d96c1937adb2b30b850ac7e86e5a142 F test/walfault.test c2b524299dede269282a0795e11396cc446ca9af F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483 -F test/walmode.test b54e2f91f34179c65cab02a6916578617a33eef0 +F test/walmode.test cfca1207d725fb5bc25b3b9f9a7053c0277cad4a F test/walslow.test d21625e2e99e11c032ce949e8a94661576548933 F test/walthread.test a25a393c068a2b42b44333fa3fdaae9072f1617c F test/where.test de337a3fe0a459ec7c93db16a519657a90552330 @@ -833,14 +830,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 6d7640edcd69a932556f86500aedbf14e75ba7de -R d0b007e2ef9688923f10274954448b62 -U drh -Z be2fc7329c7e3b5fca1a0eb4a8d0cff8 ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.6 (GNU/Linux) - -iD8DBQFMLyx8oxKgR168RlERAkl1AJ4ohtqY31ahBbiC1mts0x8F0P605ACcC9FU -hIo83ZyxiUs6yqlF5ffrsAg= -=NNUf ------END PGP SIGNATURE----- +P 7cbe175a69738499f9218ec56f1a39f040aea9dc +R c5e0f625cc36dd57b9413db473409eda +U dan +Z 7660b7f8316180874f8f1a941691e23e diff --git a/manifest.uuid b/manifest.uuid index 359a11ad69..e572498c29 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7cbe175a69738499f9218ec56f1a39f040aea9dc \ No newline at end of file +78fc35ff4b01d4a583009ec8b8bf876738ca7b92 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index f0086e9c11..a7d8565de1 100644 --- a/src/pager.c +++ b/src/pager.c @@ -5165,7 +5165,10 @@ int sqlite3PagerCommitPhaseOne( */ #ifdef SQLITE_ENABLE_ATOMIC_WRITE PgHdr *pPg; - assert( isOpen(pPager->jfd) || pPager->journalMode==PAGER_JOURNALMODE_OFF ); + assert( isOpen(pPager->jfd) + || pPager->journalMode==PAGER_JOURNALMODE_OFF + || pPager->journalMode==PAGER_JOURNALMODE_WAL + ); if( !zMaster && isOpen(pPager->jfd) && pPager->journalOff==jrnlBufferSize(pPager) && pPager->dbSize>=pPager->dbFileSize diff --git a/test/jrnlmode.test b/test/jrnlmode.test index fd3e59f12d..6adf063626 100644 --- a/test/jrnlmode.test +++ b/test/jrnlmode.test @@ -504,4 +504,20 @@ ifcapable pragma { } } +ifcapable pragma { + catch { db close } + do_test jrnlmode-7.1 { + foreach f [glob -nocomplain test.db*] { file delete -force $f } + sqlite3 db test.db + execsql { + PRAGMA journal_mode = memory; + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 1024; + PRAGMA user_version = 5; + PRAGMA user_version; + } + } {memory 5} + do_test jrnlmode-7.2 { file size test.db } {1024} +} + finish_test diff --git a/test/pager1.test b/test/pager1.test index 2e71072e05..3da1ed5f94 100644 --- a/test/pager1.test +++ b/test/pager1.test @@ -559,20 +559,24 @@ foreach {tn1 tcl} { o { PRAGMA main.synchronous=OFF; PRAGMA aux.synchronous=OFF; + PRAGMA journal_mode = DELETE; } o512 { PRAGMA main.synchronous=OFF; PRAGMA aux.synchronous=OFF; PRAGMA main.page_size = 512; PRAGMA aux.page_size = 512; + PRAGMA journal_mode = DELETE; } n { PRAGMA main.synchronous=NORMAL; PRAGMA aux.synchronous=NORMAL; + PRAGMA journal_mode = DELETE; } f { PRAGMA main.synchronous=FULL; PRAGMA aux.synchronous=FULL; + PRAGMA journal_mode = DELETE; } } { @@ -665,6 +669,7 @@ proc copy_on_journal_delete {method filename args} { } faultsim_delete_and_reopen do_execsql_test pager1.4.5.1 { + PRAGMA journal_mode = DELETE; PRAGMA page_size = 1024; CREATE TABLE t1(a, b); CREATE TABLE t2(a, b); @@ -674,7 +679,7 @@ do_execsql_test pager1.4.5.1 { INSERT INTO t1 VALUES(1, 2); INSERT INTO t2 VALUES(3, 4); COMMIT; -} {} +} {delete} tv filter {} # Check the transaction was committed: @@ -742,6 +747,7 @@ proc copy_on_mj_delete {method filename args} { do_test pager1.4.6.1 { faultsim_delete_and_reopen execsql { + PRAGMA journal_mode = DELETE; ATTACH 'test.db2' AS two; CREATE TABLE t1(a, b); CREATE TABLE two.t2(a, b); @@ -772,6 +778,7 @@ do_test pager1.4.6.8 { tv filter xDelete sqlite3 db test.db2 execsql { + PRAGMA journal_mode = DELETE; ATTACH 'test.db3' AS three; CREATE TABLE three.t3(a, b); INSERT INTO t3 VALUES(1, 't3.1'); @@ -839,6 +846,7 @@ proc copy_on_journal_delete {method filename args} { } faultsim_delete_and_reopen do_execsql_test pager1.4.7.1 { + PRAGMA journal_mode = DELETE; CREATE TABLE t1(x PRIMARY KEY, y); CREATE INDEX i1 ON t1(y); INSERT INTO t1 VALUES('I', 'one'); @@ -848,7 +856,7 @@ do_execsql_test pager1.4.7.1 { INSERT INTO t1 VALUES('IV', 'sixteen'); INSERT INTO t1 VALUES('V' , 'twentyfive'); COMMIT; -} {} +} {delete} tv filter {} db close tv delete @@ -1339,7 +1347,6 @@ foreach sectorsize { DROP TABLE t6; DROP TABLE t7; } - if {$eff==65536} breakpoint execsql { BEGIN; CREATE TABLE t6(a, b); @@ -1393,6 +1400,7 @@ testvfs tv -default 1 faultsim_delete_and_reopen db func a_string a_string do_execsql_test pager1-11.1 { + PRAGMA journal_mode = DELETE; PRAGMA cache_size = 10; BEGIN; CREATE TABLE zz(top PRIMARY KEY); @@ -1405,7 +1413,7 @@ do_execsql_test pager1-11.1 { COMMIT; BEGIN; UPDATE zz SET top = a_string(345); -} {} +} {delete} proc lockout {method args} { return SQLITE_IOERR } tv script lockout diff --git a/test/walmode.test b/test/walmode.test index 48979b19c6..7bb656e5ef 100644 --- a/test/walmode.test +++ b/test/walmode.test @@ -15,6 +15,7 @@ set testdir [file dirname $argv0] source $testdir/tester.tcl +source $testdir/malloc_common.tcl # If the library was compiled without WAL support, check that the # "PRAGMA journal_mode=WAL" treats "WAL" as an unrecognized mode. @@ -267,4 +268,24 @@ do_test walmode-5.3.5 { } } [list 1 2 3 4 $tempJrnlMode] + +#------------------------------------------------------------------------- +# Test changing to WAL mode from journal_mode=off or journal_mode=memory +# +foreach {tn mode} { + 3 persist + 4 delete + 5 truncate + 2 memory + 1 off +} { + do_test walmode-6.$tn { + faultsim_delete_and_reopen + execsql " + PRAGMA journal_mode = $mode; + PRAGMA journal_mode = wal; + " + } [list $mode wal] +} + finish_test -- 2.47.2