Version History
-1.0.83.0 - December XX, 2012 (release scheduled)
+1.0.85.0 - March XX, 2013 (release scheduled)
-
-
- Updated to SQLite 3.7.15. +
- Updated to SQLite 3.7.16. +
- Add static Execute method to the SQLiteCommand class. +
- Add public constructor to the SQLiteDataAdapter class that allows passing the parseViaFramework parameter to the SQLiteConnection constructor. +
- When built with the CHECK_STATE compile-time option, skip throwing exceptions from the SQLiteDataReader class when the object is being disposed. +
1.0.84.0 - January 9, 2013
+-
+
- Updated to SQLite 3.7.15.2. +
- Explicitly dispose of all SQLiteCommand objects managed by the DbDataAdapter class. Fix for [6434e23a0f]. +
- Add Cancel method to the SQLiteConnection class to interrupt a long running query. +
- Improve thread safety of the SQLiteLog.LogMessage method. +
1.0.83.0 - December 29, 2012
+-
+
- Updated to SQLite 3.7.15.1.
- Add Visual Studio 2012 support to all the applicable solution/project files, their associated supporting files, and the test suite.
- Add Visual Studio 2012 support to the redesigned designer support installer.
- Allow opened connections to skip adding the extension functions included in the interop assembly via the new NoExtensionFunctions connection flag.
- Support loading of SQLite extensions via the new EnableExtensions and LoadExtension methods of the SQLiteConnection class. Pursuant to [17045010df]. +
- Remove one set of surrounding single or double quotes from property names and values parsed from the connection string. Fix for [b4cc611998]. +
- Modify parsing of connection strings to allow property names and values to be quoted. ** Potentially Incompatible Change ** +
- Add ParseViaFramework property to the SQLiteConnection class to allow the built-in (i.e. framework provided) connection string parser to be used when opening a connection. Pursuant to [b4cc611998].
- Add notifications before and after any connection is opened and closed, as well as other related notifications, via the new static Changed event.
- Add an overload of the SQLiteLog.LogMessage method that takes a single string parameter.
- Add an overload of the SQLiteConnection.LogMessage method that takes a SQLiteErrorCode parameter.
- All applicable calls into the SQLite core library now return a SQLiteErrorCode instead of an integer error code.
- Make sure the error code of the SQLiteException class gets serialized. @@ -61,15 +78,19 @@
- The public constructor for the SQLiteException now takes a SQLiteErrorCode instead of an integer error code. ** Potentially Incompatible Change **
- The ErrorCode property of the SQLiteException is now an Int32, to allow the property inherited from the base class to be properly overridden. ** Potentially Incompatible Change **
- The ErrorCode field of the LogEventArgs is now an object instead of an integer. ** Potentially Incompatible Change **
- The names and messages associated with the SQLiteErrorCode enumeration values have been normalized to match those in the SQLite core library. ** Potentially Incompatible Change **
- Implement more robust locking semantics for the CriticalHandle derived classes when compiled for the .NET Compact Framework. -
- Cache column indexes are they are looked up when using the SQLiteDataReader to improve performance. +
- Cache column indexes as they are looked up when using the SQLiteDataReader to improve performance.
- Prevent the SQLiteConnection.Close method from throwing non-fatal exceptions during its disposal.
- Rename the interop assembly functions sqlite3_cursor_rowid, sqlite3_context_collcompare, sqlite3_context_collseq, sqlite3_cursor_rowid, and sqlite3_table_cursor to include an "_interop" suffix. ** Potentially Incompatible Change **
- Prevent the LastInsertRowId, MemoryUsed, and MemoryHighwater connection properties from throwing NotSupportedException when running on the .NET Compact Framework. Fix for [dd45aba387]. +
- Improve automatic detection of the sqlite3_close_v2 function when compiled to use the standard SQLite library.
- Add protection against ThreadAbortException asynchronously interrupting native resource initialization and finalization. +
- Add native logging callback for use with the sqlite3_log function to the interop assembly, enabled via the INTEROP_LOG preprocessor definition. +
- Add various diagnostic messages to the interop assembly, enabled via flags in the INTEROP_DEBUG preprocessor definition. +
- Further enhancements to the build and test automation.
- Add test automation for the Windows CE binaries.
1.0.82.0 - September 3, 2012
- Updated to SQLite 3.7.14. Index: Doc/Extra/welcome.html ================================================================== --- Doc/Extra/welcome.html +++ Doc/Extra/welcome.html @@ -158,11 +158,11 @@
- [[SQLITE_FCNTL_BUSYHANDLER]] ** ^This file-control may be invoked by SQLite on the database file handle ** shortly after it is opened in order to provide a custom VFS with access ** to the connections busy-handler callback. The argument is of type (void **) @@ -1432,10 +1432,20 @@ ** to a function of type (int (*)(void *)). In order to invoke the connections ** busy-handler, this function should be invoked with the second (void *) in ** the array as the only argument. If it returns non-zero, then the operation ** should be retried. If it returns zero, the custom VFS should abandon the ** current operation. +** +**
- [[SQLITE_FCNTL_TEMPFILENAME]]
+** ^Application can invoke this file-control to have SQLite generate a
+** temporary filename using the same algorithm that is followed to generate
+** temporary filenames for TEMP tables and other internal uses. The
+** argument should be a char** which will be filled with the filename
+** written into memory obtained from [sqlite3_malloc()]. The caller should
+** invoke [sqlite3_free()] on the result to avoid a memory leak.
+**
+**
*/
#define SQLITE_FCNTL_LOCKSTATE 1
#define SQLITE_GET_LOCKPROXYFILE 2
#define SQLITE_SET_LOCKPROXYFILE 3
#define SQLITE_LAST_ERRNO 4
@@ -1448,10 +1458,11 @@
#define SQLITE_FCNTL_OVERWRITE 11
#define SQLITE_FCNTL_VFSNAME 12
#define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13
#define SQLITE_FCNTL_PRAGMA 14
#define SQLITE_FCNTL_BUSYHANDLER 15
+#define SQLITE_FCNTL_TEMPFILENAME 16
/*
** CAPI3REF: Mutex Handle
**
** The mutex module within SQLite defines [sqlite3_mutex] to be an
@@ -2145,11 +2156,11 @@
** database connection is opened. By default, URI handling is globally
** disabled. The default value may be changed by compiling with the
** [SQLITE_USE_URI] symbol defined.
**
** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]]
- SQLITE_CONFIG_COVERING_INDEX_SCAN -**
- This option taks a single integer argument which is interpreted as +**
- This option takes a single integer argument which is interpreted as ** a boolean in order to enable or disable the use of covering indices for ** full table scans in the query optimizer. The default setting is determined ** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on" ** if that compile-time option is omitted. ** The ability to disable the use of covering indices for full table scans @@ -2161,10 +2172,26 @@ ** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]] **
- SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE **
- These options are obsolete and should not be used by new code. ** They are retained for backwards compatibility but are now no-ops. ** +** +** [[SQLITE_CONFIG_SQLLOG]] +**
- SQLITE_CONFIG_SQLLOG +**
- This option is only available if sqlite is compiled with the +** SQLITE_ENABLE_SQLLOG pre-processor macro defined. The first argument should +** be a pointer to a function of type void(*)(void*,sqlite3*,const char*, int). +** The second should be of type (void*). The callback is invoked by the library +** in three separate circumstances, identified by the value passed as the +** fourth parameter. If the fourth parameter is 0, then the database connection +** passed as the second argument has just been opened. The third argument +** points to a buffer containing the name of the main database file. If the +** fourth parameter is 1, then the SQL statement that the third parameter +** points to has just been executed. Or, if the fourth parameter is 2, then +** the connection being passed as the second parameter is being closed. The +** third parameter is passed NULL In this case. +** */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ #define SQLITE_CONFIG_SERIALIZED 3 /* nil */ #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ @@ -2182,10 +2209,11 @@ #define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ #define SQLITE_CONFIG_URI 17 /* int */ #define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */ +#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ /* ** CAPI3REF: Database Connection Configuration Options ** ** These constants are the available integer configuration options that @@ -8439,10 +8467,12 @@ SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int); SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue); SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value); +SQLITE_PRIVATE int sqlite3BtreeNewDb(Btree *p); + /* ** The second parameter to sqlite3BtreeGetMeta or sqlite3BtreeUpdateMeta ** should be one of the following values. The integer values are assigned ** to constants so that the offset of the corresponding field in an ** SQLite database header may be found using the following formula: @@ -8953,11 +8983,11 @@ SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int); SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int); SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*); -SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3*,Vdbe*); +SQLITE_PRIVATE void sqlite3VdbeClearObject(sqlite3*,Vdbe*); SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*); SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int); SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*); #ifdef SQLITE_DEBUG @@ -9866,11 +9896,11 @@ int flags; /* Miscellaneous flags. See below */ i64 lastRowid; /* ROWID of most recent insert (see above) */ unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ int errCode; /* Most recent error code (SQLITE_*) */ int errMask; /* & result codes with this before returning */ - u8 dbOptFlags; /* Flags to enable/disable optimizations */ + u16 dbOptFlags; /* Flags to enable/disable optimizations */ u8 autoCommit; /* The auto-commit flag. */ u8 temp_store; /* 1: file 2: memory 0: default */ u8 mallocFailed; /* True if we have seen a malloc failure */ u8 dfltLockMode; /* Default locking-mode for attached dbs */ signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */ @@ -10011,11 +10041,12 @@ #define SQLITE_FactorOutConst 0x0008 /* Constant factoring */ #define SQLITE_IdxRealAsInt 0x0010 /* Store REAL as INT in indices */ #define SQLITE_DistinctOpt 0x0020 /* DISTINCT using indexes */ #define SQLITE_CoverIdxScan 0x0040 /* Covering index scans */ #define SQLITE_OrderByIdxJoin 0x0080 /* ORDER BY of joins via index */ -#define SQLITE_AllOpts 0x00ff /* All optimizations */ +#define SQLITE_SubqCoroutine 0x0100 /* Evaluate subqueries as coroutines */ +#define SQLITE_AllOpts 0xffff /* All optimizations */ /* ** Macros for testing whether or not optimizations are enabled or disabled. */ #ifndef SQLITE_OMIT_BUILTIN_TEST @@ -10188,23 +10219,11 @@ /* ** A "Collating Sequence" is defined by an instance of the following ** structure. Conceptually, a collating sequence consists of a name and ** a comparison routine that defines the order of that sequence. ** -** There may two separate implementations of the collation function, one -** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that -** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine -** native byte order. When a collation sequence is invoked, SQLite selects -** the version that will require the least expensive encoding -** translations, if any. -** -** The CollSeq.pUser member variable is an extra parameter that passed in -** as the first argument to the UTF-8 comparison function, xCmp. -** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function, -** xCmp16. -** -** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the +** If CollSeq.xCmp is NULL, it means that the ** collating sequence is undefined. Indices built on an undefined ** collating sequence may not be read or written. */ struct CollSeq { char *zName; /* Name of the collating sequence, UTF-8 encoded */ @@ -10728,11 +10747,10 @@ Expr *pRight; /* Right subnode */ union { ExprList *pList; /* Function arguments or in "
IN ( IN (
Distributing the Binaries (Compact Framework)
Both the System.Data.SQLite.DLL and SQLite.Interop.XXX.DLL files must be deployed on the Compact Framework. The XXX is the build number of - the System.Data.SQLite library (e.g. "083"). The + the System.Data.SQLite library (e.g. "085"). The SQLite.Interop.XXX.DLL file is a fully native assembly compiled for the ARM processor, and System.Data.SQLite is the fully-managed Compact Framework assembly.
Index: Doc/SQLite.NET.chm
==================================================================
--- Doc/SQLite.NET.chm
+++ Doc/SQLite.NET.chm
cannot compute difference between binary files
Index: Externals/Eagle/bin/Eagle.dll
==================================================================
--- Externals/Eagle/bin/Eagle.dll
+++ Externals/Eagle/bin/Eagle.dll
cannot compute difference between binary files
Index: Externals/Eagle/bin/EagleShell.exe
==================================================================
--- Externals/Eagle/bin/EagleShell.exe
+++ Externals/Eagle/bin/EagleShell.exe
cannot compute difference between binary files
Index: Externals/Eagle/bin/EagleShell.exe.mda.config
==================================================================
--- Externals/Eagle/bin/EagleShell.exe.mda.config
+++ Externals/Eagle/bin/EagleShell.exe.mda.config
@@ -11,11 +11,12 @@
* RCS: @(#) $Id: $
*
-->
-
+ ++-->
Index: Externals/Eagle/lib/Eagle1.0/init.eagle
==================================================================
--- Externals/Eagle/lib/Eagle1.0/init.eagle
+++ Externals/Eagle/lib/Eagle1.0/init.eagle
@@ -141,11 +141,11 @@
proc lappendArgs { args } {
#
# NOTE: This should work properly in both Tcl and Eagle.
#
- eval lappend result $args
+ set result [list]; eval lappend result $args
}
proc getDictionaryValue { dictionary name {default ""} {wrap ""} } {
#
# NOTE: Locate the named value we are interested in. The dictionary must
@@ -977,10 +977,15 @@
#
unset errors; # dispose
return $code
}
+
+ proc matchEnginePublicKeyToken { publicKeyToken } {
+ return [expr {[string length $publicKeyToken] == 0 || \
+ $publicKeyToken eq [info engine PublicKeyToken]}]
+ }
proc matchEngineName { name } {
return [expr {[string length $name] == 0 || \
$name eq [info engine Name]}]
}
@@ -1040,47 +1045,28 @@
#
# NOTE: Next, figure out what type of download is being
# requested.
#
switch -exact -nocase -- $type {
- source {
- #
- # NOTE: Source code download. This may be a RAR or an EXE
- # file. Append the appropriate file name and then
- # join all the URI components to form the final URI.
- #
- set fileName [appendArgs EagleSource $patchLevel $extension]
- lappend components $fileName
-
- set result [list [eval uri join $components] \
- [file join $directory $fileName]]
- }
- setup {
- #
- # NOTE: Windows setup download. Always append an ".exe"
- # extension because we never distribute the setup as
- # a RAR file. Append the appropriate file name and
- # then join all the URI components to form the final
- # URI.
- #
- set fileName [appendArgs EagleSetup $patchLevel .exe]
- lappend components $fileName
-
- set result [list [eval uri join $components] \
- [file join $directory $fileName]]
- }
- binary {
- #
- # NOTE: Binary file download. This may be a RAR or an EXE
- # file. Append the appropriate file name and then
- # join all the URI components to form the final URI.
- #
- set fileName [appendArgs EagleBinary $patchLevel $extension]
- lappend components $fileName
-
- set result [list [eval uri join $components] \
- [file join $directory $fileName]]
+ source -
+ setup -
+ binary {
+ #
+ # NOTE: Source code, setup, or binary download. This may be
+ # a RAR or an EXE file. Append the appropriate file
+ # name and then join all the URI components to form the
+ # final URI.
+ #
+ set fileName [appendArgs \
+ [info engine] [string totitle $type] $patchLevel \
+ [expr {[string tolower $type] eq "setup" ? ".exe" : \
+ $extension}]]
+
+ lappend components $fileName
+
+ set result [list [eval uri join $components] [file join \
+ $directory $fileName]]
}
}
}
}
}
@@ -1250,11 +1236,11 @@
# version" is on the first line (for a given public key
# token), followed by development builds, experimental
# builds, etc.
#
if {$protocolId eq "1" && \
- $publicKeyToken eq [info engine PublicKeyToken] && \
+ [matchEnginePublicKeyToken $publicKeyToken] && \
[matchEngineName $name] && \
[matchEngineCulture $culture]} then {
#
# NOTE: Grab the patch level field.
#
@@ -1439,15 +1425,15 @@
# HACK: Mono does not currently support calling the String.Format
# overload that takes a variable number of arguments via
# reflection (Mono bug #636939).
#
if {![isMono]} then {
- set line [string format -verbatim -- "{0,-$maxLength} = {1}" \
- $nameString $valueString]
+ set line [string format -verbatim -- [appendArgs "\{0,-" \
+ $maxLength "\} = {1}"] $nameString $valueString]
} else {
- set line [object invoke String Format "{0,-$maxLength} = {1}" \
- $nameString $valueString]
+ set line [object invoke String Format [appendArgs "\{0,-" \
+ $maxLength "\} = {1}"] $nameString $valueString]
}
puts stdout $line
}
}
@@ -1549,108 +1535,157 @@
#
# NOTE: This should work properly in both Tcl and Eagle.
#
catch {puts stderr $string}
}
+
+ proc makeVariableFast { name fast } {
+ #
+ # NOTE: This should work properly in Eagle only.
+ #
+ catch {
+ uplevel 1 [list object invoke -flags +NonPublic \
+ Interpreter.GetActive MakeVariableFast $name $fast]
+ }
+ }
proc findDirectories { pattern } {
+ #
+ # NOTE: Block non-Windows platforms since this is Windows specific.
+ #
+ if {$::tcl_platform(platform) ne "windows"} then {
+ error "not supported on this operating system"
+ }
+
#
# NOTE: This should work properly in Eagle only.
#
- set result [list]
+ set dir ""; set result [list]
+
+ #
+ # HACK: Optimize the variable access in this procedure to be
+ # as fast as possible.
+ #
+ makeVariableFast dir true; makeVariableFast result true
- foreach dir [split [exec $::env(ComSpec) /c dir /ad /b \
- [appendArgs \" [file nativename $pattern] \"]] \n] {
+ foreach dir [split [exec -unicode $::env(ComSpec) /u /c dir \
+ /ad /b [appendArgs \" [file nativename $pattern] \"]] \n] {
set dir [string trim $dir]
if {[string length $dir] > 0} then {
set dir [getDirResultPath $pattern $dir]
- if {[lsearch -exact -nocase $result $dir] == -1} then {
+ if {[lsearch -variable -exact -nocase result $dir] == -1} then {
lappend result $dir
}
}
}
- foreach dir [split [exec $::env(ComSpec) /c dir /ahd /b \
- [appendArgs \" [file nativename $pattern] \"]] \n] {
+ foreach dir [split [exec -unicode $::env(ComSpec) /u /c dir \
+ /ahd /b [appendArgs \" [file nativename $pattern] \"]] \n] {
set dir [string trim $dir]
if {[string length $dir] > 0} then {
set dir [getDirResultPath $pattern $dir]
- if {[lsearch -exact -nocase $result $dir] == -1} then {
+ if {[lsearch -variable -exact -nocase result $dir] == -1} then {
lappend result $dir
}
}
}
return $result
}
proc findFiles { pattern } {
+ #
+ # NOTE: Block non-Windows platforms since this is Windows specific.
+ #
+ if {$::tcl_platform(platform) ne "windows"} then {
+ error "not supported on this operating system"
+ }
+
#
# NOTE: This should work properly in Eagle only.
#
- set result [list]
+ set fileName ""; set result [list]
+
+ #
+ # HACK: Optimize the variable access in this procedure to be
+ # as fast as possible.
+ #
+ makeVariableFast fileName true; makeVariableFast result true
- foreach fileName [split [exec $::env(ComSpec) /c dir /a-d /b \
- [appendArgs \" [file nativename $pattern] \"]] \n] {
+ foreach fileName [split [exec -unicode $::env(ComSpec) /u /c dir \
+ /a-d /b [appendArgs \" [file nativename $pattern] \"]] \n] {
set fileName [string trim $fileName]
if {[string length $fileName] > 0} then {
set fileName [getDirResultPath $pattern $fileName]
- if {[lsearch -exact -nocase $result $fileName] == -1} then {
+ if {[lsearch -variable -exact -nocase result $fileName] == -1} then {
lappend result $fileName
}
}
}
- foreach fileName [split [exec $::env(ComSpec) /c dir /ah-d /b \
- [appendArgs \" [file nativename $pattern] \"]] \n] {
+ foreach fileName [split [exec -unicode $::env(ComSpec) /u /c dir \
+ /ah-d /b [appendArgs \" [file nativename $pattern] \"]] \n] {
set fileName [string trim $fileName]
if {[string length $fileName] > 0} then {
set fileName [getDirResultPath $pattern $fileName]
- if {[lsearch -exact -nocase $result $fileName] == -1} then {
+ if {[lsearch -variable -exact -nocase result $fileName] == -1} then {
lappend result $fileName
}
}
}
return $result
}
proc findFilesRecursive { pattern } {
+ #
+ # NOTE: Block non-Windows platforms since this is Windows specific.
+ #
+ if {$::tcl_platform(platform) ne "windows"} then {
+ error "not supported on this operating system"
+ }
+
#
# NOTE: This should work properly in Eagle only.
#
- set result [list]
+ set fileName ""; set result [list]
+
+ #
+ # HACK: Optimize the variable access in this procedure to be
+ # as fast as possible.
+ #
+ makeVariableFast fileName true; makeVariableFast result true
- foreach fileName [split [exec $::env(ComSpec) /c dir /a-d /s /b \
- [appendArgs \" [file nativename $pattern] \"]] \n] {
+ foreach fileName [split [exec -unicode $::env(ComSpec) /u /c dir \
+ /a-d /s /b [appendArgs \" [file nativename $pattern] \"]] \n] {
set fileName [string trim $fileName]
if {[string length $fileName] > 0} then {
set fileName [getDirResultPath $pattern $fileName]
- if {[lsearch -exact -nocase $result $fileName] == -1} then {
+ if {[lsearch -variable -exact -nocase result $fileName] == -1} then {
lappend result $fileName
}
}
}
- foreach fileName [split [exec $::env(ComSpec) /c dir /ah-d /s /b \
- [appendArgs \" [file nativename $pattern] \"]] \n] {
+ foreach fileName [split [exec -unicode $::env(ComSpec) /u /c dir \
+ /ah-d /s /b [appendArgs \" [file nativename $pattern] \"]] \n] {
set fileName [string trim $fileName]
if {[string length $fileName] > 0} then {
set fileName [getDirResultPath $pattern $fileName]
- if {[lsearch -exact -nocase $result $fileName] == -1} then {
+ if {[lsearch -variable -exact -nocase result $fileName] == -1} then {
lappend result $fileName
}
}
}
@@ -1704,10 +1739,17 @@
return $result
}
proc findFilesRecursive { pattern } {
+ #
+ # NOTE: Block non-Windows platforms since this is Windows specific.
+ #
+ if {$::tcl_platform(platform) ne "windows"} then {
+ error "not supported on this operating system"
+ }
+
#
# NOTE: This should work properly in Tcl only.
#
set result [list]
@@ -1791,14 +1833,19 @@
#
# NOTE: Exports the necessary commands from this package and import them
# into the global namespace.
#
exportAndImportPackageCommands [namespace current] [list \
- exportAndImportPackageCommands isEagle isMono getEnvironmentVariable \
- getPluginPath getDictionaryValue getColumnValue getRowColumnValue \
- appendArgs haveGaruda lappendArgs readFile filter map reduce \
- getPlatformInfo execShell combineFlags tqputs tqlog] false false
+ isEagle haveGaruda isMono getEnvironmentVariable combineFlags \
+ getCompileInfo getPlatformInfo getPluginPath appendArgs lappendArgs \
+ getDictionaryValue getColumnValue getRowColumnValue tqputs tqlog \
+ readFile readSharedFile writeFile appendFile appendLogFile \
+ appendSharedFile appendSharedLogFile readAsciiFile writeAsciiFile \
+ readUnicodeFile writeUnicodeFile getDirResultPath addToPath \
+ removeFromPath execShell ldifference filter map reduce \
+ getLengthModifier debug findDirectories findFiles findFilesRecursive \
+ exportAndImportPackageCommands] false false
###########################################################################
############################## END Tcl ONLY ###############################
###########################################################################
}
Index: Externals/Eagle/lib/Eagle1.0/test.eagle
==================================================================
--- Externals/Eagle/lib/Eagle1.0/test.eagle
+++ Externals/Eagle/lib/Eagle1.0/test.eagle
@@ -297,18 +297,18 @@
# NOTE: Calculate how many whole seconds we need to spin for.
#
set seconds [expr {$milliseconds / 1000}]
#
- # NOTE: Calculate the value of [clock seconds] now and at the stop time.
+ # NOTE: Calculate the starting and ending values of [clock seconds].
#
- set start [clock seconds]; set stop [expr {$start + $seconds}]
+ set now [clock seconds]; set start $now; set stop [expr {$now + $seconds}]
#
# NOTE: Do nothing for X seconds (i.e. except call [clock seconds]).
#
- while {$start <= [clock seconds] && [clock seconds] < $stop} {}
+ while {$start <= $now && $now < $stop} {set now [clock seconds]}
#
# NOTE: Record the final Tcl command count.
#
set after [info cmdcount]
@@ -387,11 +387,11 @@
#
# TODO: Add more support for standard tcltest options here.
#
set options [list -configuration -constraints -exitOnComplete -file \
-logFile -match -no -notFile -postTest -preTest -skip -stopOnFailure \
- -suffix -threshold]
+ -suffix -tclsh -threshold]
foreach {name value} $args {
#
# NOTE: Use the [tqputs] command here just in case the test log file
# has not been setup yet (i.e. by default, this procedure is
@@ -415,10 +415,37 @@
#
# NOTE: Now, attempt to flush the test log queue, if available.
#
tlog ""
}
+
+ proc getTclShellFileName {} {
+ #
+ # NOTE: Check the environment variables we know about that
+ # may contain the path where the Tcl shell is located.
+ #
+ foreach name [list Eagle_Tcl_Shell Tcl_Shell] {
+ set value [getEnvironmentVariable $name]
+
+ #
+ # TODO: Possibly add a check if the file actually exists
+ # here.
+ #
+ if {[string length $value] > 0} then {
+ #
+ # NOTE: *EXTERNAL* Return verbatim, no normalization.
+ #
+ return $value
+ }
+ }
+
+ #
+ # NOTE: None of the environment variables returned anything
+ # valid, return the fallback default.
+ #
+ return tclsh
+ }
proc getTemporaryPath {} {
#
# NOTE: Build the list of "temporary directory" override
# environment variables to check.
@@ -677,11 +704,11 @@
switch [llength $args] {
1 {
#
# NOTE: Only the string to be printed is specified (stdout).
#
- return [tputs $::test_channel [lindex $args 0]]
+ return [tputs $::test_channel [appendArgs [lindex $args 0] \n]]
}
2 {
#
# NOTE: Either -nonewline or channelId has been specified.
#
@@ -922,16 +949,16 @@
tputs $channel [appendArgs "==== \"" $fileName "\" LEAKED " \
$statistic \n]
if {[info exists array($statistic,before,list)]} then {
tputs $channel [appendArgs "---- " $statistic " BEFORE: " \
- $array($statistic,before,list) \n]
+ [formatList $array($statistic,before,list)] \n]
}
if {[info exists array($statistic,after,list)]} then {
tputs $channel [appendArgs "---- " $statistic " AFTER: " \
- $array($statistic,after,list) \n]
+ [formatList $array($statistic,after,list)] \n]
}
}
}
#
@@ -1089,14 +1116,14 @@
# have been displayed by the caller (or anybody else).
#
tputs $channel [appendArgs "---- test run path: \"" $path \"\n]
tputs $channel [appendArgs "---- test run file names: " \
- [list [removePathFromFileNames $path $fileNames]] \n]
+ [formatList [removePathFromFileNames $path $fileNames]] \n]
tputs $channel [appendArgs "---- test run skip file names: " \
- [list $skipFileNames] \n]
+ [formatList $skipFileNames] \n]
#
# NOTE: Keep going unless this becomes true (i.e. if one of the
# test files signals us to stop).
#
@@ -1291,10 +1318,16 @@
# output diagnostics as necessary if they have.
#
reportTestStatistics $channel $fileName leaks leaked
}
} else {
+ #
+ # NOTE: This entire file has been skipped. Record that fact in the
+ # test suite log file.
+ #
+ tputs $channel [appendArgs "==== \"" $fileName "\" NON_TEST_FILE\n"]
+
#
# NOTE: This file does not actually count towards the total (i.e.
# it contains no actual tests).
#
incr total -1
@@ -1320,10 +1353,16 @@
#
if {$stop} then {
break
}
} else {
+ #
+ # NOTE: This entire file has been skipped. Record that fact in the
+ # test suite log file.
+ #
+ tputs $channel [appendArgs "==== \"" $fileName "\" SKIPPED\n"]
+
#
# NOTE: This file does not actually count towards the total (i.e.
# it is part of the test suite infrastructure).
#
incr total -1
@@ -1354,15 +1393,17 @@
#
# NOTE: Show the files that had failing and/or leaking tests.
#
if {[llength $failed] > 0} then {
- tputs $channel [appendArgs "---- files with failing tests: " $failed \n]
+ tputs $channel [appendArgs "---- files with failing tests: " \
+ [formatList $failed] \n]
}
if {[llength $leaked] > 0} then {
- tputs $channel [appendArgs "---- files with leaking tests: " $leaked \n]
+ tputs $channel [appendArgs "---- files with leaking tests: " \
+ [formatList $leaked] \n]
}
}
proc configureTcltest { constraints imports force } {
if {[isEagle]} then {
@@ -1714,10 +1755,16 @@
#
catch {file delete $fileName}
}
}
}
+
+ proc getCommandsForTclShell {} {
+ return [testExecTclScript {
+ puts -nonewline stdout [info commands]
+ }]
+ }
proc getMachineForTclShell {} {
return [testExecTclScript {
puts -nonewline stdout $tcl_platform(machine)
}]
@@ -1726,38 +1773,94 @@
proc getTkVersion {} {
return [testExecTclScript {
puts -nonewline stdout [package require Tk]; exit
}]
}
+
+ proc getTestConfiguration {} {
+ #
+ # NOTE: Determine the effective test configuration and return it. If
+ # the test configuration cannot be determined, return an empty
+ # string.
+ #
+ if {[info exists ::test_flags(-configuration)] && \
+ [string length $::test_flags(-configuration)] > 0} then {
+ #
+ # NOTE: The test configuration has been manually overridden via the
+ # test flags; therefore, use it.
+ #
+ return $::test_flags(-configuration)
+ } elseif {[info exists ::test_configuration]} then {
+ #
+ # NOTE: Use the test configuration. The default value is "Release",
+ # as set by the test suite prologue; however, this may have
+ # been overridden.
+ #
+ return $::test_configuration
+ } elseif {[info exists ::eagle_platform(configuration)]} then {
+ #
+ # NOTE: Use the build configuration of Eagle itself. This value will
+ # always be "Debug" or "Release".
+ #
+ return $::eagle_platform(configuration)
+ } else {
+ #
+ # NOTE: We are missing the configuration, return nothing.
+ #
+ return ""
+ }
+ }
+
+ proc getTestSuffix {} {
+ #
+ # NOTE: Determine the effective test suffix and return it. If
+ # the test suffix cannot be determined, return an empty
+ # string.
+ #
+ if {[info exists ::test_flags(-suffix)] && \
+ [string length $::test_flags(-suffix)] > 0} then {
+ #
+ # NOTE: The test suffix has been manually overridden via the
+ # test flags; therefore, use it.
+ #
+ return $::test_flags(-suffix)
+ } elseif {[info exists ::test_suffix]} then {
+ #
+ # NOTE: Use the test suffix. There is no default value for
+ # this variable (i.e. by default, it does not exist).
+ #
+ return $::test_suffix
+ } elseif {[info exists ::eagle_platform(text)]} then {
+ #
+ # NOTE: Use the build text of Eagle itself. This value will
+ # typically be "NetFx20" or "NetFx40".
+ #
+ return $::eagle_platform(text)
+ } else {
+ #
+ # NOTE: We are missing the suffix, return nothing.
+ #
+ return ""
+ }
+ }
proc getGarudaDll {} {
#
# NOTE: Get the Garuda DLL of the same platform (i.e. machine type)
# as the native Tcl shell.
#
if {[info exists ::base_path]} then {
#
- # NOTE: If the test configuration is available, use it. Failing that,
- # use the build configuration of Eagle itself.
- #
- if {[info exists ::test_configuration]} then {
- #
- # NOTE: Use the test configuration. The default value is "Release",
- # as set by the test suite prologue; however, this may have
- # been overridden.
- #
- set configuration $::test_configuration
- } elseif {[info exists ::eagle_platform(configuration)]} then {
- #
- # NOTE: Use the build configuration of Eagle itself. This value will
- # always be "Debug" or "Release".
- #
- set configuration $::eagle_platform(configuration)
- } else {
- #
- # NOTE: We are missing the configuration, return nothing.
- #
+ # NOTE: Get the effective test configuration.
+ #
+ set configuration [getTestConfiguration]
+
+ #
+ # NOTE: If there is no effective test configuration available, we
+ # cannot continue.
+ #
+ if {[string length $configuration] == 0} then {
return ""
}
#
# NOTE: Build the full path and file name of the Garuda DLL, using
@@ -1969,12 +2072,12 @@
processTestArguments getTemporaryPath getTestLog getTestLogId getFiles \
getConstraints getTestFiles getTestRunId execTestShell runTestPrologue \
runTestEpilogue runTest runAllTests fixConstraints sourceIfValid \
isExitOnComplete getPassPercentage getSkipPercentage testExec tlog \
returnInfoScript tputs formatDecimal formatList configureTcltest \
- calculateBogoCops removeConstraint machineToPlatform tsource testShim] \
- false false
+ calculateBogoCops removeConstraint machineToPlatform tsource testShim \
+ getTestConfiguration getTestSuffix getTclShellFileName] false false
###########################################################################
############################## END Tcl ONLY ###############################
###########################################################################
}
Index: Externals/Eagle/lib/Eagle1.0/vendor.eagle
==================================================================
--- Externals/Eagle/lib/Eagle1.0/vendor.eagle
+++ Externals/Eagle/lib/Eagle1.0/vendor.eagle
@@ -42,12 +42,15 @@
}
incr result
if {!$quiet} then {
- tqputs $channel [appendArgs \
- "---- found vendor-specific test override \"" $varName "\".\n"]
+ catch {
+ tqputs $channel [appendArgs \
+ "---- found vendor-specific test override \"" $varName \
+ "\" with value \"" [uplevel 1 [list set $varName]] \"\n]
+ }
}
}
#
# NOTE: Keep track of the list of test override variables, for later
@@ -107,13 +110,15 @@
[lsearch -exact $::env(EAGLELIBPATH) $dir2] == -1} then {
#
# NOTE: If we have NOT been instructed to be quiet, report now.
#
if {!$quiet} then {
- tqputs $channel [appendArgs \
- "---- found vendor-specific test package directory \"" \
- $dir2 "\", adding...\n"]
+ catch {
+ tqputs $channel [appendArgs \
+ "---- found vendor-specific test package directory \"" \
+ $dir2 "\", adding...\n"]
+ }
}
#
# NOTE: Append the directory to the necessary environment variable
# so that it will get picked up when Eagle actually rebuilds
@@ -142,12 +147,14 @@
#
# NOTE: If we have NOT been instructed to be quiet, report now.
#
if {!$quiet} then {
- tqputs $channel \
- "---- could not find vendor-specific test package directory.\n"
+ catch {
+ tqputs $channel \
+ "---- could not find vendor-specific test package directory\n"
+ }
}
#
# NOTE: Directory not found, return failure.
#
@@ -160,12 +167,14 @@
if {$dir ne $testPath} then {
object invoke -flags +NonPublic Interpreter.GetActive TestPath $dir
if {!$quiet} then {
- tqputs $channel [appendArgs \
- "---- set interpreter test path to \"" $dir \".\n]
+ catch {
+ tqputs $channel [appendArgs \
+ "---- set interpreter test path to \"" $dir \"\n]
+ }
}
}
}
#
@@ -174,12 +183,12 @@
#
checkForTestOverrides stdout [expr {[info exists test_overrides] ? \
$test_overrides : [list binary_directory build_base_directory \
build_directory common_directory connection_flags database_directory \
datetime_format scratch_directory temporary_directory \
- test_configuration test_overrides test_year test_year_clr_v2 \
- test_year_clr_v4 vendor_directory]}] false
+ test_configuration test_constraints test_overrides test_year \
+ test_year_clr_v2 test_year_clr_v4 vendor_directory]}] false
#
# NOTE: This variable will contain the name of the directory containing the
# vendor-specific testing infrastructure. If the variable does not
# already exist, create it; otherwise, it has been overridden and the
Index: Externals/Eagle/lib/Test1.0/constraints.eagle
==================================================================
--- Externals/Eagle/lib/Test1.0/constraints.eagle
+++ Externals/Eagle/lib/Test1.0/constraints.eagle
@@ -26,11 +26,11 @@
if {[info exists ::tcl_platform(platform)]} then {
addConstraint $::tcl_platform(platform)
tputs $channel [appendArgs $::tcl_platform(platform) \n]
} else {
- tputs $channel [appendArgs unknown \n]
+ tputs $channel unknown\n
}
###########################################################################
if {![isEagle]} then {
@@ -58,10 +58,56 @@
addConstraint $constraint
}
}
}
}
+
+ proc checkForScriptLibrary { channel } {
+ tputs $channel "---- checking for script library... "
+
+ #
+ # NOTE: See if the variable containing the script library location
+ # exists.
+ #
+ if {[info exists ::tcl_library] && \
+ [string length $::tcl_library] > 0} then {
+ #
+ # NOTE: Now see if the script library is external or embedded.
+ #
+ if {[file isdirectory $::tcl_library]} then {
+ #
+ # NOTE: Yes, it appears to be a directory name, which should
+ # mean that the necessary files are physically contained
+ # within it.
+ #
+ addConstraint tcl_library_external
+
+ tputs $channel "yes (external)\n"
+
+ #
+ # NOTE: We are done here, return now.
+ #
+ return
+ } elseif {[file isfile $::tcl_library]} then {
+ #
+ # NOTE: Yes, it appears to be a file name, which should mean
+ # that the necessary files are physically embedded within
+ # it.
+ #
+ addConstraint tcl_library_embedded
+
+ tputs $channel "yes (embedded)\n"
+
+ #
+ # NOTE: We are done here, return now.
+ #
+ return
+ }
+ }
+
+ tputs $channel no\n
+ }
proc checkForVariable { channel name {notEmpty true} {constraint ""} } {
tputs $channel [appendArgs "---- checking for variable \"" $name \
"\"... "]
@@ -550,19 +596,32 @@
tputs $channel no\n
}
}
proc checkForTestConfiguration { channel } {
- tputs $channel [appendArgs "---- checking for test configuration... "]
+ tputs $channel "---- checking for test configuration... "
if {[info exists ::test_configuration] && \
[string length $::test_configuration] > 0} then {
addConstraint [appendArgs configuration. $::test_configuration]
tputs $channel [appendArgs $::test_configuration \n]
} else {
- tputs $channel [appendArgs unknown \n]
+ tputs $channel unknown\n
+ }
+ }
+
+ proc checkForTestSuffix { channel } {
+ tputs $channel "---- checking for test suffix... "
+
+ if {[info exists ::test_suffix] && \
+ [string length $::test_suffix] > 0} then {
+ addConstraint [appendArgs suffix. $::test_suffix]
+
+ tputs $channel [appendArgs $::test_suffix \n]
+ } else {
+ tputs $channel unknown\n
}
}
proc checkForFile { channel name {constraint ""} } {
tputs $channel [appendArgs "---- checking for file \"" $name \
@@ -773,10 +832,27 @@
tputs $channel yes\n
} else {
tputs $channel no\n
}
}
+
+ proc checkForTip405 { channel } {
+ tputs $channel "---- checking for TIP #405... "
+
+ #
+ # NOTE: Does the interpreter have TIP #405 (i.e. [lmap])?
+ #
+ catch {lmap} error
+
+ if {$error ne "invalid command name \"lmap\""} then {
+ addConstraint tip405
+
+ tputs $channel yes\n
+ } else {
+ tputs $channel no\n
+ }
+ }
proc checkForTiming {
channel threshold {constraint ""} {tries 1} {delay 1000}
{asynchronous false} } {
tputs $channel [appendArgs \
@@ -865,10 +941,25 @@
tputs $channel yes\n
} else {
tputs $channel no\n
}
}
+
+ proc checkForStackIntensive { channel } {
+ tputs $channel "---- checking for stack intensive testing... "
+
+ #
+ # NOTE: Are we allowed to do stack intensive testing?
+ #
+ if {![info exists ::no(stackIntensive)]} then {
+ addConstraint stackIntensive
+
+ tputs $channel yes\n
+ } else {
+ tputs $channel no\n
+ }
+ }
proc checkForInteractive { channel } {
tputs $channel "---- checking for interactive user... "
#
@@ -880,10 +971,41 @@
tputs $channel yes\n
} else {
tputs $channel no\n
}
}
+
+ proc checkForInteractiveCommand { channel name } {
+ tputs $channel [appendArgs "---- checking for interactive command \"" \
+ $name "\"... "]
+
+ #
+ # NOTE: Currently, only Eagle has "interactive commands".
+ #
+ if {[isEagle]} then {
+ #
+ # NOTE: Attempt to query the interactive command names from Eagle.
+ #
+ if {[catch {object invoke Utility GetInteractiveCommandNames $name \
+ false} names] == 0 && \
+ [llength $names] > 0} then {
+ #
+ # NOTE: Yes, it appears that it is available.
+ #
+ addConstraint [appendArgs interactiveCommand. $name]
+
+ tputs $channel yes\n
+
+ #
+ # NOTE: We are done here, return now.
+ #
+ return
+ }
+ }
+
+ tputs $channel no\n
+ }
proc checkForUserInteraction { channel } {
tputs $channel "---- checking for user interaction... "
#
@@ -1009,10 +1131,98 @@
tputs $channel trusted\n
} else {
tputs $channel untrusted\n
}
}
+
+ proc checkForManagedDebuggingAssistants { channel } {
+ set fileName [file normalize [appendArgs [info nameofexecutable] \
+ .mda.config]]
+
+ tputs $channel [appendArgs \
+ "---- checking for managed debugging assistants enabled via \"" \
+ $fileName "\"... "]
+
+ if {[file exists $fileName]} then {
+ #
+ # NOTE: Since the System.Xml assembly may not be loaded, wrap the
+ # detection in a [catch] block.
+ #
+ if {[catch {
+ #
+ # NOTE: Create and load an XML document based on the data from the
+ # MDA configuration file associated with the executable that
+ # started this process.
+ #
+ set document [object create -alias System.Xml.XmlDocument]
+ $document LoadXml [readFile $fileName]
+
+ #
+ # NOTE: Setup the XML namespace manager for use when using XPath
+ # to query the XML document.
+ #
+ set nameTable [$document NameTable]
+
+ set namespaceManager [object create \
+ -alias System.Xml.XmlNamespaceManager $nameTable]
+
+ $namespaceManager AddNamespace mda \
+ http://schemas.microsoft.com/CLR/2004/10/mda
+
+ #
+ # NOTE: Select all nodes underneath the location where they should
+ # reside in the MDA configuration XML document.
+ #
+ set nodes [$document SelectNodes \
+ /mda:mdaConfig/mda:assistants/* $namespaceManager]
+
+ #
+ # NOTE: Populate the local result variable with the names of
+ # all the XML nodes found.
+ #
+ set names [object lmap -alias node $nodes {
+ $node Name
+ }]
+ }] == 0} then {
+ #
+ # NOTE: Ok, the XML configuration file was loaded and parsed
+ # correctly, see if any managed debugging assistants were
+ # found enabled within it.
+ #
+ if {[info exists names] && [llength $names] > 0} then {
+ #
+ # NOTE: Add a test constraint for each managed debugging
+ # assistant that appears to be enabled.
+ #
+ addConstraint mda
+
+ foreach name $names {
+ addConstraint [appendArgs mda. $name]
+ }
+
+ #
+ # NOTE: Save the list of managed debugging assistants for
+ # later use by the test suite.
+ #
+ set ::test_mdas $names
+
+ #
+ # NOTE: Yes, it appears that at least one managed debugging
+ # assistant is enabled.
+ #
+ tputs $channel [appendArgs "yes (" $names ")\n"]
+
+ #
+ # NOTE: We are done here, return now.
+ #
+ return
+ }
+ }
+ }
+
+ tputs $channel no\n
+ }
proc checkForStrongName { channel } {
tputs $channel "---- checking for strong name... "
if {[catch {object invoke Interpreter.GetActive GetStrongName} \
@@ -2166,15 +2376,16 @@
#
exportAndImportPackageCommands [namespace current] [list checkForPlatform \
checkForEagle checkForGaruda checkForShell checkForDebug checkForTk \
checkForVersion checkForCommand checkForFile checkForNativeCode \
checkForTip127 checkForTip194 checkForTip241 checkForTip285 \
- checkForPerformance checkForTiming checkForInteractive checkForSymbols \
- checkForLogFile checkForNetwork checkForCompileOption \
- checkForWindowsCommandProcessor checkForUserInteraction \
- checkForTclOptions checkForTestConfiguration checkForVariable \
- checkForFossil] false false
+ checkForTip405 checkForPerformance checkForTiming checkForInteractive \
+ checkForSymbols checkForLogFile checkForNetwork checkForCompileOption \
+ checkForInteractiveCommand checkForWindowsCommandProcessor \
+ checkForUserInteraction checkForTclOptions checkForTestConfiguration \
+ checkForTestSuffix checkForVariable checkForScriptLibrary \
+ checkForStackIntensive checkForFossil] false false
###########################################################################
############################## END Tcl ONLY ###############################
###########################################################################
}
Index: Externals/Eagle/lib/Test1.0/prologue.eagle
==================================================================
--- Externals/Eagle/lib/Test1.0/prologue.eagle
+++ Externals/Eagle/lib/Test1.0/prologue.eagle
@@ -20,13 +20,13 @@
}
#
# NOTE: Make sure all the variables used by this prologue are unset.
#
- unset -nocomplain pkg_dir pattern exec dummy directory name value \
- expr publicKeyToken encoding memory stack drive server database \
- timeout user password percent checkout timeStamp
+ unset -nocomplain pkg_dir pattern exec dummy directory name value expr \
+ publicKeyToken encoding memory stack drive server database timeout \
+ user password percent checkout timeStamp
#
# NOTE: Set the location of the test suite, if necessary.
#
if {![info exists test_path]} then {
@@ -251,10 +251,11 @@
set test_flags(-threshold) ""; # default to requiring all tests to pass.
set test_flags(-stopOnFailure) ""; # default to continue on failure.
set test_flags(-exitOnComplete) ""; # default to not exit after complete.
set test_flags(-preTest) ""; # default to not evaluating anything.
set test_flags(-postTest) ""; # default to not evaluating anything.
+ set test_flags(-tclsh) ""; # Tcl shell, default to empty.
#
# NOTE: Check for and process any command line arguments.
#
if {[info exists argv]} then {
@@ -269,11 +270,11 @@
#
foreach {name value} $test_flags(-no) {
set no($name) $value
}
- unset name value
+ unset -nocomplain name value
}
if {[info exists test_flags(-logFile)] && \
[string length $test_flags(-logFile)] > 0} then {
#
@@ -333,16 +334,33 @@
if {![info exists test_configuration]} then {
set test_configuration [getPlatformInfo configuration Release]
}
#
- # NOTE: Set the Tcl shell executable to use for those specialized
- # tests that may require it, if necessary.
+ # NOTE: Set the Tcl shell executable to use for those specialized tests that
+ # may require it, if necessary.
#
if {![info exists test_tclsh]} then {
+ #
+ # NOTE: When running in Eagle, more complex logic is required to determine
+ # the Tcl shell to use for the various tests that require it. Also,
+ # this same logic is used with Tcl when it is not running from an
+ # instance of the Tcl shell executable.
+ #
if {[isEagle] || ![string match tclsh* $bin_file]} then {
- set test_tclsh tclsh
+ if {[info exists test_flags(-tclsh)] && \
+ [string length $test_flags(-tclsh)] > 0} then {
+ #
+ # NOTE: Use the Tcl shell specified via the command line.
+ #
+ set test_tclsh $test_flags(-tclsh)
+ } else {
+ #
+ # NOTE: Check for a Tcl shell specified via the environment.
+ #
+ set test_tclsh [getTclShellFileName]
+ }
} else {
set test_tclsh $bin_file
}
}
@@ -428,10 +446,14 @@
$test_channel \n]
tputs $test_channel [appendArgs "---- test configuration: " \
[expr {[info exists test_configuration] ? \
$test_configuration : ""}] \n]
+
+ tputs $test_channel [appendArgs "---- test suffix: " \
+ [expr {[info exists test_suffix] ? \
+ $test_suffix : ""}] \n]
if {[isEagle]} then {
catch {info engine PublicKeyToken} publicKeyToken
if {[string length $publicKeyToken] == 0} then {
@@ -857,10 +879,21 @@
# "debug-4.1".
#
checkForCompileOption $test_channel DEBUGGER
}
+ #
+ # NOTE: Has application domain management support been enabled (at
+ # compile-time)?
+ #
+ if {![info exists no(compileAppDomains)]} then {
+ #
+ # NOTE: For test "interp-1.27".
+ #
+ checkForCompileOption $test_channel APPDOMAINS
+ }
+
#
# NOTE: Has isolated interpreter support been enabled (at compile-time)?
#
if {![info exists no(compileIsolatedInterpreters)]} then {
#
@@ -1151,14 +1184,20 @@
checkForObjectMember $test_channel Eagle._Tests.Default \
*TestRemoveNamedFunction*
#
- # NOTE: For test "interp-1.18".
+ # NOTE: For test "interp-1.19".
#
checkForObjectMember $test_channel Eagle._Tests.Default \
*TestAddNamedFunction2*
+
+ #
+ # NOTE: For tests "function-5.*".
+ #
+ checkForObjectMember $test_channel Eagle._Tests.Default \
+ *TestAddNamedFunction3*
}
#
# NOTE: Has write-box testing support been disabled?
#
@@ -1508,10 +1547,18 @@
#
if {![info exists no(managedDebugger)]} then {
checkForManagedDebugger $test_channel
}
+ #
+ # NOTE: Has managed debugging assistants testing support been
+ # disabled?
+ #
+ if {![info exists no(managedDebuggingAssistants)]} then {
+ checkForManagedDebuggingAssistants $test_channel
+ }
+
#
# NOTE: Has script debugger testing support been disabled?
#
if {![info exists no(scriptDebugger)]} then {
#
@@ -1623,10 +1670,17 @@
# NOTE: Has checking for the test configuration been disabled?
#
if {![info exists no(testConfiguration)]} then {
checkForTestConfiguration $test_channel
}
+
+ #
+ # NOTE: Has checking for the test suffix been disabled?
+ #
+ if {![info exists no(testSuffix)]} then {
+ checkForTestSuffix $test_channel
+ }
#
# NOTE: Has checking for the extra files needed by various tests been
# disabled?
#
@@ -1742,10 +1796,17 @@
#
if {![info exists no(test.xls)]} then {
checkForFile $test_channel [file join $test_path test.xls]
}
+ #
+ # NOTE: For test "proc-1.9".
+ #
+ if {![info exists no(testProcs.tcl)]} then {
+ checkForFile $test_channel [file join $test_path testProcs.tcl]
+ }
+
#
# NOTE: For test "interp-1.10".
#
if {![info exists no(settings.xml)]} then {
checkForFile $test_channel [file join $test_path settings.xml]
@@ -1834,14 +1895,22 @@
# explicitly disabled.
#
if {![info exists no(platform)]} then {
checkForPlatform $test_channel
}
+
+ if {![info exists no(scriptLibrary)]} then {
+ checkForScriptLibrary $test_channel
+ }
if {![info exists no(tclOptions)]} then {
checkForTclOptions $test_channel
}
+
+ if {![info exists no(stackIntensive)]} then {
+ checkForStackIntensive $test_channel
+ }
if {![info exists no(windowsCommandProcessor)]} then {
checkForWindowsCommandProcessor $test_channel cmd.exe
}
@@ -1940,10 +2009,14 @@
if {![info exists no(tip285)]} then {
checkForTip285 $test_channel
}
+ if {![info exists no(tip405)]} then {
+ checkForTip405 $test_channel
+ }
+
#
# NOTE: Has performance testing been disabled?
#
if {![info exists no(performance)]} then {
checkForPerformance $test_channel
@@ -1967,10 +2040,25 @@
# NOTE: Has interactive testing been disabled?
#
if {![info exists no(interactive)]} then {
checkForInteractive $test_channel
}
+
+ #
+ # NOTE: Has interactive command testing been disabled?
+ #
+ if {![info exists no(interactiveCommand)]} then {
+ #
+ # NOTE: For test "debug-1.8".
+ #
+ checkForInteractiveCommand $test_channel go
+
+ #
+ # NOTE: For test "debug-1.9".
+ #
+ checkForInteractiveCommand $test_channel done
+ }
if {![info exists no(userInteraction)]} then {
checkForUserInteraction $test_channel
}
Index: Membership/Properties/AssemblyInfo.cs
==================================================================
--- Membership/Properties/AssemblyInfo.cs
+++ Membership/Properties/AssemblyInfo.cs
@@ -31,7 +31,7 @@
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.83.0")]
-[assembly: AssemblyFileVersion("1.0.83.0")]
+[assembly: AssemblyVersion("1.0.85.0")]
+[assembly: AssemblyFileVersion("1.0.85.0")]
ADDED SQLite.Beta.nuspec
Index: SQLite.Beta.nuspec
==================================================================
--- /dev/null
+++ SQLite.Beta.nuspec
@@ -0,0 +1,39 @@
+
+
+
+
+ System.Data.SQLite.Beta
+ System.Data.SQLite (x86/x64) Beta
+ 1.0.85.0
+ SQLite Development Team
+ The official SQLite database engine for both x86 and x64 along with the ADO.NET provider.
+ en-US
+ http://system.data.sqlite.org/
+ http://system.data.sqlite.org/images/sqlite32.png
+ http://www.sqlite.org/copyright.html
+ sqlite database ado.net provider interop
+ Public Domain
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: SQLite.Designer/AssemblyInfo.cs
==================================================================
--- SQLite.Designer/AssemblyInfo.cs
+++ SQLite.Designer/AssemblyInfo.cs
@@ -41,7 +41,7 @@
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.83.0")]
-[assembly: AssemblyFileVersion("1.0.83.0")]
+[assembly: AssemblyVersion("1.0.85.0")]
+[assembly: AssemblyFileVersion("1.0.85.0")]
Index: SQLite.Designer/source.extension.vsixmanifest
==================================================================
--- SQLite.Designer/source.extension.vsixmanifest
+++ SQLite.Designer/source.extension.vsixmanifest
@@ -1,11 +1,11 @@
System.Data.SQLite Designer
http://system.data.sqlite.org/
- 1.0.83.0
+ 1.0.85.0
ADO.NET Data Designer for SQLite
1033
false
Index: SQLite.Interop/SQLite.Interop.2010.vcxproj
==================================================================
--- SQLite.Interop/SQLite.Interop.2010.vcxproj
+++ SQLite.Interop/SQLite.Interop.2010.vcxproj
@@ -6,10 +6,14 @@
* Written by Joe Mistachkin.
* Released to the public domain, use at your own risk!
*
-->
+
+ $(MSBuildProjectDirectory)\..
+
+
DebugNativeOnly
x64
Index: SQLite.Interop/SQLite.Interop.2012.vcxproj
==================================================================
--- SQLite.Interop/SQLite.Interop.2012.vcxproj
+++ SQLite.Interop/SQLite.Interop.2012.vcxproj
@@ -6,10 +6,14 @@
* Written by Joe Mistachkin.
* Released to the public domain, use at your own risk!
*
-->
+
+ $(MSBuildProjectDirectory)\..
+
+
DebugNativeOnly
x64
Index: SQLite.Interop/SQLite.Interop.Static.2010.vcxproj
==================================================================
--- SQLite.Interop/SQLite.Interop.Static.2010.vcxproj
+++ SQLite.Interop/SQLite.Interop.Static.2010.vcxproj
@@ -6,10 +6,14 @@
* Written by Joe Mistachkin.
* Released to the public domain, use at your own risk!
*
-->
+
+ $(MSBuildProjectDirectory)\..
+
+
DebugNativeOnly
x64
Index: SQLite.Interop/SQLite.Interop.Static.2012.vcxproj
==================================================================
--- SQLite.Interop/SQLite.Interop.Static.2012.vcxproj
+++ SQLite.Interop/SQLite.Interop.Static.2012.vcxproj
@@ -6,10 +6,14 @@
* Written by Joe Mistachkin.
* Released to the public domain, use at your own risk!
*
-->
+
+ $(MSBuildProjectDirectory)\..
+
+
DebugNativeOnly
x64
Index: SQLite.Interop/props/SQLite.Interop.2005.vsprops
==================================================================
--- SQLite.Interop/props/SQLite.Interop.2005.vsprops
+++ SQLite.Interop/props/SQLite.Interop.2005.vsprops
@@ -17,31 +17,31 @@
Value="2005"
PerformEnvironmentSet="true"
/>
2010
- 083
+ 085
1.0
- 1.0.83.0
- 1,0,83,0
- INTEROP_DEBUG=0x307;INTEROP_TEST_EXTENSION=1
+ 1.0.85.0
+ 1,0,85,0
+ INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1
INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1
/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp
$(ProjectDir)..\System.Data.SQLite\System.Data.SQLite.snk
SQLite.Interop
System.Data.SQLite
Index: SQLite.Interop/props/SQLite.Interop.2012.props
==================================================================
--- SQLite.Interop/props/SQLite.Interop.2012.props
+++ SQLite.Interop/props/SQLite.Interop.2012.props
@@ -8,15 +8,15 @@
*
-->
2012
- 083
+ 085
1.0
- 1.0.83.0
- 1,0,83,0
- INTEROP_DEBUG=0x307;INTEROP_TEST_EXTENSION=1
+ 1.0.85.0
+ 1,0,85,0
+ INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1
INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1
/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp
$(ProjectDir)..\System.Data.SQLite\System.Data.SQLite.snk
SQLite.Interop
System.Data.SQLite
Index: SQLite.Interop/props/sqlite3.props
==================================================================
--- SQLite.Interop/props/sqlite3.props
+++ SQLite.Interop/props/sqlite3.props
@@ -7,12 +7,12 @@
* Released to the public domain, use at your own risk!
*
-->
- 3.7.15
- 3,7,15
+ 3.7.15.2
+ 3,7,15,2
_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;SQLITE_THREADSAFE=1;SQLITE_USE_URI=1;SQLITE_ENABLE_COLUMN_METADATA=1;SQLITE_ENABLE_STAT3=1;SQLITE_ENABLE_FTS3=1;SQLITE_ENABLE_LOAD_EXTENSION=1;SQLITE_ENABLE_RTREE=1;SQLITE_SOUNDEX=1
SQLITE_HAS_CODEC=1
SQLITE_OMIT_WAL=1
SQLITE_DEBUG=1;SQLITE_MEMDEBUG=1;SQLITE_ENABLE_EXPENSIVE_ASSERT=1
SQLITE_WIN32_MALLOC=1
Index: SQLite.Interop/props/sqlite3.vsprops
==================================================================
--- SQLite.Interop/props/sqlite3.vsprops
+++ SQLite.Interop/props/sqlite3.vsprops
@@ -12,16 +12,16 @@
Version="8.00"
Name="sqlite3"
>
**
**
+