-C Adjust\sskip-scan\scost\sestimates\sslightly\sso\sthat\sa\sfull\stable\sscan\sis\npreferred\sover\sa\sskip-scan\sto\sa\scolumn\swith\sonly\stwo\sdistinct\svalues.
-D 2014-09-23T01:40:59.122
+C Add\sthe\s"multiplex_truncate"\sPRAGMA\sto\sthe\smultiplexor\sextension,\sfor\nquerying\sand\ssetting\sthe\struncate\sflag\son\sa\sdatabase\sconnection.
+D 2014-09-23T18:30:00.961
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/test_journal.c f5c0a05b7b3d5930db769b5ee6c3766dc2221a64
F src/test_loadext.c a5251f956ab6af21e138dc1f9c0399394a510cb4
F src/test_malloc.c ba34143f941a9d74b30bbffc8818389bb73a1ca2
-F src/test_multiplex.c ca90057438b63bf0840ebb84d0ef050624519a76
+F src/test_multiplex.c caadb62cc777268b4f8fb94d5b27b80156c8f7c0
F src/test_multiplex.h c08e4e8f8651f0c5e0509b138ff4d5b43ed1f5d3
F src/test_mutex.c 293042d623ebba969160f471a82aa1551626454f
F src/test_onefile.c 0396f220561f3b4eedc450cef26d40c593c69a25
F test/multiplex.test efd015ca0b5b4a57dc9535b8feb1273eebeadb60
F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101
+F test/multiplex4.test d3e8a5a522c51cbf3ed1c5b0bd496be02c29d7b1
F test/mutex1.test 78b2b9bb320e51d156c4efdb71b99b051e7a4b41
F test/mutex2.test bfeaeac2e73095b2ac32285d2756e3a65e681660
F test/nan.test e9648b9d007c7045242af35e11a984d4b169443a
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 7609744014c6a84a8379794a0351a2e9626ec86b
-R cb94e4a1db7c56387373fb77d2698ee3
+P ae9a42b268ad3f7d21a5813bb931e795c6917014
+R 38a39c43ba2ffbcd445b1883953d7c57
U drh
-Z a13a3c1c4006b80e078cd097de2cdb1a
+Z 9797dd2e522d2cafa5364dec0ef721e8
/* no-op these */
rc = SQLITE_OK;
break;
+ case SQLITE_FCNTL_PRAGMA: {
+ char **aFcntl = (char**)pArg;
+ if( aFcntl[1] && sqlite3_stricmp(aFcntl[1],"multiplex_truncate")==0 ){
+ if( aFcntl[2] && aFcntl[2][0] ){
+ if( sqlite3_stricmp(aFcntl[2], "on")==0
+ || sqlite3_stricmp(aFcntl[2], "1")==0 ){
+ pGroup->bTruncate = 1;
+ }else
+ if( sqlite3_stricmp(aFcntl[2], "off")==0
+ || sqlite3_stricmp(aFcntl[2], "0")==0 ){
+ pGroup->bTruncate = 0;
+ }
+ }
+ aFcntl[0] = sqlite3_mprintf(pGroup->bTruncate ? "on" : "off");
+ rc = SQLITE_OK;
+ break;
+ }
+ /* If the multiplexor does not handle the pragma, pass it through
+ ** into the default case. */
+ }
default:
pSubOpen = multiplexSubOpen(pGroup, 0, &rc, NULL, 0);
if( pSubOpen ){
--- /dev/null
+# 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}
+
+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}
+
+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