Add tests to pager1.test and pagerfault.test.
FossilOrigin-Name: c6e75950928954fbb1590f952e3cdbcb0753b745
This commit is contained in:
+195
-8
@@ -1223,6 +1223,15 @@ do_test pager1-9.2.4 { execsql { SELECT count(*) FROM ab } } {128}
|
||||
db close
|
||||
db2 close
|
||||
|
||||
proc recursive_select {id table {script {}}} {
|
||||
set cnt 0
|
||||
db eval "SELECT rowid, * FROM $table WHERE rowid = ($id-1)" {
|
||||
recursive_select $rowid $table $script
|
||||
incr cnt
|
||||
}
|
||||
if {$cnt==0} { eval $script }
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test that regardless of the value returned by xSectorSize(), the
|
||||
# minimum effective sector-size is 512 and the maximum 65536 bytes.
|
||||
@@ -1237,16 +1246,100 @@ foreach sectorsize {
|
||||
if {$sectorsize < 512} { set eff 512 }
|
||||
if {$sectorsize > 65536} { set eff 65536 }
|
||||
|
||||
do_test pager1-10.$sectorsize {
|
||||
do_test pager1-10.$sectorsize.1 {
|
||||
faultsim_delete_and_reopen
|
||||
db func a_string a_string
|
||||
execsql {
|
||||
PRAGMA journal_mode = PERSIST;
|
||||
PRAGMA page_size = 1024;
|
||||
CREATE TABLE t1(a, b);
|
||||
BEGIN;
|
||||
CREATE TABLE t1(a, b);
|
||||
CREATE TABLE t2(a, b);
|
||||
CREATE TABLE t3(a, b);
|
||||
COMMIT;
|
||||
}
|
||||
file size test.db-journal
|
||||
} [expr $sectorsize > 65536 ? 65536 : $sectorsize]
|
||||
|
||||
do_test pager1-10.$sectorsize.2 {
|
||||
execsql {
|
||||
INSERT INTO t3 VALUES(a_string(300), a_string(300));
|
||||
INSERT INTO t3 SELECT * FROM t3; /* 2 */
|
||||
INSERT INTO t3 SELECT * FROM t3; /* 4 */
|
||||
INSERT INTO t3 SELECT * FROM t3; /* 8 */
|
||||
INSERT INTO t3 SELECT * FROM t3; /* 16 */
|
||||
INSERT INTO t3 SELECT * FROM t3; /* 32 */
|
||||
}
|
||||
} {}
|
||||
|
||||
do_test pager1-10.$sectorsize.3 {
|
||||
db close
|
||||
sqlite3 db test.db
|
||||
execsql {
|
||||
PRAGMA cache_size = 10;
|
||||
BEGIN;
|
||||
}
|
||||
recursive_select 32 t3 {db eval "INSERT INTO t2 VALUES(1, 2)"}
|
||||
execsql {
|
||||
COMMIT;
|
||||
SELECT * FROM t2;
|
||||
}
|
||||
} {1 2}
|
||||
|
||||
do_test pager1-10.$sectorsize.4 {
|
||||
execsql {
|
||||
CREATE TABLE t6(a, b);
|
||||
CREATE TABLE t7(a, b);
|
||||
CREATE TABLE t5(a, b);
|
||||
DROP TABLE t6;
|
||||
DROP TABLE t7;
|
||||
}
|
||||
if {$eff==65536} breakpoint
|
||||
execsql {
|
||||
BEGIN;
|
||||
CREATE TABLE t6(a, b);
|
||||
}
|
||||
recursive_select 32 t3 {db eval "INSERT INTO t5 VALUES(1, 2)"}
|
||||
execsql {
|
||||
COMMIT;
|
||||
SELECT * FROM t5;
|
||||
}
|
||||
} {1 2}
|
||||
|
||||
}
|
||||
db close
|
||||
|
||||
tv sectorsize 4096
|
||||
do_test pager1.10.x.1 {
|
||||
faultsim_delete_and_reopen
|
||||
execsql {
|
||||
PRAGMA page_size = 1024;
|
||||
CREATE TABLE t1(x);
|
||||
}
|
||||
for {set i 0} {$i<30} {incr i} {
|
||||
execsql { INSERT INTO t1 VALUES(zeroblob(900)) }
|
||||
}
|
||||
file size test.db
|
||||
} {32768}
|
||||
do_test pager1.10.x.2 {
|
||||
execsql {
|
||||
CREATE TABLE t2(x);
|
||||
DROP TABLE t2;
|
||||
}
|
||||
file size test.db
|
||||
} {33792}
|
||||
do_test pager1.10.x.3 {
|
||||
execsql {
|
||||
BEGIN;
|
||||
CREATE TABLE t2(x);
|
||||
}
|
||||
recursive_select 30 t1
|
||||
execsql {
|
||||
CREATE TABLE t3(x);
|
||||
COMMIT;
|
||||
}
|
||||
} {}
|
||||
|
||||
db close
|
||||
tv delete
|
||||
|
||||
@@ -1800,7 +1893,6 @@ do_test pager1-21.1 {
|
||||
db2 close
|
||||
tv delete
|
||||
do_test pager1-21.2 {
|
||||
breakpoint
|
||||
testvfs tv -iversion 1
|
||||
sqlite3 db2 test.db -vfs tv
|
||||
catchsql { SELECT * FROM ko } db2
|
||||
@@ -1857,6 +1949,10 @@ tv delete
|
||||
# pager1-23.5.*: Try to set various different journal modes with an
|
||||
# in-memory database (only MEMORY and OFF should work).
|
||||
#
|
||||
# pager1-23.6.*: Try to set locking_mode=normal on an in-memory database
|
||||
# (doesn't work - in-memory databases always use
|
||||
# locking_mode=exclusive).
|
||||
#
|
||||
do_test pager1-23.1.1 {
|
||||
faultsim_delete_and_reopen
|
||||
execsql {
|
||||
@@ -1937,19 +2033,110 @@ foreach {tn mode possible} {
|
||||
execsql "PRAGMA journal_mode = $mode"
|
||||
} [if $possible {list $mode} {list memory}]
|
||||
}
|
||||
do_test pager1-23.8.1 {
|
||||
do_test pager1-23.6.1 {
|
||||
execsql {PRAGMA locking_mode = normal}
|
||||
} {exclusive}
|
||||
do_test pager1-23.8.2 {
|
||||
do_test pager1-23.6.2 {
|
||||
execsql {PRAGMA locking_mode = exclusive}
|
||||
} {exclusive}
|
||||
do_test pager1-23.8.3 {
|
||||
do_test pager1-23.6.3 {
|
||||
execsql {PRAGMA locking_mode}
|
||||
} {exclusive}
|
||||
do_test pager1-23.8.4 {
|
||||
do_test pager1-23.6.4 {
|
||||
execsql {PRAGMA main.locking_mode}
|
||||
} {exclusive}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
do_test pager1-24.1.1 {
|
||||
faultsim_delete_and_reopen
|
||||
db func a_string a_string
|
||||
execsql {
|
||||
PRAGMA cache_size = 10;
|
||||
PRAGMA auto_vacuum = FULL;
|
||||
CREATE TABLE x1(x, y, z, PRIMARY KEY(y, z));
|
||||
CREATE TABLE x2(x, y, z, PRIMARY KEY(y, z));
|
||||
INSERT INTO x2 VALUES(a_string(400), a_string(500), a_string(600));
|
||||
INSERT INTO x2 SELECT a_string(600), a_string(400), a_string(500) FROM x2;
|
||||
INSERT INTO x2 SELECT a_string(500), a_string(600), a_string(400) FROM x2;
|
||||
INSERT INTO x2 SELECT a_string(400), a_string(500), a_string(600) FROM x2;
|
||||
INSERT INTO x2 SELECT a_string(600), a_string(400), a_string(500) FROM x2;
|
||||
INSERT INTO x2 SELECT a_string(500), a_string(600), a_string(400) FROM x2;
|
||||
INSERT INTO x2 SELECT a_string(400), a_string(500), a_string(600) FROM x2;
|
||||
INSERT INTO x1 SELECT * FROM x2;
|
||||
}
|
||||
} {}
|
||||
proc recursive_select {id {script {}}} {
|
||||
set cnt 0
|
||||
db eval {SELECT rowid, x,y,z FROM x2 WHERE rowid = ($id-1)} {
|
||||
recursive_select $rowid $script
|
||||
incr cnt
|
||||
}
|
||||
if {$cnt==0} { eval $script }
|
||||
}
|
||||
do_test pager1-24.1.2 {
|
||||
execsql {
|
||||
BEGIN;
|
||||
DELETE FROM x1 WHERE rowid<32;
|
||||
}
|
||||
recursive_select 64
|
||||
} {}
|
||||
do_test pager1-24.1.3 {
|
||||
execsql {
|
||||
UPDATE x1 SET z = a_string(300) WHERE rowid>40;
|
||||
COMMIT;
|
||||
PRAGMA integrity_check;
|
||||
SELECT count(*) FROM x1;
|
||||
}
|
||||
} {ok 33}
|
||||
|
||||
do_test pager1-24.1.4 {
|
||||
execsql {
|
||||
DELETE FROM x1;
|
||||
INSERT INTO x1 SELECT * FROM x2;
|
||||
BEGIN;
|
||||
DELETE FROM x1 WHERE rowid<32;
|
||||
UPDATE x1 SET z = a_string(299) WHERE rowid>40;
|
||||
}
|
||||
recursive_select 64 {db eval COMMIT}
|
||||
execsql {
|
||||
PRAGMA integrity_check;
|
||||
SELECT count(*) FROM x1;
|
||||
}
|
||||
} {ok 33}
|
||||
|
||||
do_test pager1-24.1.5 {
|
||||
execsql {
|
||||
DELETE FROM x1;
|
||||
INSERT INTO x1 SELECT * FROM x2;
|
||||
}
|
||||
recursive_select 64 { db eval {CREATE TABLE x3(x, y, z)} }
|
||||
execsql { SELECT * FROM x3 }
|
||||
} {}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
do_test pager1-25-1 {
|
||||
faultsim_delete_and_reopen
|
||||
execsql {
|
||||
BEGIN;
|
||||
SAVEPOINT abc;
|
||||
CREATE TABLE t1(a, b);
|
||||
ROLLBACK TO abc;
|
||||
COMMIT;
|
||||
}
|
||||
db close
|
||||
} {}
|
||||
breakpoint
|
||||
do_test pager1-25-2 {
|
||||
faultsim_delete_and_reopen
|
||||
execsql {
|
||||
SAVEPOINT abc;
|
||||
CREATE TABLE t1(a, b);
|
||||
ROLLBACK TO abc;
|
||||
COMMIT;
|
||||
}
|
||||
db close
|
||||
} {}
|
||||
|
||||
finish_test
|
||||
|
||||
|
||||
Reference in New Issue
Block a user