Index: src/pragma.c ================================================================== --- src/pragma.c +++ src/pragma.c @@ -534,10 +534,14 @@ ** PRAGMA [database.]journal_mode = ** (delete|persist|off|truncate|memory|wal|off) */ 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); if( zRight==0 ){ Index: test/pager1.test ================================================================== --- test/pager1.test +++ test/pager1.test @@ -1438,11 +1438,11 @@ PRAGMA integrity_check; } db2 } {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 tv delete Index: test/wal2.test ================================================================== --- test/wal2.test +++ test/wal2.test @@ -617,11 +617,10 @@ INSERT INTO t1 VALUES('Leonard'); INSERT INTO t1 VALUES('Arthur'); COMMIT; } {wal} { $RECOVERY - $READMARK0_READ $READMARK0_WRITE } 3 { # This test should do the READMARK1_SET locking to populate the Index: test/walmode.test ================================================================== --- test/walmode.test +++ test/walmode.test @@ -271,21 +271,57 @@ #------------------------------------------------------------------------- # 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 execsql " PRAGMA journal_mode = $mode; PRAGMA journal_mode = wal; " } [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