1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
# 2014-09-25
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
#
# This file contains tests for the "truncate" option in the multiplexor.
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set ::testprefix multiplex4
db close
sqlite3_shutdown
sqlite3_multiplex_initialize {} 0
# delete all filesl with the base name of $basename
#
proc multiplex_delete_db {basename} {
foreach file [glob -nocomplain $basename.*] {
forcedelete $file
}
}
# Return a sorted list of all files with the base name of $basename.
# Except, delete all text from the end of $basename through the NNN
# suffix on the end of the filename.
#
proc multiplex_file_list {basename} {
set x {}
foreach file [glob -nocomplain $basename.*] {
regsub "^$basename\\..*(\\d\\d\\d)\$" $file $basename.\\1 file
lappend x $file
}
return [lsort $x]
}
do_test multiplex4-1.0 {
multiplex_delete_db mx4test
sqlite3 db {file:mx4test.db?chunksize=10&truncate=1} -uri 1 -vfs multiplex
db eval {
CREATE TABLE t1(x);
INSERT INTO t1(x) VALUES(randomblob(250000));
}
multiplex_file_list mx4test
} {mx4test.001 mx4test.db}
do_test multiplex4-1.1 {
db eval {
DELETE FROM t1;
VACUUM;
}
multiplex_file_list mx4test
} {mx4test.db}
# NB: The PRAGMA multiplex_truncate command is implemented using the
# SQLITE_FCNTL_PRAGMA file-control...
#
# EVIDENCE-OF: R-12238-55120 Whenever a PRAGMA statement is parsed, an
# SQLITE_FCNTL_PRAGMA file control is sent to the open sqlite3_file
# object corresponding to the database file to which the pragma
# statement refers.
#
do_test multiplex4-1.2 {
db eval {PRAGMA multiplex_truncate}
} {on}
do_test multiplex4-1.3 {
db eval {PRAGMA multiplex_truncate=off}
} {off}
do_test multiplex4-1.4 {
db eval {PRAGMA multiplex_truncate}
} {off}
do_test multiplex4-1.5 {
db eval {PRAGMA multiplex_truncate=on}
} {on}
do_test multiplex4-1.6 {
db eval {PRAGMA multiplex_truncate}
} {on}
do_test multiplex4-1.7 {
db eval {PRAGMA multiplex_truncate=0}
} {off}
do_test multiplex4-1.8 {
db eval {PRAGMA multiplex_truncate=1}
} {on}
do_test multiplex4-1.9 {
db eval {PRAGMA multiplex_truncate=0}
} {off}
# EVIDENCE-OF: R-26188-08449 If the SQLITE_FCNTL_PRAGMA file control
# returns SQLITE_OK, then the parser assumes that the VFS has handled
# the PRAGMA itself and the parser generates a no-op prepared statement
# if result string is NULL, or that returns a copy of the result string
# if the string is non-NULL.
#
do_test multiplex4-1.9-explain {
db eval {EXPLAIN PRAGMA multiplex_truncate=0;}
} {/String8 \d \d \d off/}
do_test multiplex4-1.10 {
db eval {
INSERT INTO t1(x) VALUES(randomblob(250000));
}
multiplex_file_list mx4test
} {mx4test.001 mx4test.db}
do_test multiplex4-1.11 {
db eval {
DELETE FROM t1;
VACUUM;
}
multiplex_file_list mx4test
} {mx4test.001 mx4test.db}
do_test multiplex4-1.12 {
db eval {
PRAGMA multiplex_truncate=ON;
DROP TABLE t1;
VACUUM;
}
multiplex_file_list mx4test
} {mx4test.db}
catch { db close }
forcedelete mx4test.db
sqlite3_multiplex_shutdown
finish_test
|