From: dan Date: Wed, 7 Jul 2010 13:54:28 +0000 (+0000) Subject: Make sure the schema is loaded before preparing a "PRAGMA journal_mode" command.... X-Git-Tag: version-3.7.2~177 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f6c614715c807751eb29845ac86cea7831940563;p=thirdparty%2Fsqlite.git Make sure the schema is loaded before preparing a "PRAGMA journal_mode" command. This helps it return meaningful results when it is the first command executed by a new database connection. FossilOrigin-Name: ef126e775a02d69a9cab53028513e8799e1b6044 --- diff --git a/manifest b/manifest index 22b01ac3be..ae67851650 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,5 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA1 - -C Add\stestcase\smacros\sto\sensure\sthat\slarge-file\scases\sare\stested\sin\sWAL. -D 2010-07-07T13:43:19 +C Make\ssure\sthe\sschema\sis\sloaded\sbefore\spreparing\sa\s"PRAGMA\sjournal_mode"\scommand.\sThis\shelps\sit\sreturn\smeaningful\sresults\swhen\sit\sis\sthe\sfirst\scommand\sexecuted\sby\sa\snew\sdatabase\sconnection. +D 2010-07-07T13:54:29 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in c4270a1cd7cd70a263b7e96a258aa90e9c3618eb F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -165,7 +162,7 @@ F src/parse.y ace5c7a125d9f2a410e431ee3209034105045f7e F src/pcache.c 1e9aa2dbc0845b52e1b51cc39753b6d1e041cb07 F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050 F src/pcache1.c 3a7c28f46a61b43ff0b5c087a7983c154f4b264c -F src/pragma.c 423865323a4074f1e0d4ab02af0be014653e8863 +F src/pragma.c 7d76fe052ed805e68226e4518c2e400e9e5345de F src/prepare.c f045aeff869d6409a2eae2fe08f7dc2df9528195 F src/printf.c 5f5b65a83e63f2096a541a340722a509fa0240a7 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 @@ -538,7 +535,7 @@ F test/notify3.test 7eeba3628c4e707c004b72a2489c48fbdbc5c2ee F test/notnull.test cc7c78340328e6112a13c3e311a9ab3127114347 F test/null.test a8b09b8ed87852742343b33441a9240022108993 F test/openv2.test af02ed0a9cbc0d2a61b8f35171d4d117e588e4ec -F test/pager1.test 5352bec6768eec69dee75b97199d156dcb4a933c +F test/pager1.test d8e4b2bc8164c920e6ea0572c9e13576d6e4f3fa F test/pager2.test f5c757c271ce642d36a393ecbfb3aef1c240dcef F test/pagerfault.test 7d16f91a88e79c369d59b019615f3472297213f9 F test/pagerfault2.test 1f79ea40d1133b2683a2f811b00f2399f7ec2401 @@ -777,7 +774,7 @@ F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5 F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8 F test/vtab_shared.test 0eff9ce4f19facbe0a3e693f6c14b80711a4222d F test/wal.test 1891e6f72dd437a1c2a48091aa9182ba17a8f780 -F test/wal2.test 9f2c2a00358b1466bc38feda85f105a4fb52f251 +F test/wal2.test f4e96e3b793cdc20a45031d3f1173e67f6cc44ec F test/wal3.test d2ae7e66f973bd6b58ce49e546b2c00f44fe0485 F test/wal4.test 640be93f5422df37203aa5e7c06b24fb5e4a2439 F test/wal_common.tcl 875ee2118cd7b292ba22fb9bfa66a984b5226b13 @@ -788,7 +785,7 @@ F test/walcrash.test f6d5fb2bb108876f04848720a488065d9deef69f F test/walcrash2.test 019d60b89d96c1937adb2b30b850ac7e86e5a142 F test/walfault.test 05c470688d742688e455dd56816bd6bcffa298f8 F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483 -F test/walmode.test cfca1207d725fb5bc25b3b9f9a7053c0277cad4a +F test/walmode.test 463a730bc67990c08437616c2dd35a4e5dc82c30 F test/walslow.test d21625e2e99e11c032ce949e8a94661576548933 F test/walthread.test a25a393c068a2b42b44333fa3fdaae9072f1617c F test/where.test de337a3fe0a459ec7c93db16a519657a90552330 @@ -834,14 +831,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 8657455a11d20dbf78247559670943a72541a09d -R 5b2575fde5ab17ee5f094117e90d3426 -U drh -Z 7ccf2025fd40e8aba2c7da7154bbcd44 ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.6 (GNU/Linux) - -iD8DBQFMNIR7oxKgR168RlERAkQPAJ9XXJ1y1kSaFlQZxEA2iMYW2lDrgACdFLMj -nP/rGIBPD7YjnRDzUgfyo/A= -=Xptt ------END PGP SIGNATURE----- +P 8156b57ac33161ae6dd8a9413127ecce3c9eae83 +R e41ff6377e33eb60459569336ce5c4d2 +U dan +Z 29f850eebea1ce7652ffcd737a108779 diff --git a/manifest.uuid b/manifest.uuid index da4c2b1ca4..91c58d14b8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8156b57ac33161ae6dd8a9413127ecce3c9eae83 \ No newline at end of file +ef126e775a02d69a9cab53028513e8799e1b6044 \ No newline at end of file diff --git a/src/pragma.c b/src/pragma.c index d98b68055e..2f6a9ee507 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -537,6 +537,10 @@ void sqlite3Pragma( if( sqlite3StrICmp(zLeft,"journal_mode")==0 ){ int eMode; /* One of the PAGER_JOURNALMODE_XXX symbols */ + if( sqlite3ReadSchema(pParse) ){ + goto pragma_out; + } + sqlite3VdbeSetNumCols(v, 1); sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC); diff --git a/test/pager1.test b/test/pager1.test index b2ccdf66a1..7f28002705 100644 --- a/test/pager1.test +++ b/test/pager1.test @@ -1440,7 +1440,7 @@ do_test pager1-11.3 { } {truncate ok} do_test pager1-11.4 { db2 close - file size test.db-journal + file exists test.db-journal } {0} do_execsql_test pager1-11.5 { SELECT count(*) FROM zz } {32} db close diff --git a/test/wal2.test b/test/wal2.test index dbfcfc467a..6d87f0e750 100644 --- a/test/wal2.test +++ b/test/wal2.test @@ -619,7 +619,6 @@ foreach {tn sql res expected_locks} { COMMIT; } {wal} { $RECOVERY - $READMARK0_READ $READMARK0_WRITE } diff --git a/test/walmode.test b/test/walmode.test index 7bb656e5ef..410019c932 100644 --- a/test/walmode.test +++ b/test/walmode.test @@ -273,11 +273,11 @@ do_test walmode-5.3.5 { # Test changing to WAL mode from journal_mode=off or journal_mode=memory # foreach {tn mode} { + 1 off + 2 memory 3 persist 4 delete 5 truncate - 2 memory - 1 off } { do_test walmode-6.$tn { faultsim_delete_and_reopen @@ -287,5 +287,41 @@ foreach {tn mode} { " } [list $mode wal] } +db close + +do_test walmode-7.0 { + file delete -force test.db + sqlite3 db test.db + execsql { + PRAGMA journal_mode = WAL; + CREATE TABLE t1(a, b); + } +} {wal} +foreach {tn sql result} { + 1 "PRAGMA journal_mode" delete + 2 "PRAGMA main.journal_mode" wal + 3 "PRAGMA journal_mode = delete" delete + 4 "PRAGMA journal_mode" delete + 5 "PRAGMA main.journal_mode" delete + 6 "PRAGMA journal_mode = wal" wal + 7 "PRAGMA journal_mode" delete + 8 "PRAGMA main.journal_mode" wal + + 9 "PRAGMA journal_mode" delete + 10 "PRAGMA main.journal_mode" wal + 11 "PRAGMA main.journal_mode = delete" delete + 12 "PRAGMA journal_mode" delete + 13 "PRAGMA main.journal_mode" delete + 14 "PRAGMA main.journal_mode = wal" wal + 15 "PRAGMA journal_mode" delete + 16 "PRAGMA main.journal_mode" wal +} { + do_test walmode-7.$tn { + db close + sqlite3 db test.db + execsql $sql + } $result +} +db close finish_test