-C Sync\sup\sthe\sMSVC\smakefiles.
-D 2016-09-07T19:23:49.275
+C Merge\sselected\stest\sfixes\sfrom\strunk.
+D 2016-09-07T19:31:06.287
F Makefile.in cfd8fb987cd7a6af046daa87daa146d5aad0e088
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 6fef1e10792656c94fe1393092de6c8ba6ea1c88
F src/test_config.c 4d3d4a886416f369771d69a6dba926866deda788
F src/test_demovfs.c a0c3bdd45ed044115c2c9f7779e56eafff18741e
F src/test_devsym.c 4e58dec2602d8e139ca08659f62a62450587cb58
-F src/test_fs.c ac62ce7d5c0c23aa6932891cad5746945564c91c
+F src/test_fs.c e16cbe68d3b107e00a907c20a9a02629870eb69b
F src/test_func.c a2b4993da973b0ea60dd5d51a7066238ede8c329
F src/test_hexio.c 1d4469ca61ab202a1fcec6543f584d2407205e8d
F src/test_init.c 4413c211a94b62157ca4c145b3f27c497f03c664
F src/test_thread.c 911d15fb14e19c0c542bdc8aabf981c2f10a4858
F src/test_vfs.c f0186261a24de2671d080bcd8050732f0cb64f6e
F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698
-F src/test_windirent.c 8f5fada630348558d5745b334702f301da1ffc61
-F src/test_windirent.h b12055cab6227f7be10f5c19296f67c60cc5e2a5
+F src/test_windirent.c 600398db0198ca1c77ca183831bf456746b6f5c4
+F src/test_windirent.h 7edc57e2faa727026dbd5d010dd0e2e665d5aa01
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
F src/tokenize.c 3b29883b0ce4a6c6f643965b66b5ca6613178e59
F test/speed1p.explain d841e650a04728b39e6740296b852dccdca9b2cb
F test/speed1p.test b180e98609c7677382cf618c0ec9b69f789033a8
F test/speed2.test 53177056baf6556dcbdcf032bbdfc41c1aa74ded
-F test/speed3.test d32043614c08c53eafdc80f33191d5bd9b920523
+F test/speed3.test 694affeb9100526007436334cf7d08f3d74b85ef
F test/speed4.test abc0ad3399dcf9703abed2fff8705e4f8e416715
F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa
F test/speed4p.test 0e51908951677de5a969b723e03a27a1c45db38b
F test/vtabC.test 4528f459a13136f982e75614d120aef165f17292
F test/vtabD.test 05b3f1d77117271671089e48719524b676842e96
F test/vtabE.test d5024aa42754962f6bb0afd261681686488e7afe
-F test/vtabF.test fd5ad376f5a34fe0891df1f3cddb4fe7c3eb077e
-F test/vtabH.test 5f5157a1501d9889ec35c1a1832f69612dd31444
+F test/vtabF.test 1918844c7c902f6a16c8dacf1ec8f84886d6e78b
+F test/vtabH.test 97f61b0253260831af6232163f7852e2653baed6
F test/vtabI.test 751b07636700dbdea328e4265b6077ccd6811a3f
F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 7c2c0d1dceb6b49822e5f5c5e531744d2a4fd12c
-R 006a06e7e7d96117f2d9fa15f4e085b4
+P b3777e1f8e4c44155734b92061422ac96795be3d
+Q +328f79bb5713abbecaeb0ef3fb37f56a0946b915
+Q +3680f95ff34fdcf6a18a99268678a56e4be5a023
+Q +84de17bc688f1df2be1a34420470d1b16f8f4e56
+Q +a8546feec9388d96934b16e516a165cd37d32ce9
+Q +e4aeaa2bc73b57f1ef134cc4f54e2a652a20b5c9
+R 8ce338835ce07201af8e9c9e9593fb0d
U mistachkin
-Z f8e2239fba83cac018e472c48ce3c398
+Z b082ecd6cc5d3c88a483c74aaee891ff
-b3777e1f8e4c44155734b92061422ac96795be3d
\ No newline at end of file
+71866b367f32b5a4cd0c239747fa8e0a60e75698
\ No newline at end of file
char aWild[2] = { '\0', '\0' };
#if SQLITE_OS_WIN
- zRoot = sqlite3_mprintf("%s%c", getenv("SystemDrive"), '/');
+ const char *zDrive = windirent_getenv("fstreeDrive");
+ if( zDrive==0 ){
+ zDrive = windirent_getenv("SystemDrive");
+ }
+ zRoot = sqlite3_mprintf("%s%c", zDrive, '/');
nRoot = sqlite3Strlen30(zRoot);
- zPrefix = sqlite3_mprintf("%s", getenv("SystemDrive"));
+ zPrefix = sqlite3_mprintf("%s", zDrive);
nPrefix = sqlite3Strlen30(zPrefix);
#else
zRoot = "/";
#include "test_windirent.h"
+/*
+** Implementation of the POSIX getenv() function using the Win32 API.
+** This function is not thread-safe.
+*/
+const char *windirent_getenv(
+ const char *name
+){
+ static char value[32768]; /* Maximum length, per MSDN */
+ DWORD dwSize = sizeof(value) / sizeof(char); /* Size in chars */
+ DWORD dwRet; /* Value returned by GetEnvironmentVariableA() */
+
+ memset(value, 0, sizeof(value));
+ dwRet = GetEnvironmentVariableA(name, value, dwSize);
+ if( dwRet==0 || dwRet>dwSize ){
+ /*
+ ** The function call to GetEnvironmentVariableA() failed -OR-
+ ** the buffer is not large enough. Either way, return NULL.
+ */
+ return 0;
+ }else{
+ /*
+ ** The function call to GetEnvironmentVariableA() succeeded
+ ** -AND- the buffer contains the entire value.
+ */
+ return value;
+ }
+}
+
/*
** Implementation of the POSIX opendir() function using the MSVCRT.
*/
/* TODO: Remove this if Unix-style root paths are not used. */
if( sqlite3_stricmp(dirname, "/")==0 ){
- dirname = getenv("SystemDrive");
+ dirname = windirent_getenv("SystemDrive");
}
_snprintf(data.name, namesize, "%s\\*", dirname);
DIRENT d_next; /* DIRENT constructed based on "_findnext". */
};
+/*
+** Provide the function prototype for the POSIX compatiable getenv()
+** function. This function is not thread-safe.
+*/
+
+extern const char *windirent_getenv(const char *name);
+
/*
** Finally, we can provide the function prototypes for the opendir(),
** readdir(), readdir_r(), and closedir() POSIX functions.
puts "Normal : Read $stats2(read), wrote $stats2(write)"
}
-proc reset_db {} {
+proc speed3_reset_db {} {
db close
sqlite3 db test.db
db eval {
}
forcedelete test2.db test2.db-journal
-reset_db
+speed3_reset_db
# Set up a database in auto-vacuum mode and create a database schema.
#
# Delete all content in a table, one row at a time.
#
#io_log db
-reset_db
+speed3_reset_db
speed_trial speed3-1.incrvacuum $::NROW row {DELETE FROM main.t1 WHERE 1}
speed_trial speed3-1.normal $::NROW row {DELETE FROM aux.t1 WHERE 1}
io_log db
#
#db eval {PRAGMA incremental_vacuum(500000)}
populate_t1 db
-reset_db
+speed3_reset_db
speed_trial speed3-2.incrvacuum $::NROW row {SELECT c FROM main.t1}
speed_trial speed3-2.normal $::NROW row {SELECT c FROM aux.t1}
io_log db
# Register the echo module
register_echo_module [sqlite3_connection_pointer db]
-do_test vtabE-1.1 {
+do_test vtabF-1.1 {
execsql {
CREATE TABLE t1(a, b);
CREATE INDEX i1 ON t1(a);
SELECT b FROM t1 WHERE a IS NOT NULL;
}
} {110 111 112 113}
-do_test vtabE-1.2 {
+do_test vtabF-1.2 {
execsql {SELECT b FROM tv1 WHERE a IS NOT NULL}
} {110 111 112 113}
#-------------------------------------------------------------------------
#
-if {1} {
+if {$tcl_platform(platform)=="windows"} {
+ set drive [string range [pwd] 0 1]
+ set ::env(fstreeDrive) $drive
+}
+if {$tcl_platform(platform)!="windows" || \
+ [regexp -nocase -- {^[A-Z]:} $drive]} {
reset_db
register_fs_module db
do_execsql_test 3.0 {
proc list_root_files {} {
if {$::tcl_platform(platform) eq "windows"} {
set res [list]
- foreach name [glob -directory $::env(SystemDrive)/ -- *] {
+ foreach name [glob -directory $::env(fstreeDrive)/ -- *] {
if {[string index [file tail $name] 0] eq "."} continue
lappend res $name
}
}
}
+ # Read the first 5 entries from the root directory. Except, ignore
+ # files that contain the "$" character in their names as these are
+ # special files on some Windows platforms.
+ #
+ set res [list]
+ set root_files [list_root_files]
+ set num_root_files [llength $root_files]
+ set lim_root_files [expr {$num_root_files > 5 ? 5 : $num_root_files}]
+ foreach p [lrange $root_files 0 [expr {$lim_root_files - 1}]] {
+ if {$::tcl_platform(platform) eq "windows"} {
+ if {[regexp {\$} $p]} {incr lim_root_files -1} else {lappend res $p}
+ } else {
+ lappend res "/$p"
+ }
+ }
+ do_execsql_test 3.1 [subst {
+ SELECT path FROM fstree WHERE path NOT GLOB '*\$*' LIMIT $lim_root_files;
+ }] $res
+
# Read all entries in the current directory.
#
proc contents {pattern} {