Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add 'AppendManifestToken_SQLiteProviderManifest' environment variable to enable better testing and tighter integration. Complete initial tests. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | tkt-8d928c3e88 |
Files: | files | file ages | folders |
SHA1: |
c42db158c38dfcad7a5cf0444b839197 |
User & Date: | mistachkin 2015-01-08 18:57:06.747 |
Context
2015-01-09
| ||
04:10 | Add comments. check-in: 2d0a56c918 user: mistachkin tags: tkt-8d928c3e88 | |
2015-01-08
| ||
18:57 | Add 'AppendManifestToken_SQLiteProviderManifest' environment variable to enable better testing and tighter integration. Complete initial tests. check-in: c42db158c3 user: mistachkin tags: tkt-8d928c3e88 | |
17:42 | More work on testability. check-in: d8ed5e99ae user: mistachkin tags: tkt-8d928c3e88 | |
Changes
Changes to Doc/Extra/Provider/environment.html.
︙ | ︙ | |||
76 77 78 79 80 81 82 83 84 85 86 87 88 89 | </font> </p> <table width="80%" cellpadding="0" cellspacing="0"> <tr valign="top"> <th>Name</th> <th>Description</th> </tr> <tr valign="top"> <td>Force_SQLiteLog</td> <td>If this environment variable is set [to anything], the SQLite logging subsystem may be initialized in a non-default application domain. By default, this is not allowed due to the potential for application domain unloading issues.</td> </tr> | > > > > > > > > > > > | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | </font> </p> <table width="80%" cellpadding="0" cellspacing="0"> <tr valign="top"> <th>Name</th> <th>Description</th> </tr> <tr valign="top"> <td>AppendManifestToken_SQLiteProviderManifest</td> <td>If this environment variable is set [to anything], it will be used by the System.Data.SQLite.Linq.SQLiteProviderManifest class (and the System.Data.SQLite.EF6.SQLiteProviderManifest class) to modify future provider manifest tokens by appending the value of the environment variable to the existing provider manifest token, if any. Typically, in order for the constructed provider manifest token to be syntactically correct, the environment variable value [to be appended] must begin with a semicolon.</td> </tr> <tr valign="top"> <td>Force_SQLiteLog</td> <td>If this environment variable is set [to anything], the SQLite logging subsystem may be initialized in a non-default application domain. By default, this is not allowed due to the potential for application domain unloading issues.</td> </tr> |
︙ | ︙ |
Changes to System.Data.SQLite.Linq/SQLiteProviderManifest.cs.
︙ | ︙ | |||
9 10 11 12 13 14 15 | namespace System.Data.SQLite.EF6 #else namespace System.Data.SQLite.Linq #endif { using System; using System.Collections.Generic; | | | > | > > | > | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | namespace System.Data.SQLite.EF6 #else namespace System.Data.SQLite.Linq #endif { using System; using System.Collections.Generic; using System.IO; using System.Reflection; #if !PLATFORM_COMPACTFRAMEWORK using System.Text; #endif using System.Xml; #if USE_ENTITY_FRAMEWORK_6 using System.Data.Entity.Core; using System.Data.Entity.Core.Common; using System.Data.Entity.Core.Metadata.Edm; #else using System.Data.Common; using System.Data.Metadata.Edm; #endif /// <summary> /// The Provider Manifest for SQL Server /// </summary> internal sealed class SQLiteProviderManifest : DbXmlEnabledProviderManifest |
︙ | ︙ | |||
50 51 52 53 54 55 56 | /// </remarks> /// <param name="manifestToken"> /// A token used to infer the capabilities of the store. /// </param> public SQLiteProviderManifest(string manifestToken) : base(GetProviderManifest()) { | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | /// </remarks> /// <param name="manifestToken"> /// A token used to infer the capabilities of the store. /// </param> public SQLiteProviderManifest(string manifestToken) : base(GetProviderManifest()) { SetFromOptions(ParseProviderManifestToken(GetProviderManifestToken(manifestToken))); } private static XmlReader GetProviderManifest() { return GetXmlResource("System.Data.SQLite.SQLiteProviderServices.ProviderManifest.xml"); } /// <summary> /// /// </summary> /// <param name="manifestToken"> /// /// </param> /// <returns> /// /// </returns> private static string GetProviderManifestToken( string manifestToken ) { #if !PLATFORM_COMPACTFRAMEWORK string value = Environment.GetEnvironmentVariable( "AppendManifestToken_SQLiteProviderManifest"); if (String.IsNullOrEmpty(value)) return manifestToken; int capacity = value.Length; if (manifestToken != null) capacity += manifestToken.Length; StringBuilder builder = new StringBuilder(capacity); builder.Append(manifestToken); builder.Append(value); return builder.ToString(); #else return manifestToken; #endif } /// <summary> /// Attempts to parse a provider manifest token. It must contain either a /// legacy string that specifies the <see cref="SQLiteDateFormats" /> value /// -OR- string that uses the standard connection string syntax; otherwise, /// the results are undefined. /// </summary> /// <param name="manifestToken"> /// The manifest token to parse. /// </param> /// <returns> /// The dictionary containing the connection string parameters. /// </returns> private static SortedList<string, string> ParseProviderManifestToken( string manifestToken ) { return SQLiteConnection.ParseConnectionString(manifestToken, false, true); } /// <summary> |
︙ | ︙ |
Changes to System.Data.SQLite.Linq/SQLiteProviderServices.cs.
︙ | ︙ | |||
8 9 10 11 12 13 14 | #if USE_ENTITY_FRAMEWORK_6 namespace System.Data.SQLite.EF6 #else namespace System.Data.SQLite.Linq #endif { using System; | | | | | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #if USE_ENTITY_FRAMEWORK_6 namespace System.Data.SQLite.EF6 #else namespace System.Data.SQLite.Linq #endif { using System; using System.Collections.Generic; using System.Data.Common; using System.Diagnostics; using System.Globalization; using System.Text; #if USE_ENTITY_FRAMEWORK_6 using System.Data.Entity.Core.Common; using System.Data.Entity.Core.Metadata.Edm; using System.Data.Entity.Core.Common.CommandTrees; #else using System.Data.Metadata.Edm; |
︙ | ︙ |
Changes to Tests/tkt-8d928c3e88.eagle.
︙ | ︙ | |||
17 18 19 20 21 22 23 | package require System.Data.SQLite.Test runSQLiteTestPrologue runSQLiteTestFilesPrologue ############################################################################### | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | package require System.Data.SQLite.Test runSQLiteTestPrologue runSQLiteTestFilesPrologue ############################################################################### runTest {test tkt-8d928c3e88-1.1 {LINQ with BinaryGUID (false)} -body { # # NOTE: Re-copy the reference database file used for this unit test to the # build directory in case it has been changed by a previous test run. # file copy -force $northwindEfDbFile \ [file join [getBuildDirectory] [file tail $northwindEfDbFile]] set result [list] set output "" set code [catch { testClrExec $testLinqExeFile [list -eventflags Wait -directory \ [file dirname $testLinqExeFile] -nocarriagereturns -stdout output \ -success 0] -binaryguid false } error] tlog "---- BEGIN STDOUT OUTPUT\n" tlog $output tlog "\n---- END STDOUT OUTPUT\n" lappend result $code if {$code == 0} then { lappend result [string trim $output] } else { lappend result [string trim $error] } set result } -cleanup { unset -nocomplain code output error result } -constraints {eagle monoToDo SQLite file_System.Data.SQLite.dll testExec\ file_System.Data.SQLite.Linq.dll file_testlinq.exe file_northwindEF.db} \ -result {0 2d3d2d3d-2d3d-2d3d-2d3d-2d3d2d3d2d3d}} ############################################################################### runTest {test tkt-8d928c3e88-1.2 {LINQ with BinaryGUID (true)} -body { # # NOTE: Re-copy the reference database file used for this unit test to the # build directory in case it has been changed by a previous test run. # file copy -force $northwindEfDbFile \ [file join [getBuildDirectory] [file tail $northwindEfDbFile]] set result [list] set output "" set code [catch { testClrExec $testLinqExeFile [list -eventflags Wait -directory \ [file dirname $testLinqExeFile] -nocarriagereturns -stdout output \ -success 0] -binaryguid true } error] tlog "---- BEGIN STDOUT OUTPUT\n" tlog $output tlog "\n---- END STDOUT OUTPUT\n" lappend result $code if {$code == 0} then { lappend result [string trim $output] } else { lappend result [string trim $error] } set result } -cleanup { unset -nocomplain code output error result } -constraints {eagle monoToDo SQLite file_System.Data.SQLite.dll testExec\ file_System.Data.SQLite.Linq.dll file_testlinq.exe file_northwindEF.db} \ -result {0 =-=-=-=--=-=-=-=}} ############################################################################### runSQLiteTestFilesEpilogue runSQLiteTestEpilogue runTestEpilogue |
Changes to testlinq/Program.cs.
︙ | ︙ | |||
132 133 134 135 136 137 138 | } case "update": { return UpdateTest(); } case "binaryguid": { | > > > > > > > > > > > > > > | | 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | } case "update": { return UpdateTest(); } case "binaryguid": { bool value = false; if (args.Length > 1) { if (!bool.TryParse(args[1], out value)) { Console.WriteLine( "cannot parse \"{0}\" as boolean", args[1]); return 1; } } return BinaryGuidTest(value); } default: { Console.WriteLine("unknown test \"{0}\"", arg); return 1; } } |
︙ | ︙ | |||
530 531 532 533 534 535 536 | } // // NOTE: Used to test the BinaryGUID fix (i.e. BLOB literal formatting // of GUID values when the BinaryGUID connection property has been // enabled). // | | | < < < | | < < > | < < < < < < < < < < < < | 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 | } // // NOTE: Used to test the BinaryGUID fix (i.e. BLOB literal formatting // of GUID values when the BinaryGUID connection property has been // enabled). // private static int BinaryGuidTest(bool binaryGuid) { Environment.SetEnvironmentVariable( "AppendManifestToken_SQLiteProviderManifest", String.Format(";BinaryGUID={0};", binaryGuid)); using (northwindEFEntities db = new northwindEFEntities()) { string sql = "SELECT VALUE GUID " + "'2d3d2d3d-2d3d-2d3d-2d3d-2d3d2d3d2d3d' " + "FROM Orders AS o WHERE o.OrderID = 10248;"; ObjectQuery<string> query = db.CreateQuery<string>(sql); foreach (string s in query) Console.WriteLine(s); } return 0; } |
︙ | ︙ |