mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Do not attempt to open a WAL file for an in-memory or temporary database. Even if the database header suggests that it is a WAL database.
FossilOrigin-Name: 0fd809243652256d83ddcb58cf4890080654c667
This commit is contained in:
@ -16,6 +16,7 @@
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
source $testdir/wal_common.tcl
|
||||
source $testdir/malloc_common.tcl
|
||||
|
||||
do_not_use_codec
|
||||
|
||||
@ -25,8 +26,12 @@ ifcapable !wal {finish_test ; return }
|
||||
# Test organization:
|
||||
#
|
||||
# walback-1.*: Simple tests.
|
||||
#
|
||||
# walback-2.*: Test backups when the source db is modified mid-backup.
|
||||
#
|
||||
# walback-3.*: Backup of WAL sources into rollback destinations, and
|
||||
# vice-versa.
|
||||
#
|
||||
|
||||
# Make sure a simple backup from a WAL database works.
|
||||
#
|
||||
@ -181,5 +186,94 @@ do_test walbak-2.12 {
|
||||
string compare [sig db] [sig db2]
|
||||
} {0}
|
||||
db2 close
|
||||
db close
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Run some backup operations to copy back and forth between WAL and:
|
||||
#
|
||||
# walbak-3.1.*: an in-memory database
|
||||
#
|
||||
# walbak-3.2.*: a temporary database
|
||||
#
|
||||
# walbak-3.3.*: a database in rollback mode.
|
||||
#
|
||||
# walbak-3.4.*: a database in rollback mode that (initially) uses a
|
||||
# different page-size.
|
||||
#
|
||||
# Check that this does not confuse any connected clients.
|
||||
#
|
||||
foreach {tn setup} {
|
||||
1 {
|
||||
sqlite3 db test.db
|
||||
sqlite3 db2 :memory:
|
||||
db eval { PRAGMA page_size = 1024 ; PRAGMA journal_mode = WAL }
|
||||
db2 eval { PRAGMA page_size = 1024 }
|
||||
}
|
||||
|
||||
2 {
|
||||
sqlite3 db test.db
|
||||
sqlite3 db2 ""
|
||||
db eval { PRAGMA page_size = 1024 ; PRAGMA journal_mode = WAL }
|
||||
db2 eval { PRAGMA page_size = 1024 }
|
||||
}
|
||||
|
||||
3 {
|
||||
sqlite3 db test.db
|
||||
sqlite3 db2 test.db2
|
||||
db eval { PRAGMA page_size = 1024 ; PRAGMA journal_mode = WAL }
|
||||
db2 eval { PRAGMA page_size = 1024 ; PRAGMA journal_mode = PERSIST }
|
||||
}
|
||||
|
||||
4 {
|
||||
sqlite3 db test.db
|
||||
sqlite3 db2 test.db2
|
||||
db eval { PRAGMA page_size = 1024 ; PRAGMA journal_mode = WAL }
|
||||
db2 eval {
|
||||
PRAGMA page_size = 2048;
|
||||
PRAGMA journal_mode = PERSIST;
|
||||
CREATE TABLE xx(x);
|
||||
}
|
||||
}
|
||||
|
||||
} {
|
||||
foreach f [glob -nocomplain test.db*] { file delete -force $f }
|
||||
|
||||
eval $setup
|
||||
|
||||
do_test walbak-3.$tn.1 {
|
||||
execsql {
|
||||
CREATE TABLE t1(a, b);
|
||||
INSERT INTO t1 VALUES(1, 2);
|
||||
INSERT INTO t1 VALUES(3, 4);
|
||||
SELECT * FROM t1;
|
||||
}
|
||||
} {1 2 3 4}
|
||||
|
||||
do_test walbak-3.$tn.2 {
|
||||
sqlite3_backup B db2 main db main
|
||||
B step 10000
|
||||
B finish
|
||||
execsql { SELECT * FROM t1 } db2
|
||||
} {1 2 3 4}
|
||||
|
||||
do_test walbak-3.$tn.3 {
|
||||
execsql {
|
||||
INSERT INTO t1 VALUES(5, 6);
|
||||
INSERT INTO t1 VALUES(7, 8);
|
||||
SELECT * FROM t1;
|
||||
} db2
|
||||
} {1 2 3 4 5 6 7 8}
|
||||
|
||||
do_test walbak-3.$tn.4 {
|
||||
sqlite3_backup B db main db2 main
|
||||
B step 10000
|
||||
B finish
|
||||
execsql { SELECT * FROM t1 }
|
||||
} {1 2 3 4 5 6 7 8}
|
||||
|
||||
db close
|
||||
db2 close
|
||||
}
|
||||
|
||||
|
||||
finish_test
|
||||
|
Reference in New Issue
Block a user