1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Changes to the multiplex VFS to optionally (compiler define) allow

the "chunk extension" to overwrite the right-most chars of the filename 
instead of simply being appended.

FossilOrigin-Name: 07da0a0beffda324d28fd2768c542ff69d4dbff2
This commit is contained in:
shaneh
2010-11-08 19:16:16 +00:00
parent 0596beec9f
commit 050d09abdc
5 changed files with 131 additions and 51 deletions

View File

@ -17,6 +17,22 @@ source $testdir/malloc_common.tcl
set g_chunk_size 2147483648
set g_max_chunks 32
# This handles appending the chunk number
# to the end of the filename. if
# SQLITE_MULTIPLEX_EXT_OVWR is defined, then
# it overwrites the last 2 bytes of the
# file name with the chunk number.
proc multiplex_name {name chunk} {
if {$chunk==0} { return $name }
set num [format "%02d" $chunk]
ifcapable {multiplex_ext_overwrite} {
set name [string range $name 0 [expr [string length $name]-2-1]]
}
return $name$num
}
# This saves off the parameters and calls the
# underlying sqlite3_multiplex_set() API.
proc multiplex_set {chunk_size max_chunks} {
global g_chunk_size
global g_max_chunks
@ -25,16 +41,14 @@ proc multiplex_set {chunk_size max_chunks} {
sqlite3_multiplex_set $chunk_size $max_chunks
}
# This attempts to delete the base file and
# and files with the chunk extension.
proc multiplex_delete {name} {
global g_max_chunks
forcedelete $name
forcedelete $name-journal
forcedelete $name-wal
for {set i 1} {$i<$g_max_chunks} {incr i} {
set num [format "%04d" $i]
forcedelete $name-$num
forcedelete $name-journal-$num
forcedelete $name-wal-$num
for {set i 0} {$i<$g_max_chunks} {incr i} {
forcedelete [multiplex_name $name $i]
forcedelete [multiplex_name $name-journal $i]
forcedelete [multiplex_name $name-wal $i]
}
}
@ -58,7 +72,7 @@ do_test multiplex-1.10.1 { multiplex_set 32768 16 } {SQLITE_OK}
do_test multiplex-1.10.2 { multiplex_set 32768 -1 } {SQLITE_MISUSE}
do_test multiplex-1.10.3 { multiplex_set -1 16 } {SQLITE_MISUSE}
do_test multiplex-1.10.4 { multiplex_set 31 16 } {SQLITE_MISUSE}
do_test multiplex-1.10.5 { multiplex_set 32768 33 } {SQLITE_MISUSE}
do_test multiplex-1.10.5 { multiplex_set 32768 100 } {SQLITE_MISUSE}
do_test multiplex-1.11 { sqlite3_multiplex_shutdown } {SQLITE_OK}
@ -98,7 +112,7 @@ do_test multiplex-2.1.2 {
INSERT INTO t1 VALUES(2, randomblob(1100));
}
} {}
do_test multiplex-2.1.3 { file size test.db } {4096}
do_test multiplex-2.1.3 { file size [multiplex_name test.db 0] } {4096}
do_test multiplex-2.1.4 {
execsql { INSERT INTO t1 VALUES(3, randomblob(1100)) }
} {}
@ -106,7 +120,7 @@ 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 test.db } {6144}
do_test multiplex-2.2.3 { file size [multiplex_name test.db 0] } {6144}
do_test multiplex-2.3.1 {
sqlite3 db2 bak.db
@ -119,7 +133,7 @@ do_test multiplex-2.4.1 {
do_test multiplex-2.4.2 {
execsql { INSERT INTO t1 VALUES(3, randomblob(1100)) }
} {}
do_test multiplex-2.4.4 { file size test.db } {7168}
do_test multiplex-2.4.4 { file size [multiplex_name test.db 0] } {7168}
do_test multiplex-2.4.99 {
db close
sqlite3_multiplex_shutdown
@ -172,8 +186,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 test.db } [list $g_chunk_size]
do_test multiplex-2.5.10 { file size test.db-0001 } [list $g_chunk_size]
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.99 {
db close
@ -216,7 +230,7 @@ foreach jmode $all_journal_modes {
db eval {SELECT length(b) FROM t1 WHERE a=2}
} [list $g_chunk_size]
do_test multiplex-2.6.6.$sz.$jmode { file size test.db } [list $g_chunk_size]
do_test multiplex-2.6.6.$sz.$jmode { file size [multiplex_name test.db 0] } [list $g_chunk_size]
do_test multiplex-2.6.99.$sz.$jmode {
db close
@ -249,7 +263,7 @@ do_test multiplex-3.1.2 {
CREATE TABLE t1(a PRIMARY KEY, b);
INSERT INTO t1 VALUES(1, 'one');
}
file size test.db
file size [multiplex_name test.db 0]
} {3072}
do_test multiplex-3.1.3 {
sqlite3 db2 test.db
@ -283,7 +297,7 @@ do_test multiplex-3.2.1a {
} $db
}
list [file size test.db] [file size test2.db]
list [file size [multiplex_name test.db 0]] [file size [multiplex_name test2.db 0]]
} {2048 2048}
do_test multiplex-3.2.1b {