| Index: third_party/sqlite/src/test/multiplex.test
|
| diff --git a/third_party/sqlite/src/test/multiplex.test b/third_party/sqlite/src/test/multiplex.test
|
| index 518cbe37a0d662765ce3e85b3f28a996ef567a41..5db56f264ace22ae634e14628faf5ed10574e78a 100644
|
| --- a/third_party/sqlite/src/test/multiplex.test
|
| +++ b/third_party/sqlite/src/test/multiplex.test
|
| @@ -14,6 +14,16 @@ set testdir [file dirname $argv0]
|
| source $testdir/tester.tcl
|
| source $testdir/malloc_common.tcl
|
|
|
| +# The tests in this file assume that SQLite is compiled without
|
| +# ENABLE_8_3_NAMES.
|
| +#
|
| +ifcapable 8_3_names {
|
| + puts -nonewline "SQLite compiled with SQLITE_ENABLE_8_3_NAMES. "
|
| + puts "Skipping tests multiplex-*."
|
| + finish_test
|
| + return
|
| +}
|
| +
|
| set g_chunk_size [ expr ($::SQLITE_MAX_PAGE_SIZE*16384) ]
|
| set g_max_chunks 32
|
|
|
| @@ -24,7 +34,7 @@ set g_max_chunks 32
|
| # file name with the chunk number.
|
| proc multiplex_name {name chunk} {
|
| if {$chunk==0} { return $name }
|
| - set num [format "%02d" $chunk]
|
| + set num [format "%03d" $chunk]
|
| ifcapable {multiplex_ext_overwrite} {
|
| set name [string range $name 0 [expr [string length $name]-2-1]]
|
| }
|
| @@ -49,6 +59,7 @@ proc multiplex_set {db name chunk_size max_chunks} {
|
| # and files with the chunk extension.
|
| proc multiplex_delete {name} {
|
| global g_max_chunks
|
| + forcedelete $name
|
| for {set i 0} {$i<$g_max_chunks} {incr i} {
|
| forcedelete [multiplex_name $name $i]
|
| forcedelete [multiplex_name $name-journal $i]
|
| @@ -57,6 +68,12 @@ proc multiplex_delete {name} {
|
| }
|
|
|
| db close
|
| +sqlite3_shutdown
|
| +test_sqlite3_log xLog
|
| +proc xLog {error_code msg} {
|
| + lappend ::log $error_code $msg
|
| +}
|
| +unset -nocomplain log
|
|
|
| multiplex_delete test.db
|
| multiplex_delete test2.db
|
| @@ -78,10 +95,9 @@ do_test multiplex-1.8 { sqlite3_multiplex_shutdown } {SQLITE_OK}
|
| do_test multiplex-1.9.1 { sqlite3_multiplex_initialize "" 1 } {SQLITE_OK}
|
| do_test multiplex-1.9.2 { sqlite3 db test.db } {}
|
| do_test multiplex-1.9.3 { multiplex_set db main 32768 16 } {SQLITE_OK}
|
| -do_test multiplex-1.9.4 { multiplex_set db main 32768 -1 } {SQLITE_MISUSE}
|
| -do_test multiplex-1.9.5 { multiplex_set db main -1 16 } {SQLITE_MISUSE}
|
| +do_test multiplex-1.9.4 { multiplex_set db main 32768 -1 } {SQLITE_OK}
|
| do_test multiplex-1.9.6 { multiplex_set db main 31 16 } {SQLITE_OK}
|
| -do_test multiplex-1.9.7 { multiplex_set db main 32768 100 } {SQLITE_MISUSE}
|
| +do_test multiplex-1.9.7 { multiplex_set db main 32768 100 } {SQLITE_OK}
|
| do_test multiplex-1.9.8 { multiplex_set db main 1073741824 1 } {SQLITE_OK}
|
| do_test multiplex-1.9.9 { db close } {}
|
| do_test multiplex-1.9.10 { sqlite3_multiplex_shutdown } {SQLITE_OK}
|
| @@ -89,10 +105,9 @@ do_test multiplex-1.9.10 { sqlite3_multiplex_shutdown } {SQLITE_OK}
|
| do_test multiplex-1.10.1 { sqlite3_multiplex_initialize "" 1 } {SQLITE_OK}
|
| do_test multiplex-1.10.2 { sqlite3 db test.db } {}
|
| do_test multiplex-1.10.3 { lindex [ catchsql { SELECT multiplex_control(2, 32768); } ] 0 } {0}
|
| -do_test multiplex-1.10.4 { lindex [ catchsql { SELECT multiplex_control(3, -1); } ] 0 } {1}
|
| -do_test multiplex-1.10.5 { lindex [ catchsql { SELECT multiplex_control(2, -1); } ] 0 } {1}
|
| +do_test multiplex-1.10.4 { lindex [ catchsql { SELECT multiplex_control(3, -1); } ] 0 } {0}
|
| do_test multiplex-1.10.6 { lindex [ catchsql { SELECT multiplex_control(2, 31); } ] 0 } {0}
|
| -do_test multiplex-1.10.7 { lindex [ catchsql { SELECT multiplex_control(3, 100); } ] 0 } {1}
|
| +do_test multiplex-1.10.7 { lindex [ catchsql { SELECT multiplex_control(3, 100); } ] 0 } {0}
|
| do_test multiplex-1.10.8 { lindex [ catchsql { SELECT multiplex_control(2, 1073741824); } ] 0 } {0}
|
| do_test multiplex-1.10.9 { db close } {}
|
| do_test multiplex-1.10.10 { sqlite3_multiplex_shutdown } {SQLITE_OK}
|
| @@ -146,8 +161,12 @@ do_test multiplex-1.13.7 { sqlite3_multiplex_shutdown }
|
| sqlite3_multiplex_initialize "" 1
|
| multiplex_set db main 32768 16
|
|
|
| +forcedelete test.x
|
| +foreach f [glob -nocomplain {test.x*[0-9][0-9][0-9]}] {
|
| + forcedelete $f
|
| +}
|
| do_test multiplex-2.1.2 {
|
| - sqlite3 db test.db
|
| + sqlite3 db test.x
|
| execsql {
|
| PRAGMA page_size=1024;
|
| PRAGMA auto_vacuum=OFF;
|
| @@ -159,7 +178,7 @@ do_test multiplex-2.1.2 {
|
| INSERT INTO t1 VALUES(2, randomblob(1100));
|
| }
|
| } {}
|
| -do_test multiplex-2.1.3 { file size [multiplex_name test.db 0] } {4096}
|
| +do_test multiplex-2.1.3 { file size [multiplex_name test.x 0] } {4096}
|
| do_test multiplex-2.1.4 {
|
| execsql { INSERT INTO t1 VALUES(3, randomblob(1100)) }
|
| } {}
|
| @@ -167,31 +186,40 @@ do_test multiplex-2.1.4 {
|
| do_test multiplex-2.2.1 {
|
| execsql { INSERT INTO t1 VALUES(3, randomblob(1100)) }
|
| } {}
|
| -do_test multiplex-2.2.3 { file size [multiplex_name test.db 0] } {6144}
|
| +do_test multiplex-2.2.3 { file size [multiplex_name test.x 0] } {6144}
|
|
|
| do_test multiplex-2.3.1 {
|
| - sqlite3 db2 test2.db
|
| + sqlite3 db2 test2.x
|
| db2 close
|
| } {}
|
|
|
|
|
| +unset -nocomplain ::log
|
| do_test multiplex-2.4.1 {
|
| sqlite3_multiplex_shutdown
|
| } {SQLITE_MISUSE}
|
| do_test multiplex-2.4.2 {
|
| execsql { INSERT INTO t1 VALUES(3, randomblob(1100)) }
|
| } {}
|
| -do_test multiplex-2.4.4 { file size [multiplex_name test.db 0] } {7168}
|
| -do_test multiplex-2.4.99 {
|
| +do_test multiplex-2.4.3 {
|
| + set ::log
|
| +} {SQLITE_MISUSE {sqlite3_multiplex_shutdown() called while database connections are still open}}
|
| +do_test multiplex-2.4.4 { file size [multiplex_name test.x 0] } {7168}
|
| +do_test multiplex-2.4.5 {
|
| db close
|
| + sqlite3 db test.x
|
| + db eval vacuum
|
| + db close
|
| + glob test.x*
|
| +} {test.x}
|
| +do_test multiplex-2.4.99 {
|
| sqlite3_multiplex_shutdown
|
| } {SQLITE_OK}
|
|
|
| -
|
| do_test multiplex-2.5.1 {
|
| - multiplex_delete test.db
|
| + multiplex_delete test.x
|
| sqlite3_multiplex_initialize "" 1
|
| - sqlite3 db test.db
|
| + sqlite3 db test.x
|
| multiplex_set db main 4096 16
|
| } {SQLITE_OK}
|
|
|
| @@ -236,8 +264,8 @@ do_test multiplex-2.5.8 {
|
| db eval {SELECT a,length(b) FROM t1 WHERE a=4}
|
| } {4 4000}
|
|
|
| -do_test multiplex-2.5.9 { file size [multiplex_name test.db 0] } [list $g_chunk_size]
|
| -do_test multiplex-2.5.10 { file size [multiplex_name test.db 1] } [list $g_chunk_size]
|
| +do_test multiplex-2.5.9 { file size [multiplex_name test.x 0] } [list $g_chunk_size]
|
| +do_test multiplex-2.5.10 { file size [multiplex_name test.x 1] } [list $g_chunk_size]
|
|
|
| do_test multiplex-2.5.99 {
|
| db close
|
| @@ -514,7 +542,7 @@ do_test multiplex-5.4.1 {
|
| file mkdir test.db
|
| list [catch { sqlite3 db test.db } msg] $msg
|
| } {1 {unable to open database file}}
|
| -catch { file delete test.db }
|
| +catch { delete_file test.db }
|
|
|
| do_faultsim_test multiplex-5.5 -prep {
|
| catch { sqlite3_multiplex_shutdown }
|
| @@ -523,49 +551,51 @@ do_faultsim_test multiplex-5.5 -prep {
|
| multiplex_set db main 32768 16
|
| }
|
|
|
| -# test that mismatch filesize is detected
|
| -#
|
| -# Do not run this test if $::G(perm:presql) is set. If it is set, then the
|
| -# expected IO error will occur within the Tcl [sqlite3] wrapper, not within
|
| -# the first SQL statement executed below. This breaks the test case.
|
| -#
|
| -if {0==[info exists ::G(perm:presql)] || $::G(perm:presql) == ""} {
|
| - set all_journal_modes {delete persist truncate memory off}
|
| - foreach jmode $all_journal_modes {
|
| - do_test multiplex-5.6.1.$jmode {
|
| - sqlite3_multiplex_shutdown
|
| - multiplex_delete test.db
|
| - sqlite3 db test.db
|
| - db eval {
|
| - PRAGMA page_size = 1024;
|
| - PRAGMA auto_vacuum = off;
|
| - }
|
| - db eval "PRAGMA journal_mode = $jmode;"
|
| - } $jmode
|
| - do_test multiplex-5.6.2.$jmode {
|
| - execsql {
|
| - CREATE TABLE t1(a, b);
|
| - INSERT INTO t1 VALUES(1, randomblob(15000));
|
| - INSERT INTO t1 VALUES(2, randomblob(15000));
|
| - INSERT INTO t1 VALUES(3, randomblob(15000));
|
| - INSERT INTO t1 VALUES(4, randomblob(15000));
|
| - INSERT INTO t1 VALUES(5, randomblob(15000));
|
| - }
|
| - db close
|
| - sqlite3_multiplex_initialize "" 1
|
| - sqlite3 db test.db
|
| - multiplex_set db main 4096 16
|
| - } {SQLITE_OK}
|
| - do_test multiplex-5.6.3.$jmode {
|
| - catchsql {
|
| - INSERT INTO t1 VALUES(6, randomblob(15000));
|
| - }
|
| - } {1 {disk I/O error}}
|
| - do_test multiplex-5.6.4.$jmode {
|
| - db close
|
| - } {}
|
| +#-------------------------------------------------------------------------
|
| +# Test that you can vacuum a multiplex'ed DB.
|
| +
|
| +ifcapable vacuum {
|
| +
|
| +sqlite3_multiplex_shutdown
|
| +do_test multiplex-6.0.0 {
|
| + multiplex_delete test.db
|
| + multiplex_delete test.x
|
| + sqlite3_multiplex_initialize "" 1
|
| + sqlite3 db test.x
|
| + multiplex_set db main 4096 16
|
| +} {SQLITE_OK}
|
| +
|
| +do_test multiplex-6.1.0 {
|
| + execsql {
|
| + PRAGMA page_size=1024;
|
| + PRAGMA journal_mode=DELETE;
|
| + PRAGMA auto_vacuum=OFF;
|
| + }
|
| + execsql {
|
| + CREATE TABLE t1(a, b);
|
| + INSERT INTO t1 VALUES(1, randomblob($g_chunk_size));
|
| + INSERT INTO t1 VALUES(2, randomblob($g_chunk_size));
|
| }
|
| +} {}
|
| +do_test multiplex-6.2.1 { file size [multiplex_name test.x 0] } [list $g_chunk_size]
|
| +do_test multiplex-6.2.2 { file size [multiplex_name test.x 1] } [list $g_chunk_size]
|
| +
|
| +do_test multiplex-6.3.0 {
|
| + execsql { VACUUM }
|
| +} {}
|
| +
|
| +do_test multiplex-6.99 {
|
| + db close
|
| + multiplex_delete test.x
|
| + sqlite3_multiplex_shutdown
|
| +} {SQLITE_OK}
|
| +
|
| }
|
|
|
| +
|
| +catch { db close }
|
| catch { sqlite3_multiplex_shutdown }
|
| +sqlite3_shutdown
|
| +test_sqlite3_log
|
| +sqlite3_initialize
|
| finish_test
|
|
|