Index: Doc/Extra/Provider/dbfactorysupport.html ================================================================== --- Doc/Extra/Provider/dbfactorysupport.html +++ Doc/Extra/Provider/dbfactorysupport.html @@ -83,11 +83,11 @@ <DbProviderFactories> <remove invariant="System.Data.SQLite"/> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, - Version=1.0.95.0, Culture=neutral, + Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/> </DbProviderFactories> </system.data> </configuration> @@ -103,15 +103,15 @@ }
Index: Doc/Extra/Provider/designer.html ================================================================== --- Doc/Extra/Provider/designer.html +++ Doc/Extra/Provider/designer.html @@ -63,11 +63,11 @@


Index: Doc/Extra/Provider/environment.html ================================================================== --- Doc/Extra/Provider/environment.html +++ Doc/Extra/Provider/environment.html @@ -193,11 +193,11 @@
Index: Doc/Extra/Provider/limitations.html ================================================================== --- Doc/Extra/Provider/limitations.html +++ Doc/Extra/Provider/limitations.html @@ -96,11 +96,11 @@ other thread will block until the CommandTimeout value elapses or the other thread finishes.


Index: Doc/Extra/Provider/optimizing.html ================================================================== --- Doc/Extra/Provider/optimizing.html +++ Doc/Extra/Provider/optimizing.html @@ -120,11 +120,11 @@ line.


Index: Doc/Extra/Provider/version.html ================================================================== --- Doc/Extra/Provider/version.html +++ Doc/Extra/Provider/version.html @@ -41,10 +41,15 @@

Version History

+

1.0.96.0 - March 5, 2015

+

1.0.95.0 - March 2, 2015


Index: Doc/Extra/Provider/welcome.html ================================================================== --- Doc/Extra/Provider/welcome.html +++ Doc/Extra/Provider/welcome.html @@ -158,17 +158,17 @@

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. "095").  The + the System.Data.SQLite library (e.g. "096").  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: Doc/SQLite.NET.ndoc ================================================================== --- Doc/SQLite.NET.ndoc +++ Doc/SQLite.NET.ndoc @@ -13,11 +13,11 @@ - + Index: Externals/Eagle/lib/Eagle1.0/init.eagle ================================================================== --- Externals/Eagle/lib/Eagle1.0/init.eagle +++ Externals/Eagle/lib/Eagle1.0/init.eagle @@ -837,13 +837,16 @@ # accessor method. # set process [$array -alias GetValue $index] # - # NOTE: Add the Id of the process to the result list. + # NOTE: Add the Id of the process to the result list. This + # may fail on some versions of Mono. # - lappend result [$process Id] + if {[catch {$process Id} id] == 0} then { + lappend result $id + } # # NOTE: Get rid of the process object, we no longer need it. # Technically, it is not a requirement to explicitly # unset variables that contain object references; @@ -1239,15 +1242,44 @@ set command [list exec -shell -- \ [file join $directory Hippogriff.exe] -delay 2000] if {$automatic} then { - eval lappend command -silent true -confirm false + lappend command -silent true -confirm false + } + + set baseUri [getUpdateBaseUri] + + if {[string length $baseUri] > 0} then { + lappend command -baseUri $baseUri } eval $command &; exit -force } + + proc getUpdateBaseUri {} { + # + # NOTE: Check the current base URI for updates against the one baked + # into the assembly. If they are different, then the base URI + # must have been overridden. In that case, we must return the + # current base URI; otherwise, we must return an empty string. + # + set baseUri(0) [info engine UpdateBaseUri false]; # NOTE: Current. + set baseUri(1) [info engine UpdateBaseUri true]; # NOTE: Default. + + if {[string length $baseUri(0)] > 0 && \ + [string length $baseUri(1)] > 0} then { + # + # NOTE: Ok, they are both valid. Are they different? + # + if {$baseUri(0) ne $baseUri(1)} then { + return $baseUri(0) + } + } + + return "" + } proc getUpdateData { uri } { # # NOTE: Start trusting ONLY our own self-signed SSL certificate. # @@ -1311,14 +1343,19 @@ # proc checkForUpdate { {wantScripts false} {quiet false} {prompt false} {automatic false} } { # - # NOTE: This should work properly in Eagle only. + # NOTE: Grab the base URI for updates. + # + set updateBaseUri [info engine UpdateBaseUri] + + # + # NOTE: Append the path and query string used for updates to it. # set updateUri [appendArgs \ - [info engine UpdateBaseUri] [info engine UpdatePathAndQuery]] + $updateBaseUri [info engine UpdatePathAndQuery]] # # NOTE: Fetch the master update data from the distribution site # and normalize to Unix-style line-endings. # @@ -1425,18 +1462,26 @@ if {[string length $timeStamp] == 0} then { set timeStamp 0; #never? } + # + # NOTE: What should the DateTime format be for display? This + # should be some variation on ISO-8601. + # + set dateTimeFormat yyyy-MM-ddTHH:mm:ss + # # NOTE: Does it look like the number of seconds since the epoch # or some kind of date/time string? # if {[string is integer -strict $timeStamp]} then { - set dateTime [clock format $timeStamp] + set dateTime [clock format \ + $timeStamp -format $dateTimeFormat] } else { - set dateTime [clock format [clock scan $timeStamp]] + set dateTime [clock format \ + [clock scan $timeStamp] -format $dateTimeFormat] } # # NOTE: Grab the patch level for the running engine. # @@ -1454,13 +1499,15 @@ # # NOTE: Does it look like the number of seconds since the epoch # or some kind of date/time string? # if {[string is integer -strict $engineTimeStamp]} then { - set engineDateTime [clock format $engineTimeStamp] + set engineDateTime [clock format \ + $engineTimeStamp -format $dateTimeFormat] } else { - set engineDateTime [clock format [clock scan $engineTimeStamp]] + set engineDateTime [clock format \ + [clock scan $engineTimeStamp] -format $dateTimeFormat] } # # NOTE: For build lines, compare the patch level from the line # to the one we are currently using using a simple patch @@ -1534,11 +1581,12 @@ # if any, to upgrade now? # set text [appendArgs \ "latest build " $patchLevel ", dated " $dateTime \ ", is newer than the running build " $enginePatchLevel \ - ", dated " $engineDateTime] + ", dated " $engineDateTime ", based on data from " \ + $updateBaseUri] if {$prompt && [isInteractive]} then { set caption [appendArgs \ [info engine Name] " " [lindex [info level 0] 0]] @@ -1773,18 +1821,20 @@ # up-to-date than the latest version? # return [list [appendArgs \ "running build " $enginePatchLevel ", dated " \ $engineDateTime ", is newer than the latest build " \ - $patchLevel ", dated " $dateTime]] + $patchLevel ", dated " $dateTime ", based on data " \ + "from " $updateBaseUri]] } elseif {$checkBuild} then { # # NOTE: The patch levels are equal, we are up-to-date. # return [list [appendArgs \ "running build " $enginePatchLevel ", dated " \ - $engineDateTime ", is the latest build"]] + $engineDateTime ", is the latest build, based on " \ + "data from " $updateBaseUri]] } } } } } Index: Externals/Eagle/lib/Eagle1.0/test.eagle ================================================================== --- Externals/Eagle/lib/Eagle1.0/test.eagle +++ Externals/Eagle/lib/Eagle1.0/test.eagle @@ -485,12 +485,12 @@ # TODO: Add more support for standard tcltest options here. # set options [list \ -breakOnLeak -configuration -constraints -exitOnComplete -file \ -logFile -machine -match -no -notFile -platform -postTest -preTest \ - -randomOrder -skip -startFile -stopFile -stopOnFailure -stopOnLeak \ - -suffix -suite -tclsh -threshold] + -postWait -preWait -randomOrder -skip -startFile -stopFile \ + -stopOnFailure -stopOnLeak -suffix -suite -tclsh -threshold] set length [llength $args] for {set index 0} {$index < $length} {incr index} { # @@ -1972,17 +1972,51 @@ } else { set before $::tcltest::numTests(Failed) } # - # NOTE: Evaluate the file in the context of the caller, - # catching any errors. If an error is raised and the - # stop-on-failure flag is set, assume it was a test - # failure and that we need to stop any and all further - # processing of test files. + # NOTE: Evaluate the test file, optionally waiting for a certain + # number of milliseconds before and/or after doing so. # - if {[catch {uplevel 1 [list source $fileName]} error]} then { + if {[catch { + # + # NOTE: Are we being prevented from waiting before the file? + # + if {![info exists ::no(preWait)]} then { + if {[info exists ::test_wait(pre)] && \ + [string is integer -strict $::test_wait(pre)]} then { + tputs $channel [appendArgs \ + "---- waiting for " $::test_wait(pre) \ + " milliseconds before test file...\n"] + + after $::test_wait(pre); # NOTE: Sleep. + } + } + + # + # NOTE: Evaluate the file in the context of the caller, + # catching any errors. If an error is raised and the + # stop-on-failure flag is set, assume it was a test + # failure and that we need to stop any and all further + # processing of test files. + # + uplevel 1 [list source $fileName] + + # + # NOTE: Are we being prevented from waiting after the file? + # + if {![info exists ::no(postWait)]} then { + if {[info exists ::test_wait(post)] && \ + [string is integer -strict $::test_wait(post)]} then { + tputs $channel [appendArgs \ + "---- waiting for " $::test_wait(post) \ + " milliseconds after test file...\n"] + + after $::test_wait(post); # NOTE: Sleep. + } + } + } error]} then { # # NOTE: Most likely, this error was caused by malformed or # incorrect code in-between the tests themselves. We # need to report this. # @@ -2565,10 +2599,53 @@ return true; # already dead? } return false; # still alive (or error). } + + proc reportTestConstraintCounts { channel skippedNames } { + # + # NOTE: Process the list of skipped tests, which is really a dictionary + # of test names to the list of constraints that caused them to be + # skipped. We need to "roll them up", on a per-constraint basis, + # and produce counts for each constraint. At the same time, we + # need to keep track of the maximum count seen, to help align the + # final output. + # + set maximum 0 + + foreach {testName constraintNames} $skippedNames { + foreach constraintName $constraintNames { + if {[info exists skippedCounts($constraintName)]} then { + incr skippedCounts($constraintName) + } else { + set skippedCounts($constraintName) 1 + } + + if {$skippedCounts($constraintName) > $maximum} then { + set maximum $skippedCounts($constraintName) + } + } + } + + # + # NOTE: Produce the final output, which includes a single line header + # followed by one line per test constraint seen. + # + if {$maximum > 0 && [array size skippedCounts] > 0} then { + set places [expr {int(log10($maximum)) + 1}] + + tputs $channel "Number of tests skipped for each constraint:\n" + + foreach {name value} [array get skippedCounts] { + tputs $channel [appendArgs \ + \t [format [appendArgs % $places s] $value] \t $name \n] + } + + tputs $channel \n + } + } proc purgeAndCleanup { channel name } { catch {uplevel 1 [list debug purge]} result tputs $channel [appendArgs \ Index: Externals/Eagle/lib/Test1.0/constraints.eagle ================================================================== --- Externals/Eagle/lib/Test1.0/constraints.eagle +++ Externals/Eagle/lib/Test1.0/constraints.eagle @@ -41,12 +41,12 @@ NOTIFY_EXCEPTION NOTIFY_EXECUTE NOTIFY_EXPRESSION NOTIFY_GLOBAL \ NOTIFY_OBJECT OBSOLETE OFFICIAL PARSE_CACHE PATCHLEVEL POLICY_TRACE \ PREVIOUS_RESULT RANDOMIZE_ID REMOTING SAMPLE SERIALIZATION \ SHARED_ID_POOL SHELL SOURCE_ID SOURCE_TIMESTAMP STATIC TCL TCL_KITS \ TCL_THREADED TCL_THREADS TCL_UNICODE TCL_WRAPPER TEST THREADING \ - THROW_ON_DISPOSED TRACE TYPE_CACHE UNIX VERBOSE WEB WINDOWS WINFORMS \ - WIX_30 WIX_35 WIX_36 WIX_37 WIX_38 X64 X86 XML] + THROW_ON_DISPOSED TRACE TYPE_CACHE UNIX USE_NAMESPACES VERBOSE WEB \ + WINDOWS WINFORMS WIX_30 WIX_35 WIX_36 WIX_37 WIX_38 WIX_39 X64 X86 XML] } proc getKnownMonoVersions {} { # # NOTE: This job of this procedure is to return the list of "known" @@ -53,11 +53,11 @@ # versions of Mono supported by the test suite infrastructure. # return [list \ [list 2 0] [list 2 2] [list 2 4] [list 2 6] [list 2 8] [list 2 10] \ [list 2 11] [list 2 12] [list 3 0] [list 3 1] [list 3 2] [list 3 3] \ - [list 3 4] [list 3 5] [list 3 6]] + [list 3 4] [list 3 5] [list 3 6] [list 3 8] [list 3 10] [list 3 12]] } # # NOTE: This procedure was adapted from the one listed on the Tcl Wiki page # at "http://wiki.tcl.tk/43". It is only intended to be used on very @@ -104,10 +104,31 @@ return [expr { [catch {interp readylimit {}} readylimit] != 0 || $readylimit == 0 }] } + # + # NOTE: This procedure should return non-zero if the "whoami" command may + # be executed by the test suite infrastructure outside the context + # of any specific tests. + # + proc canExecWhoAmI {} { + if {[info exists ::no(exec)]} then { + return false + } + + if {[info exists ::no(whoami)]} then { + return false + } + + if {[info exists ::no(canExecWhoAmI)]} then { + return false + } + + return true + } + # # NOTE: This procedure should return non-zero if the native Tcl shell may # be executed by the test suite infrastructure outside the context # of any specific tests. The specific tests themselves must make # use of their own constraints to prevent execution of the native @@ -148,10 +169,113 @@ return false } return true } + + # + # NOTE: This procedure should return non-zero if the test suite should be + # considered to be running on Mono. + # + proc isTestMono {} { + return [expr {![info exists ::no(mono)] && [isMono]}] + } + + proc isTestAdministrator { {force false} } { + # + # NOTE: This is a workaround for the [isAdministrator] procedure being + # inaccurate for Mono on Windows, primarily due to the inability + # of Mono to call a P/Invoke method by ordinal. Also, this can + # be used for native Tcl on Windows. This only works on Windows. + # + if {[isWindows]} then { + # + # NOTE: Normally, this is only used for native Tcl or Eagle on Mono; + # however, it can be used for Eagle on the .NET Framework if + # forced. + # + if {$force || ![isEagle] || [isTestMono]} then { + if {[canExecWhoAmI] && \ + [catch {exec -- whoami /groups} groups] == 0} then { + set groups [string map [list \r\n \n] $groups] + + foreach group [split $groups \n] { + # + # NOTE: Match this group line against the "well-known" SID for + # the "Administrators" group on Windows. + # + if {[regexp -- {\sS-1-5-32-544\s} $group]} then { + # + # NOTE: Match this group line against the attributes column + # sub-value that should be present when running with + # elevated administrator credentials. + # + if {[regexp -- {\sEnabled group(?:,|\s)} $group]} then { + return true + } + } + } + } + } + } + + # + # NOTE: We must be running in native Tcl, running on Unix, running in + # Eagle on the .NET Framework, or unable to execute the "whoami" + # command. If running in Eagle, we can just fallback to using + # the [isAdministrator] procedure; otherwise, just return false. + # + return [expr {[isEagle] ? [isAdministrator] : false}] + } + + proc canPing { {varName ""} } { + # + # NOTE: If requested by the caller, provide a reason whenever false is + # returned from this procedure. + # + if {[string length $varName] > 0} then { + upvar 1 $varName reason + } + + # + # NOTE: Native Tcl (without extra packages) does not provide support for + # pinging a network host. + # + if {[isEagle]} then { + if {[isTestMono]} then { + # + # NOTE: Using [uri ping] on the Mono 3.3.0 (or 3.4.0?) release will + # lock up the process; therefore, skip it in that case. + # + if {[haveConstraint mono33] || [haveConstraint mono34]} then { + set reason "skipped, may hang on Mono 3.3.0 and 3.4.0" + return false + } + + # + # NOTE: Other versions of Mono, e.g. 3.12, appear to require elevated + # privileges (i.e. full administrator) in order to successfully + # execute [uri ping]. This has been verified on Windows. + # + if {![isTestAdministrator]} then { + set reason "skipped, need administrator privileges" + return false + } + } + + # + # NOTE: Eagle, when running on the Microsoft .NET Framework, supports + # pinging a network host as long as it was compiled with network + # support (which this procedure purposely does not check). That + # is done using [checkForCompileOption], by the test prologue. + # + return true + } + + set reason "skipped, need Eagle" + return false + } proc checkForTestSuiteFiles { channel } { tputs $channel "---- checking for test suite files... " # @@ -1429,12 +1553,11 @@ # # MONO: Using the native utility library when running on Mono to # join big lists seems to cause StackOverflowException to # be thrown. # - if {[info exists ::no(mono)] || ![isMono] || \ - ![haveConstraint nativeUtility]} then { + if {![isTestMono] || ![haveConstraint nativeUtility]} then { # # NOTE: Yes, it appears that it is available. # addConstraint bigLists @@ -1449,10 +1572,25 @@ } } else { tputs $channel no\n } } + + proc checkForTimeIntensive { channel } { + tputs $channel "---- checking for time intensive testing... " + + # + # NOTE: Are we allowed to do time intensive testing? + # + if {![info exists ::no(timeIntensive)]} then { + addConstraint timeIntensive + + tputs $channel yes\n + } else { + tputs $channel no\n + } + } proc checkForMemoryIntensive { channel } { tputs $channel "---- checking for memory intensive testing... " # @@ -1571,12 +1709,13 @@ if {[isEagle]} then { # # NOTE: Running this check on the Mono 3.3.0 (or 3.4.0?) release build # will lock up the process; therefore, skip it in that case. # - if {[info exists ::no(mono)] || ![isMono] || \ - (![haveConstraint mono33] && ![haveConstraint mono34])} then { + set reason unknown + + if {[canPing reason]} then { # # BUGBUG: Tcl 8.4 does not like this expression (and Tcl tries to # compile it even though it will only actually ever be # evaluated in Eagle). # @@ -1598,11 +1737,11 @@ tputs $channel [appendArgs "yes (" $response ")\n"] } else { tputs $channel no\n } } else { - tputs $channel "skipped, may hang on Mono 3.3.0 and 3.4.0\n" + tputs $channel [appendArgs $reason \n] } } else { # # HACK: Running in Tcl, just assume we have network access. # @@ -1815,21 +1954,32 @@ } proc checkForCertificate { channel } { tputs $channel "---- checking for certificate... " - if {[catch {object invoke Interpreter.GetActive GetCertificate} \ - certificate] == 0 && \ - [string length $certificate] > 0} then { + if {[catch { + object invoke Interpreter.GetActive GetCertificate + } certificate] == 0 && [string length $certificate] > 0} then { # # NOTE: Yes, it appears that the core library was signed with a # code-signing certificate. # addConstraint certificate - tputs $channel [appendArgs "yes (" \ - [object invoke $certificate Subject] ")\n"] + # + # NOTE: Attempt to query the subject from the certificate. + # + if {[catch { + object invoke $certificate Subject + } subject] != 0 || [string length $subject] == 0} then { + # + # TODO: No certificate subject, better handling here? + # + set subject unknown + } + + tputs $channel [appendArgs "yes (" $subject ")\n"] } else { tputs $channel no\n } } @@ -1846,11 +1996,11 @@ } proc checkForAdministrator { channel } { tputs $channel "---- checking for administrator... " - if {[isAdministrator]} then { + if {[isTestAdministrator]} then { addConstraint administrator; # running as full admin. tputs $channel yes\n } else { tputs $channel no\n @@ -1917,20 +2067,31 @@ } proc checkForDefaultAppDomain { channel } { tputs $channel "---- checking for default application domain... " - if {[catch {object invoke AppDomain CurrentDomain} appDomain] == 0 && \ - [string length $appDomain] > 0} then { - if {[object invoke $appDomain IsDefaultAppDomain]} then { + if {[catch { + object invoke AppDomain CurrentDomain + } appDomain] == 0 && [string length $appDomain] > 0} then { + if {[catch { + object invoke $appDomain IsDefaultAppDomain + } default] != 0 || [string length $default] == 0} then { + set default false + } + + if {[catch { + object invoke $appDomain Id + } id] != 0 || [string length $id] == 0} then { + set id unknown + } + + if {$default} then { addConstraint defaultAppDomain - tputs $channel [appendArgs "yes (" [object invoke $appDomain Id] \ - ")\n"] + tputs $channel [appendArgs "yes (" $id ")\n"] } else { - tputs $channel [appendArgs "no (" [object invoke $appDomain Id] \ - ")\n"] + tputs $channel [appendArgs "no (" $id ")\n"] } } else { tputs $channel [appendArgs "no (null)\n"] } } @@ -1939,11 +2100,11 @@ tputs $channel "---- checking for runtime... " # # NOTE: Are we running inside Mono (regardless of operating system)? # - if {![info exists ::no(mono)] && [isMono]} then { + if {[isTestMono]} then { # # NOTE: Yes, it appears that we are running inside Mono. # addConstraint mono; # running on Mono. @@ -2046,11 +2207,11 @@ # NOTE: Now create a version string for use in the constraint name # (remove the periods). # set version [string map [list . ""] $dotVersion] - if {![info exists ::no(mono)] && [isMono]} then { + if {[isTestMono]} then { # # NOTE: If the runtime version was found, add a test constraint # for it now. # if {[string length $version] > 0} then { @@ -2473,11 +2634,11 @@ # # HACK: Disable database connectivity testing on Mono because # it fails to timeout (unless special test suite hacks # for Mono have been disabled by the user). # - if {[info exists ::no(mono)] || ![isMono]} then { + if {![isTestMono]} then { # # NOTE: Can we access the local database? # if {[catch {sql open -type $type $string} connection] == 0} then { # @@ -2967,10 +3128,70 @@ } } else { tputs $channel no\n } } + + proc checkForNetFx20ServicePack { channel } { + tputs $channel "---- checking for .NET Framework 2.0 Service Pack... " + + # + # NOTE: Platform must be Windows for this constraint to even be + # checked (i.e. we require the registry). + # + if {[isWindows]} then { + # + # NOTE: Registry hive where the .NET Framework 2.0 setup and + # servicing information is stored. No need to look in + # the WoW64 registry because the .NET Framework should + # be installed natively as well. + # + set key [appendArgs HKEY_LOCAL_MACHINE\\ \ + {Software\Microsoft\NET Framework Setup\NDP\v2.0.50727}] + + # + # NOTE: Attempt to fetch the .NET Framework 2.0 "SP" value from the + # servicing registry hive. If this value does not exist -OR- + # is less than 1, then no .NET Framework 2.0 service pack is + # installed. If this raises a script error, that will almost + # certainly cause the result to be a non-integer, this failing + # the check below. + # + catch { + object invoke Microsoft.Win32.Registry GetValue $key SP null + } servicePack + + if {[string is integer -strict $servicePack]} then { + # + # NOTE: Service packs are always cumulative; therefore, add test + # constraints for all service pack levels up to the one that + # is actually installed. + # + for {set level 0} {$level <= $servicePack} {incr level} { + addConstraint [appendArgs dotNet20Sp $level OrHigher] + } + + # + # NOTE: Also add the "exact" service pack test constraint even + # though it should almost never be used. + # + addConstraint [appendArgs dotNet20Sp $servicePack] + + # + # NOTE: Show the "servicePack" value we found in the registry. + # + tputs $channel [appendArgs "yes (" $servicePack ")\n"] + + # + # NOTE: We are done here, return now. + # + return + } + } + + tputs $channel no\n + } proc checkForNetFx45 { channel } { tputs $channel "---- checking for .NET Framework 4.5... " # @@ -2989,26 +3210,38 @@ # # NOTE: Attempt to fetch the .NET Framework 4.0 "release" value from # the servicing registry hive. If this value does not exist # -OR- is less than 378389, then the .NET Framework 4.5 is not - # installed. + # installed. If this raises a script error, that will almost + # certainly cause the result to be a non-integer, this failing + # the check below. # - set release [object invoke Microsoft.Win32.Registry GetValue $key \ - Release null] + catch { + object invoke Microsoft.Win32.Registry GetValue $key Release null + } release if {[string is integer -strict $release] && $release >= 378389} then { # # NOTE: Yes, it appears that it is available. # addConstraint dotNet45OrHigher # - # NOTE: If the "release" value is greater than or equal to 378758, - # then the .NET Framework 4.5.1 is installed. + # NOTE: If the "release" value is greater than or equal to 378758 + # (or 378675 for Windows 8.1), then the .NET Framework 4.5.1 + # is installed. However, if the "release" value is also + # greater than or equal to 379893, then the .NET Framework + # 4.5.2 is installed, which is an in-place upgrade to 4.5.1 + # (and 4.5). # - if {$release >= 378758} then { + if {$release >= 379893} then { + addConstraint dotNet452 + addConstraint dotNet452OrHigher + + set version 4.5.2 + } elseif {$release >= 378675} then { addConstraint dotNet451 addConstraint dotNet451OrHigher set version 4.5.1 } else { @@ -3230,25 +3463,25 @@ # NOTE: We need several of our test constraint related commands in the # global namespace. # exportAndImportPackageCommands [namespace current] [list \ getKnownCompileOptions getKnownMonoVersions lpermute \ - alwaysFullInterpReady canExecTclShell canExecFossil \ - checkForTestSuiteFiles checkForPlatform checkForWindowsVersion \ - checkForScriptLibrary checkForVariable checkForTclOptions \ - checkForWindowsCommandProcessor checkForFossil checkForEagle \ - checkForSymbols checkForLogFile checkForGaruda checkForShell \ - checkForDebug checkForTk checkForVersion checkForCommand \ - checkForNamespaces checkForTestExec checkForTestMachine \ - checkForTestPlatform checkForTestConfiguration checkForTestSuffix \ - checkForFile checkForPathFile checkForNativeCode checkForTip127 \ - checkForTip194 checkForTip207 checkForTip241 checkForTip285 \ - checkForTip405 checkForTip426 checkForTip429 checkForTiming \ - checkForPerformance checkForBigLists checkForMemoryIntensive \ - checkForStackIntensive checkForInteractive checkForInteractiveCommand \ - checkForUserInteraction checkForNetwork checkForCompileOption \ - checkForKnownCompileOptions] false false + alwaysFullInterpReady canExecWhoAmI canExecTclShell canExecFossil \ + isTestMono isTestAdministrator canPing checkForTestSuiteFiles \ + checkForPlatform checkForWindowsVersion checkForScriptLibrary \ + checkForVariable checkForTclOptions checkForWindowsCommandProcessor \ + checkForFossil checkForEagle checkForSymbols checkForLogFile \ + checkForGaruda checkForShell checkForDebug checkForTk checkForVersion \ + checkForCommand checkForNamespaces checkForTestExec \ + checkForTestMachine checkForTestPlatform checkForTestConfiguration \ + checkForTestSuffix checkForFile checkForPathFile checkForNativeCode \ + checkForTip127 checkForTip194 checkForTip207 checkForTip241 \ + checkForTip285 checkForTip405 checkForTip426 checkForTip429 \ + checkForTiming checkForPerformance checkForBigLists \ + checkForTimeIntensive checkForMemoryIntensive checkForStackIntensive \ + checkForInteractive checkForInteractiveCommand checkForUserInteraction \ + checkForNetwork checkForCompileOption checkForKnownCompileOptions] false false ########################################################################### ############################## END Tcl ONLY ############################### ########################################################################### } Index: Externals/Eagle/lib/Test1.0/epilogue.eagle ================================================================== --- Externals/Eagle/lib/Test1.0/epilogue.eagle +++ Externals/Eagle/lib/Test1.0/epilogue.eagle @@ -153,10 +153,11 @@ } unset -nocomplain name count tputs $test_channel \n; # NOTE: Blank line. + reportTestConstraintCounts $test_channel $eagle_tests(SkippedNames) if {$eagle_tests(Passed) > 0} then { tresult Ok [appendArgs "PASSED: " $eagle_tests(Passed) \n] } Index: Externals/Eagle/lib/Test1.0/prologue.eagle ================================================================== --- Externals/Eagle/lib/Test1.0/prologue.eagle +++ Externals/Eagle/lib/Test1.0/prologue.eagle @@ -20,12 +20,12 @@ } # # 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 \ + unset -nocomplain pkg_dir pattern dummy directory name value exec encoding \ + host memory stack drive publicKeyToken expr server database timeout \ user password percent checkout timeStamp loaded # # NOTE: Indicate that the test suite is currently running. # @@ -302,10 +302,12 @@ set test_flags(-stopOnFailure) ""; # default to continue on failure. set test_flags(-stopOnLeak) ""; # default to continue on leak. 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(-preWait) ""; # default to not waiting. + set test_flags(-postWait) ""; # default to not waiting. set test_flags(-tclsh) ""; # Tcl shell, default to empty. # # NOTE: Check for and process any command line arguments. # @@ -401,10 +403,26 @@ # # NOTE: Set the pre-test script to the one provided by the command line. # set test_script(post) $test_flags(-postTest) } + + if {[info exists test_flags(-preWait)] && \ + [string is integer -strict $test_flags(-preWait)]} then { + # + # NOTE: Set the specified wait (in milliseconds) before each file. + # + set test_wait(pre) $test_flags(-preWait) + } + + if {[info exists test_flags(-postWait)] && \ + [string is integer -strict $test_flags(-postWait)]} then { + # + # NOTE: Set the specified wait (in milliseconds) after each file. + # + set test_wait(post) $test_flags(-postWait) + } } # # NOTE: Set the default test suite name, if necessary. # @@ -555,10 +573,26 @@ tputs $test_channel [appendArgs "---- post-test script: " \ [expr {[info exists test_script(post)] && \ [string length $test_script(post)] > 0 ? \ [appendArgs \" $test_script(post) \"] : ""}] \n] + # + # NOTE: Show both the pre-test and post-test waits now, prior to actually + # using either of them (even if their use has been disabled). + # + tputs $test_channel [appendArgs "---- pre-test wait: " \ + [expr {[info exists test_wait(pre)] && \ + [string is integer -strict $test_wait(pre)] ? \ + [appendArgs $test_wait(pre) " milliseconds"] : \ + ""}] \n] + + tputs $test_channel [appendArgs "---- post-test wait: " \ + [expr {[info exists test_wait(post)] && \ + [string is integer -strict $test_wait(post)] ? \ + [appendArgs $test_wait(post) " milliseconds"] : \ + ""}] \n] + # # NOTE: Are we being prevented from evaluating the "pre-test" script? # if {![info exists no(preTest)]} then { # @@ -808,11 +842,11 @@ # NOTE: If the "no(mono)" variable is set (to anything) then any # special test suite hacks for Mono will be disabled. This # does not control or change any hacks for Mono that may # be present in the library itself. # - # if {![info exists no(mono)] && [isMono]} then { + # if {[isTestMono]} then { # set no(mono) true # } ########################################################################### ######################### BEGIN Eagle Constraints ######################### @@ -1474,10 +1508,24 @@ # # NOTE: Has custom test method support been disabled? # if {![info exists no(core)] && ![info exists no(test)]} then { + # + # NOTE: Has plugin policy testing support been disabled? + # + if {![info exists no(testPluginPolicy)]} then { + # + # NOTE: For tests "load-2.0" and "load-2.1". + # + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestAddLoadPluginPolicy* + + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestLoadPluginPolicy* + } + # # NOTE: Has script stream testing support been disabled? # if {![info exists no(testScriptStream)]} then { # @@ -1484,18 +1532,43 @@ # NOTE: For tests "basic-1.46" and "basic-1.47". # checkForObjectMember $test_channel Eagle._Tests.Default \ *TestScriptStream* } + + # + # NOTE: Has complaint testing support been disabled? + # + if {![info exists no(testComplain)]} then { + # + # NOTE: For tests "debug-1.98" and "debug-1.99". + # + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestSetComplainCallback* + + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestComplainCallbackThrow* + + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestComplainCallbackNoThrow* + } if {![info exists no(testLoad)]} then { # # NOTE: For tests "load-1.6" and "load-1.7". # checkForObjectMember $test_channel Eagle._Tests.Default \ *TestLoadPluginViaBytes* } + + if {![info exists no(testPermute)]} then { + # + # NOTE: For test "lpermute-1.3". + # + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestPermute* + } # # NOTE: Has DateTime testing support been disabled? # if {![info exists no(testDateTime)]} then { @@ -1786,10 +1859,23 @@ # NOTE: For test "object-4.1". # checkForObjectMember $test_channel Eagle._Tests.Default \ *TestExpr* + # + # NOTE: For tests "basic-1.66", "basic-1.67", "basic-1.68", + # and "basic-1.69". + # + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestTakeEventHandler* + + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestTakeGenericEventHandler* + + checkForObjectMember $test_channel Eagle._Tests.Default \ + *TestTakeResolveEventHandler* + # # NOTE: For test "array-4.1". # checkForObjectMember $test_channel Eagle._Tests.Default \ *TestTwoByteArrays* @@ -1963,10 +2049,21 @@ # # NOTE: For tests "object-4.7", "object-4.8", and "object-4.9". # checkForPowerShell $test_channel } + + # + # NOTE: Has .NET Framework 2.0 Service Pack testing support been + # disabled? + # + if {![info exists no(netFx20Sp)]} then { + # + # NOTE: For test "hash-1.1". + # + checkForNetFx20ServicePack $test_channel + } # # NOTE: Has .NET Framework 4.5 testing support been disabled? # if {![info exists no(netFx45)]} then { @@ -2465,10 +2562,14 @@ } if {![info exists no(checkForBigLists)]} then { checkForBigLists $test_channel } + + if {![info exists no(checkForTimeIntensive)]} then { + checkForTimeIntensive $test_channel + } if {![info exists no(checkForMemoryIntensive)]} then { checkForMemoryIntensive $test_channel } Index: NuGet/SQLite.Beta.nuspec ================================================================== --- NuGet/SQLite.Beta.nuspec +++ NuGet/SQLite.Beta.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Beta System.Data.SQLite (x86/x64) Beta - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a "beta" package and is not intended for production use. The official SQLite database engine for both x86 and x64 along with the ADO.NET provider. This package includes support for LINQ and Entity Framework 6. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png @@ -20,41 +20,41 @@ https://www.sqlite.org/copyright.html sqlite database ado.net provider interop Public Domain - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + Index: NuGet/SQLite.Core.Beta.nuspec ================================================================== --- NuGet/SQLite.Core.Beta.nuspec +++ NuGet/SQLite.Core.Beta.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Core.Beta System.Data.SQLite Core (x86/x64) Beta - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a "beta" package and is not intended for production use. The official SQLite database engine for both x86 and x64 along with the ADO.NET provider. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.Core.MSIL.Beta.nuspec ================================================================== --- NuGet/SQLite.Core.MSIL.Beta.nuspec +++ NuGet/SQLite.Core.MSIL.Beta.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Core.MSIL.Beta System.Data.SQLite (MSIL) Beta - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a "beta" package and is not intended for production use. An ADO.NET provider for SQLite (managed-only). en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.Core.MSIL.Test.nuspec ================================================================== --- NuGet/SQLite.Core.MSIL.Test.nuspec +++ NuGet/SQLite.Core.MSIL.Test.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Core.MSIL.Test System.Data.SQLite (MSIL) Test - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a pre-release package and is not intended for production use. An ADO.NET provider for SQLite (managed-only). en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.Core.MSIL.nuspec ================================================================== --- NuGet/SQLite.Core.MSIL.nuspec +++ NuGet/SQLite.Core.MSIL.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Core.MSIL System.Data.SQLite (MSIL) - 1.0.95.0 + 1.0.96.0 SQLite Development Team An ADO.NET provider for SQLite (managed-only). en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.Core.Test.nuspec ================================================================== --- NuGet/SQLite.Core.Test.nuspec +++ NuGet/SQLite.Core.Test.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Core.Test System.Data.SQLite Core (x86/x64) Test - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a pre-release package and is not intended for production use. The official SQLite database engine for both x86 and x64 along with the ADO.NET provider. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.Core.nuspec ================================================================== --- NuGet/SQLite.Core.nuspec +++ NuGet/SQLite.Core.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Core System.Data.SQLite Core (x86/x64) - 1.0.95.0 + 1.0.96.0 SQLite Development Team The official SQLite database engine for both x86 and x64 along with the ADO.NET provider. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.EF6.Beta.nuspec ================================================================== --- NuGet/SQLite.EF6.Beta.nuspec +++ NuGet/SQLite.EF6.Beta.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.EF6.Beta System.Data.SQLite EF6 (x86/x64) Beta - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a "beta" package and is not intended for production use. Support for Entity Framework 6 using System.Data.SQLite. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.EF6.Test.nuspec ================================================================== --- NuGet/SQLite.EF6.Test.nuspec +++ NuGet/SQLite.EF6.Test.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.EF6.Test System.Data.SQLite EF6 (x86/x64) Test - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a pre-release package and is not intended for production use. Support for Entity Framework 6 using System.Data.SQLite. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.EF6.nuspec ================================================================== --- NuGet/SQLite.EF6.nuspec +++ NuGet/SQLite.EF6.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.EF6 System.Data.SQLite EF6 (x86/x64) - 1.0.95.0 + 1.0.96.0 SQLite Development Team Support for Entity Framework 6 using System.Data.SQLite. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.Linq.Beta.nuspec ================================================================== --- NuGet/SQLite.Linq.Beta.nuspec +++ NuGet/SQLite.Linq.Beta.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Linq.Beta System.Data.SQLite LINQ (x86/x64) Beta - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a "beta" package and is not intended for production use. Support for LINQ using System.Data.SQLite. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.Linq.Test.nuspec ================================================================== --- NuGet/SQLite.Linq.Test.nuspec +++ NuGet/SQLite.Linq.Test.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Linq.Test System.Data.SQLite LINQ (x86/x64) Test - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a pre-release package and is not intended for production use. Support for LINQ using System.Data.SQLite. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.Linq.nuspec ================================================================== --- NuGet/SQLite.Linq.nuspec +++ NuGet/SQLite.Linq.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Linq System.Data.SQLite LINQ (x86/x64) - 1.0.95.0 + 1.0.96.0 SQLite Development Team Support for LINQ using System.Data.SQLite. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png Index: NuGet/SQLite.MSIL.Beta.nuspec ================================================================== --- NuGet/SQLite.MSIL.Beta.nuspec +++ NuGet/SQLite.MSIL.Beta.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.MSIL.Beta System.Data.SQLite (MSIL) Beta - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a "beta" package and is not intended for production use. This is a legacy package; if possible, please use either the "System.Data.SQLite.Beta" or "System.Data.SQLite.Core.Beta" package instead. An ADO.NET provider for SQLite (managed-only). en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png @@ -20,41 +20,41 @@ https://www.sqlite.org/copyright.html sqlite database ado.net provider interop Public Domain - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + Index: NuGet/SQLite.MSIL.Test.nuspec ================================================================== --- NuGet/SQLite.MSIL.Test.nuspec +++ NuGet/SQLite.MSIL.Test.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.MSIL.Test System.Data.SQLite (MSIL) Test - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a pre-release package and is not intended for production use. This is a legacy package; if possible, please use either the "System.Data.SQLite.Test" or "System.Data.SQLite.Core.Test" package instead. An ADO.NET provider for SQLite (managed-only). en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png @@ -20,41 +20,41 @@ https://www.sqlite.org/copyright.html sqlite database ado.net provider interop Public Domain - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + Index: NuGet/SQLite.MSIL.nuspec ================================================================== --- NuGet/SQLite.MSIL.nuspec +++ NuGet/SQLite.MSIL.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.MSIL System.Data.SQLite (MSIL) - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a legacy package; if possible, please use either the "System.Data.SQLite" or "System.Data.SQLite.Core" package instead. An ADO.NET provider for SQLite (managed-only). en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png @@ -20,41 +20,41 @@ https://www.sqlite.org/copyright.html sqlite database ado.net provider interop Public Domain - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + Index: NuGet/SQLite.Test.nuspec ================================================================== --- NuGet/SQLite.Test.nuspec +++ NuGet/SQLite.Test.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite.Test System.Data.SQLite (x86/x64) Test - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a pre-release package and is not intended for production use. The official SQLite database engine for both x86 and x64 along with the ADO.NET provider. This package includes support for LINQ and Entity Framework 6. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png @@ -20,41 +20,41 @@ https://www.sqlite.org/copyright.html sqlite database ado.net provider interop Public Domain - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + Index: NuGet/SQLite.nuspec ================================================================== --- NuGet/SQLite.nuspec +++ NuGet/SQLite.nuspec @@ -9,11 +9,11 @@ --> System.Data.SQLite System.Data.SQLite (x86/x64) - 1.0.95.0 + 1.0.96.0 SQLite Development Team The official SQLite database engine for both x86 and x64 along with the ADO.NET provider. This package includes support for LINQ and Entity Framework 6. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png @@ -20,41 +20,41 @@ https://www.sqlite.org/copyright.html sqlite database ado.net provider interop Public Domain - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + Index: NuGet/SQLite.x64.nuspec ================================================================== --- NuGet/SQLite.x64.nuspec +++ NuGet/SQLite.x64.nuspec @@ -8,11 +8,11 @@ * --> System.Data.SQLite.x64 - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a legacy package; if possible, please use either the "System.Data.SQLite" or "System.Data.SQLite.Core" package instead. The official SQLite database engine combined with a complete ADO.NET provider all rolled into a single mixed-mode assembly for x64. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png @@ -19,29 +19,29 @@ https://www.sqlite.org/copyright.html sqlite database ado.net provider interop Public Domain - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + Index: NuGet/SQLite.x86.nuspec ================================================================== --- NuGet/SQLite.x86.nuspec +++ NuGet/SQLite.x86.nuspec @@ -8,11 +8,11 @@ * --> System.Data.SQLite.x86 - 1.0.95.0 + 1.0.96.0 SQLite Development Team This is a legacy package; if possible, please use either the "System.Data.SQLite" or "System.Data.SQLite.Core" package instead. The official SQLite database engine combined with a complete ADO.NET provider all rolled into a single mixed-mode assembly for x86. en-US https://system.data.sqlite.org/ https://system.data.sqlite.org/images/sqlite128.png @@ -19,29 +19,29 @@ https://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.95.0")] -[assembly: AssemblyFileVersion("1.0.95.0")] +[assembly: AssemblyVersion("1.0.96.0")] +[assembly: AssemblyFileVersion("1.0.96.0")] Index: SQLite.Designer/Editors/TableDesignerDoc.cs ================================================================== --- SQLite.Designer/Editors/TableDesignerDoc.cs +++ SQLite.Designer/Editors/TableDesignerDoc.cs @@ -797,11 +797,11 @@ case __FRAMESHOW.FRAMESHOW_WinRestored: SetPropertyWindow(); if (_warned == false) { _warned = true; - MessageBox.Show(this, "The table designer is still in development. Please report bugs to the sqlite-users mailing list at sqlite-users@sqlite.org", "Feature Under Review", MessageBoxButtons.OK); + MessageBox.Show(this, "The table designer is still in development. Please report bugs to the sqlite-users mailing list at sqlite-users@mailinglists.sqlite.org", "Feature Under Review", MessageBoxButtons.OK); } break; } return VSConstants.S_OK; } Index: SQLite.Designer/Editors/ViewDesignerDoc.cs ================================================================== --- SQLite.Designer/Editors/ViewDesignerDoc.cs +++ SQLite.Designer/Editors/ViewDesignerDoc.cs @@ -566,11 +566,11 @@ _timer.Enabled = true; SetPropertyWindow(); if (_warned == false) { _warned = true; - MessageBox.Show(this, "The view designer is still in development. Please report bugs to the sqlite-users mailing list at sqlite-users@sqlite.org", "Feature Under Review", MessageBoxButtons.OK); + MessageBox.Show(this, "The view designer is still in development. Please report bugs to the sqlite-users mailing list at sqlite-users@mailinglists.sqlite.org", "Feature Under Review", MessageBoxButtons.OK); } break; } return VSConstants.S_OK; } Index: SQLite.Designer/source.extension.vsixmanifest ================================================================== --- SQLite.Designer/source.extension.vsixmanifest +++ SQLite.Designer/source.extension.vsixmanifest @@ -1,11 +1,11 @@ System.Data.SQLite Designer https://system.data.sqlite.org/ - 1.0.95.0 + 1.0.96.0 ADO.NET Data Designer for SQLite 1033 false Index: SQLite.Interop/props/SQLite.Interop.2005.vsprops ================================================================== --- SQLite.Interop/props/SQLite.Interop.2005.vsprops +++ SQLite.Interop/props/SQLite.Interop.2005.vsprops @@ -17,26 +17,26 @@ Value="2005" PerformEnvironmentSet="true" /> 2010 - 095 + 096 1.0 - 1.0.95.0 - 1,0,95,0 + 1.0.96.0 + 1,0,96,0 src\core INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1 INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1;INTEROP_VIRTUAL_TABLE=1;INTEROP_PERCENTILE_EXTENSION=1;INTEROP_TOTYPE_EXTENSION=1;INTEROP_REGEXP_EXTENSION=1 Index: SQLite.Interop/props/SQLite.Interop.2012.props ================================================================== --- SQLite.Interop/props/SQLite.Interop.2012.props +++ SQLite.Interop/props/SQLite.Interop.2012.props @@ -8,14 +8,14 @@ * --> 2012 - 095 + 096 1.0 - 1.0.95.0 - 1,0,95,0 + 1.0.96.0 + 1,0,96,0 src\core INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1 INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1;INTEROP_VIRTUAL_TABLE=1;INTEROP_PERCENTILE_EXTENSION=1;INTEROP_TOTYPE_EXTENSION=1;INTEROP_REGEXP_EXTENSION=1 Index: SQLite.Interop/props/SQLite.Interop.2013.props ================================================================== --- SQLite.Interop/props/SQLite.Interop.2013.props +++ SQLite.Interop/props/SQLite.Interop.2013.props @@ -8,14 +8,14 @@ * --> 2013 - 095 + 096 1.0 - 1.0.95.0 - 1,0,95,0 + 1.0.96.0 + 1,0,96,0 src\core INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1 INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1;INTEROP_VIRTUAL_TABLE=1;INTEROP_PERCENTILE_EXTENSION=1;INTEROP_TOTYPE_EXTENSION=1;INTEROP_REGEXP_EXTENSION=1 Index: SQLite.Interop/src/win/interop.h ================================================================== --- SQLite.Interop/src/win/interop.h +++ SQLite.Interop/src/win/interop.h @@ -4,11 +4,11 @@ * Written by Joe Mistachkin. * Released to the public domain, use at your own risk! */ #ifndef INTEROP_VERSION -#define INTEROP_VERSION "1.0.95.0" +#define INTEROP_VERSION "1.0.96.0" #endif #ifndef INTEROP_SOURCE_ID #define INTEROP_SOURCE_ID "0000000000000000000000000000000000000000" #endif Index: Setup/data/verify.lst ================================================================== --- Setup/data/verify.lst +++ Setup/data/verify.lst @@ -747,19 +747,21 @@ Tests/tkt-8554170e09.eagle Tests/tkt-85b824b736.eagle Tests/tkt-8b7d179c3c.eagle Tests/tkt-8c3bee31c8.eagle Tests/tkt-8d928c3e88.eagle + Tests/tkt-92dbf1229a.eagle Tests/tkt-996d13cd87.eagle Tests/tkt-9ba9346f75.eagle Tests/tkt-a7d04fb111.eagle Tests/tkt-aba4549801.eagle Tests/tkt-ac47dd230a.eagle Tests/tkt-ae5267b863.eagle Tests/tkt-b4a7ddc83f.eagle Tests/tkt-bb4b04d457.eagle Tests/tkt-c010fa6584.eagle + Tests/tkt-c28d7fe915.eagle Tests/tkt-ccfa69fc32.eagle Tests/tkt-da9f18d039.eagle Tests/tkt-daeaf3150a.eagle Tests/tkt-e06c4caff3.eagle Tests/tkt-e1b2e0f769.eagle Index: Setup/verify.eagle ================================================================== --- Setup/verify.eagle +++ Setup/verify.eagle @@ -12,11 +12,11 @@ proc usage { error } { if {[string length $error] > 0} then {puts stdout $error} puts stdout "usage:\ [file tail [info nameofexecutable]]\ -[file tail [info script]] " +[file tail [info script]] \[failHashes\]" # # NOTE: Indicate to the caller, if any, that we have failed. # exit 1 @@ -64,11 +64,11 @@ return "" } set argc [llength $argv] -if {$argc == 2} then { +if {$argc >= 2 && $argc <= 3} then { set directory [lindex $argv 0] if {[string length $directory] == 0} then { usage "invalid directory specified" } @@ -85,10 +85,20 @@ } if {![string is boolean -strict $withHashes]} then { usage "bad \"withHashes\" flag, not a boolean" } + + set failHashes [expr {$argc >= 3 ? [lindex $argv 2] : true}] + + if {[string length $failHashes] == 0} then { + usage "invalid \"failHashes\" flag specified" + } + + if {![string is boolean -strict $failHashes]} then { + usage "bad \"failHashes\" flag, not a boolean" + } set exitCode 0 set script [info script] set path [file dirname $script] @@ -159,10 +169,11 @@ if {[getSha1Hashes hashes] == 0} then { usage "no repository hashes are available" } } + set hashPrefix [expr {$failHashes ? "ERROR" : "WARNING"}] set archiveFileNames [list] foreach extension [list exe rar zip] { eval lappend archiveFileNames [findFilesRecursive \ [file join $directory [appendArgs *. $extension]]] @@ -341,41 +352,49 @@ set hash [getSha1Sum $extractFileName] if {[string length $hash] > 0} then { if {$hash ne $hashes($manifestFileName)} then { puts stdout [appendArgs \ - "ERROR: Archive \"" $archiveFileName \ + $hashPrefix ": Archive \"" $archiveFileName \ "\" file \"" $manifestFileName \ "\" repository hash mismatch, have \"" \ $hash "\", want \"" $hashes($manifestFileName) \ "\"."] - set exitCode 1 - } - } else { - puts stdout [appendArgs \ - "ERROR: Archive \"" $archiveFileName \ - "\" file \"" $manifestFileName \ - "\" could not be hashed."] - - set exitCode 1 - } - } else { - puts stdout [appendArgs \ - "ERROR: Failed to extract file \"" \ - $manifestFileName "\" from archive \"" \ - $archiveFileName "\", error: " $result] - - set exitCode 1 - } - } else { - puts stdout [appendArgs \ - "ERROR: Archive \"" $archiveFileName \ - "\" file \"" $manifestFileName \ - "\" has no repository hash."] - - set exitCode 1 + if {$failHashes} then { + set exitCode 1 + } + } + } else { + puts stdout [appendArgs \ + $hashPrefix ": Archive \"" $archiveFileName \ + "\" file \"" $manifestFileName \ + "\" could not be hashed."] + + if {$failHashes} then { + set exitCode 1 + } + } + } else { + puts stdout [appendArgs \ + $hashPrefix ": Failed to extract file \"" \ + $manifestFileName "\" from archive \"" \ + $archiveFileName "\", error: " $result] + + if {$failHashes} then { + set exitCode 1 + } + } + } else { + puts stdout [appendArgs \ + $hashPrefix ": Archive \"" $archiveFileName \ + "\" file \"" $manifestFileName \ + "\" has no repository hash."] + + if {$failHashes} then { + set exitCode 1 + } } } finally { catch { file attributes $extractFileName -readonly false file delete $extractFileName Index: System.Data.SQLite.Linq/AssemblyInfo.cs ================================================================== --- System.Data.SQLite.Linq/AssemblyInfo.cs +++ System.Data.SQLite.Linq/AssemblyInfo.cs @@ -51,7 +51,7 @@ // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.95.0")] -[assembly: AssemblyFileVersion("1.0.95.0")] +[assembly: AssemblyVersion("1.0.96.0")] +[assembly: AssemblyFileVersion("1.0.96.0")] Index: System.Data.SQLite/AssemblyInfo.cs ================================================================== --- System.Data.SQLite/AssemblyInfo.cs +++ System.Data.SQLite/AssemblyInfo.cs @@ -70,9 +70,9 @@ // 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.95.0")] +[assembly: AssemblyVersion("1.0.96.0")] #if !PLATFORM_COMPACTFRAMEWORK -[assembly: AssemblyFileVersion("1.0.95.0")] +[assembly: AssemblyFileVersion("1.0.96.0")] #endif Index: System.Data.SQLite/SQLite3.cs ================================================================== --- System.Data.SQLite/SQLite3.cs +++ System.Data.SQLite/SQLite3.cs @@ -55,11 +55,11 @@ "b621ddff5d844727418956997f475eb829429e411aff3e93f97b70de698b972640925bdd44280df0" + "a25a843266973704137cbb0e7441c1fe7cae4e2440ae91ab8cde3933febcb1ac48dd33b40e13c421" + "d8215c18a4349a436dd499e3c385cc683015f886f6c10bd90115eb2bd61b67750839e3a19941dc9c"; #if !PLATFORM_COMPACTFRAMEWORK - internal const string DesignerVersion = "1.0.95.0"; + internal const string DesignerVersion = "1.0.96.0"; #endif /// /// The opaque pointer returned to us by the sqlite provider /// Index: System.Data.SQLite/SQLiteDataReader.cs ================================================================== --- System.Data.SQLite/SQLiteDataReader.cs +++ System.Data.SQLite/SQLiteDataReader.cs @@ -725,11 +725,10 @@ /// The name of the column to retrieve /// The int i of the column public override int GetOrdinal(string name) { CheckDisposed(); - VerifyForGet(); if (_throwOnDisposed) SQLiteCommand.Check(_command); // // NOTE: First, check if the column name cache has been initialized yet. @@ -891,18 +890,51 @@ string columnName = sql.ColumnOriginalName(stmt, n); ColumnParent key = new ColumnParent(databaseName, tableName, null); ColumnParent value = new ColumnParent(databaseName, tableName, columnName); - if (!parentToColumns.ContainsKey(key)) + List indexList; + + if (!parentToColumns.TryGetValue(key, out indexList)) parentToColumns.Add(key, new List(new int[] { n })); + else if (indexList != null) + indexList.Add(n); else - parentToColumns[key].Add(n); + parentToColumns[key] = new List(new int[] { n }); columnToParent.Add(n, value); } } + + /////////////////////////////////////////////////////////////////////////// + + private static int CountParents( + Dictionary> parentToColumns + ) + { + int result = 0; + + if (parentToColumns != null) + { + foreach (ColumnParent key in parentToColumns.Keys) + { + if (key == null) + continue; + + string tableName = key.TableName; + + if (String.IsNullOrEmpty(tableName)) + continue; + + result++; + } + } + + return result; + } + + /////////////////////////////////////////////////////////////////////////// internal DataTable GetSchemaTable(bool wantUniqueInfo, bool wantDefaultValue) { CheckClosed(); if (_throwOnDisposed) SQLiteCommand.Check(_command); @@ -1019,11 +1051,11 @@ strColumn, ref dataType, ref collSeq, ref bNotNull, ref bPrimaryKey, ref bAutoIncrement); if (bNotNull || bPrimaryKey) row[SchemaTableColumn.AllowDBNull] = false; - row[SchemaTableColumn.IsKey] = bPrimaryKey && parentToColumns.Count <= 1; + row[SchemaTableColumn.IsKey] = bPrimaryKey && CountParents(parentToColumns) <= 1; row[SchemaTableOptionalColumn.IsAutoIncrement] = bAutoIncrement; row["CollationType"] = collSeq; // For types like varchar(50) and such, extract the size arSize = dataType.Split('('); Index: System.Data.SQLite/UnsafeNativeMethods.cs ================================================================== --- System.Data.SQLite/UnsafeNativeMethods.cs +++ System.Data.SQLite/UnsafeNativeMethods.cs @@ -1243,11 +1243,11 @@ // be used because it provides several workarounds to .NET Compact // Framework limitations important for proper operation of the core // System.Data.SQLite functionality (e.g. being able to bind // parameters and handle column values of types Int64 and Double). // - internal const string SQLITE_DLL = "SQLite.Interop.095.dll"; + internal const string SQLITE_DLL = "SQLite.Interop.096.dll"; #elif SQLITE_STANDARD // // NOTE: Otherwise, if the standard SQLite library is enabled, use it. // internal const string SQLITE_DLL = "sqlite3"; ADDED Tests/tkt-92dbf1229a.eagle Index: Tests/tkt-92dbf1229a.eagle ================================================================== --- /dev/null +++ Tests/tkt-92dbf1229a.eagle @@ -0,0 +1,59 @@ +############################################################################### +# +# tkt-92dbf1229a.eagle -- +# +# Written by Joe Mistachkin. +# Released to the public domain, use at your own risk! +# +############################################################################### + +package require Eagle +package require Eagle.Library +package require Eagle.Test + +runTestPrologue + +############################################################################### + +package require System.Data.SQLite.Test +runSQLiteTestPrologue + +############################################################################### + +runTest {test tkt-92dbf1229a-1.1 {GetSchemaTable w/non-table columns} -setup { + setupDb [set fileName tkt-92dbf1229a-1.1.db] +} -body { + sql execute $db { + CREATE TABLE t1(x INTEGER, y INTEGER, z TEXT, PRIMARY KEY(x, y)); + } + + set dataReader [sql execute -execute reader -format datareader \ + -alias $db "SELECT x, y, NULL AS w, z FROM t1;"] + + set dataTable [$dataReader -alias GetSchemaTable] + set result [list] + + foreach row [getRowsFromDataTable $dataTable] { + foreach column $row { + if {[lindex $column 0] in [list ColumnName IsKey]} then { + lappend result $column + } + } + } + + set result +} -cleanup { + unset -nocomplain dataTable dataReader + + cleanupDb $fileName + + unset -nocomplain column row result dataReader db fileName +} -constraints \ +{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite} -result \ +{{ColumnName x} {IsKey True} {ColumnName y} {IsKey True} {ColumnName w} {IsKey\ +False} {ColumnName z} {IsKey False}}} + +############################################################################### + +runSQLiteTestEpilogue +runTestEpilogue ADDED Tests/tkt-c28d7fe915.eagle Index: Tests/tkt-c28d7fe915.eagle ================================================================== --- /dev/null +++ Tests/tkt-c28d7fe915.eagle @@ -0,0 +1,47 @@ +############################################################################### +# +# tkt-c28d7fe915.eagle -- +# +# Written by Joe Mistachkin. +# Released to the public domain, use at your own risk! +# +############################################################################### + +package require Eagle +package require Eagle.Library +package require Eagle.Test + +runTestPrologue + +############################################################################### + +package require System.Data.SQLite.Test +runSQLiteTestPrologue + +############################################################################### + +runTest {test tkt-c28d7fe915-1.1 {GetOrdinal without current row} -setup { + setupDb [set fileName tkt-c28d7fe915-1.1.db] +} -body { + sql execute $db { + CREATE TABLE t1(x); + } + + set dataReader [sql execute -execute reader -format datareader \ + -alias $db "SELECT x FROM t1;"] + + list [$dataReader GetName 0] [$dataReader GetOrdinal x] +} -cleanup { + unset -nocomplain dataReader + + cleanupDb $fileName + + unset -nocomplain db fileName +} -constraints \ +{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite} -result \ +{x 0}} + +############################################################################### + +runSQLiteTestEpilogue +runTestEpilogue Index: Tests/version.eagle ================================================================== --- Tests/version.eagle +++ Tests/version.eagle @@ -29,11 +29,11 @@ # the source code files, the built binaries, and the release packages. # The revision number is reserved for NuGet package versioning. # set version(major) 1 set version(minor) 0 -set version(build) 95; # NOTE: Incremented with each release. +set version(build) 96; # NOTE: Incremented with each release. set version(revision) 0 ############################################################################### # Index: readme.htm ================================================================== --- readme.htm +++ readme.htm @@ -3,11 +3,11 @@ ADO.NET SQLite Data Provider
-Version 1.0.95.0 - March 2, 2015
+Version 1.0.96.0 - March 5, 2015
Using
SQLite 3.8.8.3
Originally written by Robert Simpson
Released to the public domain, use at your own risk!
Official provider website: https://system.data.sqlite.org/
Legacy versions: http://sqlite.phxsoftware.com/
@@ -144,11 +144,11 @@ <configuration> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite" /> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" - type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.95.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> + type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </DbProviderFactories> </system.data> </configuration>

@@ -206,10 +206,17 @@ released versions of System.Data.SQLite.

Version History

+

+ 1.0.96.0 - March 5, 2015 +

+

1.0.95.0 - March 2, 2015