Fixes to the test cases in wal2.test.
FossilOrigin-Name: cd5fbcbce8b55f24c0bf349b179c26e333ff7172
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
C Comment\sedits\sand\scleanup\sin\swal.c.\s\sNo\sfunctional\scode\schanges.
|
||||
D 2010-06-01T01:08:09
|
||||
C Fixes\sto\sthe\stest\scases\sin\swal2.test.
|
||||
D 2010-06-01T07:51:48
|
||||
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
||||
F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3
|
||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||
@@ -762,11 +762,11 @@ F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
|
||||
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
|
||||
F test/vtab_shared.test 0eff9ce4f19facbe0a3e693f6c14b80711a4222d
|
||||
F test/wal.test a54d9be9e82eede1653f7998723ead8ce8a1a580
|
||||
F test/wal2.test 6c1596e2fa9944eb6ed562f5fadc94d6da0beee6
|
||||
F test/wal2.test a7c0265ecea25e95262d6448dc4fbe3fbe94cf0d
|
||||
F test/walbak.test e7650a26eb4b8abeca9b145b1af1e63026dde432
|
||||
F test/walcksum.test 4efa8fb88c32bed8288ea4385a9cc113a5c8f0bf
|
||||
F test/walcrash.test f6d5fb2bb108876f04848720a488065d9deef69f
|
||||
F test/walcrash2.test f37c99f729a30c6916849a4b1d3a161f2c4fb000
|
||||
F test/walcrash2.test 14585ad1a2c85da2de721caa3b4deeea55213008
|
||||
F test/walfault.test f71d4c9a13d4e27086aef55f1e0e94734ffa2f6a
|
||||
F test/walhook.test 67e675127f4acb72f061a12667ce6e5460b06b78
|
||||
F test/walmode.test 6ca9d710cc9f6545b913abcded6d6b0b15641048
|
||||
@@ -815,7 +815,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||
P e46a8f2b752f86c4d8942ee125210516026ffdc2
|
||||
R 09bc5e191ce3f59e21c41c3724d44527
|
||||
U drh
|
||||
Z 50c2b0464eb7589c438f6f5d9973cb2c
|
||||
P e8e666ab8273f5db5265f0773b39820f75b6df1a
|
||||
R 2d4ce189d914f65f52a0b2f34d21a2a0
|
||||
U dan
|
||||
Z 83ba1556aa3dec7d9475b47421ab5c55
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
e8e666ab8273f5db5265f0773b39820f75b6df1a
|
||||
cd5fbcbce8b55f24c0bf349b179c26e333ff7172
|
||||
+114
-31
@@ -371,6 +371,15 @@ tvfs delete
|
||||
# required the client grabs all exclusive locks (just as it would for a
|
||||
# recovery performed as a pre-cursor to a normal database transaction).
|
||||
#
|
||||
set expected_locks [list]
|
||||
lappend expected_locks {1 1 lock exclusive} ;# Lock checkpoint
|
||||
lappend expected_locks {0 1 lock exclusive} ;# Lock writer
|
||||
lappend expected_locks {2 6 lock exclusive} ;# Lock recovery & all aReadMark[]
|
||||
lappend expected_locks {2 6 unlock exclusive} ;# Unlock recovery & aReadMark[]
|
||||
lappend expected_locks {0 1 unlock exclusive} ;# Unlock writer
|
||||
lappend expected_locks {3 1 lock exclusive} ;# Lock aReadMark[0]
|
||||
lappend expected_locks {3 1 unlock exclusive} ;# Unlock aReadMark[0]
|
||||
lappend expected_locks {1 1 unlock exclusive} ;# Unlock checkpoint
|
||||
do_test wal2-5.1 {
|
||||
proc tvfs_cb {method args} {
|
||||
set ::shm_file [lindex $args 0]
|
||||
@@ -392,7 +401,7 @@ do_test wal2-5.1 {
|
||||
set ::locks [list]
|
||||
execsql { PRAGMA wal_checkpoint }
|
||||
set ::locks
|
||||
} {CHECKPOINT UNLOCK}
|
||||
} $expected_locks
|
||||
db close
|
||||
tvfs delete
|
||||
|
||||
@@ -557,6 +566,11 @@ do_test wal2-6.3.7 {
|
||||
} {main exclusive temp closed}
|
||||
db close
|
||||
|
||||
|
||||
# This test - wal2-6.4.* - uses a single database connection and the
|
||||
# [testvfs] instrumentation to test that xShmLock() is being called
|
||||
# as expected when a WAL database is used with locking_mode=exclusive.
|
||||
#
|
||||
do_test wal2-6.4.1 {
|
||||
file delete -force test.db test.db-wal test.db-journal
|
||||
proc tvfs_cb {method args} {
|
||||
@@ -566,45 +580,114 @@ do_test wal2-6.4.1 {
|
||||
}
|
||||
testvfs tvfs tvfs_cb
|
||||
sqlite3 db test.db -vfs tvfs
|
||||
} {}
|
||||
|
||||
execsql {
|
||||
set RECOVERY {
|
||||
{0 1 lock exclusive} {1 7 lock exclusive}
|
||||
{1 7 unlock exclusive} {0 1 unlock exclusive}
|
||||
}
|
||||
set READMARK0_READ {
|
||||
{3 1 lock shared} {3 1 unlock shared}
|
||||
}
|
||||
set READMARK0_WRITE {
|
||||
{3 1 lock shared}
|
||||
{0 1 lock exclusive} {3 1 unlock shared}
|
||||
{4 1 lock exclusive} {4 1 unlock exclusive} {4 1 lock shared}
|
||||
{0 1 unlock exclusive} {4 1 unlock shared}
|
||||
}
|
||||
set READMARK1_SET {
|
||||
{4 1 lock exclusive} {4 1 unlock exclusive}
|
||||
}
|
||||
set READMARK1_READ {
|
||||
{4 1 lock shared} {4 1 unlock shared}
|
||||
}
|
||||
|
||||
foreach {tn sql res expected_locks} {
|
||||
2 {
|
||||
PRAGMA journal_mode = WAL;
|
||||
CREATE TABLE t1(x);
|
||||
INSERT INTO t1 VALUES('Leonard');
|
||||
INSERT INTO t1 VALUES('Arthur');
|
||||
BEGIN;
|
||||
CREATE TABLE t1(x);
|
||||
INSERT INTO t1 VALUES('Leonard');
|
||||
INSERT INTO t1 VALUES('Arthur');
|
||||
COMMIT;
|
||||
} {wal} {
|
||||
$RECOVERY
|
||||
$READMARK0_READ
|
||||
$READMARK0_WRITE
|
||||
}
|
||||
|
||||
set ::locks [list]
|
||||
execsql { PRAGMA locking_mode = exclusive }
|
||||
set ::locks
|
||||
} {}
|
||||
do_test wal2-6.4.2 {
|
||||
execsql { SELECT * FROM t1 }
|
||||
} {Leonard Arthur}
|
||||
do_test wal2-6.4.3 {
|
||||
set ::locks
|
||||
} {READ}
|
||||
do_test wal2-6.4.4 {
|
||||
execsql {
|
||||
3 {
|
||||
# This test should do the READMARK1_SET locking to populate the
|
||||
# aReadMark[1] slot with the current mxFrame value. Followed by
|
||||
# READMARK1_READ to read the database.
|
||||
#
|
||||
SELECT * FROM t1
|
||||
} {Leonard Arthur} {
|
||||
$READMARK1_SET
|
||||
$READMARK1_READ
|
||||
}
|
||||
|
||||
4 {
|
||||
# aReadMark[1] is already set to mxFrame. So just READMARK1_READ
|
||||
# this time, not READMARK1_SET.
|
||||
#
|
||||
SELECT * FROM t1 ORDER BY x
|
||||
} {Arthur Leonard} {
|
||||
$READMARK1_READ
|
||||
}
|
||||
|
||||
5 {
|
||||
PRAGMA locking_mode = exclusive
|
||||
} {exclusive} { }
|
||||
|
||||
6 {
|
||||
INSERT INTO t1 VALUES('Julius Henry');
|
||||
SELECT * FROM t1;
|
||||
} {Leonard Arthur {Julius Henry}} {
|
||||
$READMARK1_READ
|
||||
}
|
||||
} {Leonard Arthur {Julius Henry}}
|
||||
do_test wal2-6.4.5 {
|
||||
set ::locks
|
||||
} {READ}
|
||||
do_test wal2-6.4.6 {
|
||||
execsql {
|
||||
PRAGMA locking_mode = NORMAL;
|
||||
DELETE FROM t1;
|
||||
|
||||
7 {
|
||||
INSERT INTO t1 VALUES('Karl');
|
||||
SELECT * FROM t1;
|
||||
} {Leonard Arthur {Julius Henry} Karl} { }
|
||||
|
||||
8 {
|
||||
PRAGMA locking_mode = normal
|
||||
} {normal} { }
|
||||
|
||||
9 {
|
||||
SELECT * FROM t1 ORDER BY x
|
||||
} {Arthur {Julius Henry} Karl Leonard} { }
|
||||
|
||||
10 {
|
||||
DELETE FROM t1
|
||||
} {} {
|
||||
$READMARK1_READ
|
||||
}
|
||||
set ::locks
|
||||
} {READ UNLOCK}
|
||||
do_test wal2-6.4.7 {
|
||||
|
||||
11 {
|
||||
SELECT * FROM t1
|
||||
} {} {
|
||||
$READMARK1_SET
|
||||
$READMARK1_READ
|
||||
}
|
||||
} {
|
||||
|
||||
set L [list]
|
||||
foreach el [subst $expected_locks] { lappend L $el }
|
||||
|
||||
set S ""
|
||||
foreach sq [split $sql "\n"] {
|
||||
set sq [string trim $sq]
|
||||
if {[string match {#*} $sq]==0} {append S "$sq\n"}
|
||||
}
|
||||
|
||||
set ::locks [list]
|
||||
execsql { INSERT INTO t1 VALUES('Karl') }
|
||||
set ::locks
|
||||
} {READ WRITE READ UNLOCK}
|
||||
do_test wal2-6.4.$tn.1 { execsql $S } $res
|
||||
do_test wal2-6.4.$tn.2 { set ::locks } $L
|
||||
}
|
||||
|
||||
db close
|
||||
tvfs delete
|
||||
|
||||
|
||||
+1
-13
@@ -91,20 +91,8 @@ for {set nEntry 8} {$nEntry < 8192} {incr nEntry 8} {
|
||||
file size test.db-wal
|
||||
} [wal_file_size 16 1024]
|
||||
}
|
||||
sqlite3 db2 test.db
|
||||
breakpoint
|
||||
db2 eval {
|
||||
PRAGMA cache_size = 15;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES(randomblob(900)); -- 1 row, 1 page
|
||||
INSERT INTO t1 SELECT * FROM t1; -- 2 rows, 3 pages
|
||||
INSERT INTO t1 SELECT * FROM t1; -- 4 rows, 5 pages
|
||||
INSERT INTO t1 SELECT * FROM t1; -- 8 rows, 9 pages
|
||||
INSERT INTO t1 SELECT * FROM t1; -- 16 rows, 17 pages
|
||||
INSERT INTO t1 SELECT * FROM t1 LIMIT 3; -- 20 rows, 20 pages
|
||||
}
|
||||
|
||||
do_test walcrash2-1.3 {
|
||||
sqlite3 db2 test.db
|
||||
execsql { SELECT count(*) FROM t1 } db2
|
||||
} {0}
|
||||
catch { db2 close }
|
||||
|
||||
Reference in New Issue
Block a user