| 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 | 
|  |