System.Data.SQLite
Check-in [717bc31b47]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Add experimental support for incremental blob I/O.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 717bc31b477b503e94ffb836ab12a9cf66ace477
User & Date: mistachkin 2016-07-01 21:05:29
Context
2016-07-01
21:23
Add support for the 'No_SQLiteGetSettingValue' and 'No_SQLiteXmlConfigFile' environment variables. check-in: dc631206c0 user: mistachkin tags: trunk
21:05
Add experimental support for incremental blob I/O. check-in: 717bc31b47 user: mistachkin tags: trunk
20:43
Improve doc comments. Closed-Leaf check-in: 283d973957 user: mistachkin tags: blobIo
03:20
Correct an attribution comment. check-in: 8c08bda9a1 user: mistachkin tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Changes to Doc/Extra/Provider/dbfactorysupport.html.

    81     81   <configuration>
    82     82     <system.data>
    83     83       <DbProviderFactories>
    84     84         <remove invariant="System.Data.SQLite"/>
    85     85         <add name="SQLite Data Provider" invariant="System.Data.SQLite" 
    86     86              description=".NET Framework Data Provider for SQLite"
    87     87              type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite,
    88         -                 Version=1.0.102.0, Culture=neutral,
           88  +                 Version=1.0.103.0, Culture=neutral,
    89     89                    PublicKeyToken=db937bc2d44ff139"/>
    90     90       </DbProviderFactories>
    91     91     </system.data>
    92     92   </configuration>
    93     93   </pre>
    94     94         </div>
    95     95         <p>

Changes to Doc/Extra/Provider/version.html.

    39     39             </td>
    40     40           </tr>
    41     41         </table>
    42     42       </div>
    43     43       <div id="mainSection">
    44     44       <div id="mainBody">
    45     45       <h1 class="heading">Version History</h1>
           46  +    <p><b>1.0.103.0 - August XX, 2016 <font color="red">(release scheduled)</font></b></p>
           47  +    <ul>
           48  +      <li>Change the SQLiteReadValueCallback delegate &quot;eventArgs&quot; parameter to be of type SQLiteReadEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
           49  +      <li>Make SQLiteReadValueEventArgs and SQLiteReadArrayEventArgs derive from SQLiteReadEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
           50  +      <li>Rename SQLiteReadValueEventArgs.ArrayEventArgs property to ExtraEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
           51  +      <li>Add NoVerifyTypeAffinity connection flag to disable all type affinity checking.</li>
           52  +      <li>Add support for <a href="https://www.sqlite.org/c3ref/blob_open.html">incremental blob I/O</a>.</li>
           53  +    </ul>
    46     54       <p><b>1.0.102.0 - June 23, 2016</b></p>
    47     55       <ul>
    48     56         <li>Updated to <a href="https://www.sqlite.org/releaselog/3_13_0.html">SQLite 3.13.0</a>.</li>
    49     57         <li>Update the SQLiteConnection.EnableExtensions method to make use of the new SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION option, when available.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    50     58         <li>Prevent the SQLiteCommand.ExecuteScalar method from throwing an exception when there are no result columns.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    51     59         <li>Support per-connection customization for binding parameters and reading values, based on the database type name.</li>
    52     60         <li>Add TypeName property to the SQLiteParameter class.</li>

Changes to Doc/Extra/Provider/welcome.html.

   156    156           <font color="red">
   157    157             Itanium processor support not currently included.
   158    158           </font>
   159    159         </p>
   160    160         <h1 class="heading">Distributing the Binaries (Compact Framework)</h1>
   161    161         <p>Both the <b>System.Data.SQLite.DLL </b>and <b>SQLite.Interop.XXX.DLL</b> files
   162    162           must be deployed on the Compact Framework.&nbsp; The XXX is the build number of
   163         -        the System.Data.SQLite library (e.g. &quot;102&quot;).&nbsp; The
          163  +        the System.Data.SQLite library (e.g. &quot;103&quot;).&nbsp; The
   164    164           <b>SQLite.Interop.XXX.DLL</b> file is a fully native assembly compiled for
   165    165           the ARM processor, and System.Data.SQLite is the fully-managed Compact
   166    166           Framework assembly.</p>
   167    167         <hr />
   168    168         <div id="footer">
   169    169           <p>
   170    170             <a href="mailto:sqlite-users@mailinglists.sqlite.org?subject=SQLite.NET%20Class%20Library%20Documentation%20Feedback:%20Welcome">
   171    171             Send comments on this topic.<!--[if gte IE 5]><tool:tip element="seeAlsoToolTip" avoidmouse="false" /><tool:tip element="languageFilterToolTip" avoidmouse="false" /><![endif]-->    </div>
   172    172       </div>
   173    173     </body>
   174    174   </html>

Changes to NuGet/SQLite.Beta.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Beta</id>
    13     13       <title>System.Data.SQLite (x86/x64) Beta</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a &quot;beta&quot; 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.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>
    22     22       <copyright>Public Domain</copyright>
    23     23       <dependencies>
    24     24         <group targetFramework="net20">
    25         -        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.102.0" />
           25  +        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.103.0" />
    26     26         </group>
    27     27         <group targetFramework="net40">
    28         -        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.102.0" />
           28  +        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.103.0" />
    29     29         </group>
    30     30         <group targetFramework="net45">
    31         -        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.102.0" />
           31  +        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.103.0" />
    32     32         </group>
    33     33         <group targetFramework="net451">
    34         -        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.102.0" />
           34  +        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.103.0" />
    35     35         </group>
    36     36         <group targetFramework="net46">
    37         -        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.102.0" />
           37  +        <dependency id="System.Data.SQLite.Core.Beta" version="1.0.103.0" />
    38     38         </group>
    39     39         <group targetFramework="net20">
    40         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           40  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    41     41         </group>
    42     42         <group targetFramework="net40">
    43         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           43  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    44     44         </group>
    45     45         <group targetFramework="net45">
    46         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           46  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    47     47         </group>
    48     48         <group targetFramework="net451">
    49         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           49  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    50     50         </group>
    51     51         <group targetFramework="net46">
    52         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           52  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    53     53         </group>
    54     54         <group targetFramework="net40">
    55         -        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.102.0" />
           55  +        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.103.0" />
    56     56         </group>
    57     57         <group targetFramework="net45">
    58         -        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.102.0" />
           58  +        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.103.0" />
    59     59         </group>
    60     60         <group targetFramework="net451">
    61         -        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.102.0" />
           61  +        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.103.0" />
    62     62         </group>
    63     63         <group targetFramework="net46">
    64         -        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.102.0" />
           64  +        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.103.0" />
    65     65         </group>
    66     66       </dependencies>
    67     67     </metadata>
    68     68     <files />
    69     69   </package>

Changes to NuGet/SQLite.Core.Beta.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Core.Beta</id>
    13     13       <title>System.Data.SQLite Core (x86/x64) Beta</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a &quot;beta&quot; package and is not intended for production use.  The official SQLite database engine for both x86 and x64 along with the ADO.NET provider.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.Core.MSIL.Beta.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Core.MSIL.Beta</id>
    13     13       <title>System.Data.SQLite (MSIL) Beta</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a &quot;beta&quot; package and is not intended for production use.  An ADO.NET provider for SQLite (managed-only).</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.Core.MSIL.Test.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Core.MSIL.Test</id>
    13     13       <title>System.Data.SQLite (MSIL) Test</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a pre-release package and is not intended for production use.  An ADO.NET provider for SQLite (managed-only).</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.Core.MSIL.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Core.MSIL</id>
    13     13       <title>System.Data.SQLite Core (MSIL)</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>An ADO.NET provider for SQLite (managed-only).</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.Core.Test.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Core.Test</id>
    13     13       <title>System.Data.SQLite Core (x86/x64) Test</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>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.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.Core.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Core</id>
    13     13       <title>System.Data.SQLite Core (x86/x64)</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>The official SQLite database engine for both x86 and x64 along with the ADO.NET provider.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.EF6.Beta.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.EF6.Beta</id>
    13     13       <title>System.Data.SQLite EF6 Beta</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a &quot;beta&quot; package and is not intended for production use.  Support for Entity Framework 6 using System.Data.SQLite.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.EF6.Test.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.EF6.Test</id>
    13     13       <title>System.Data.SQLite EF6 Test</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a pre-release package and is not intended for production use.  Support for Entity Framework 6 using System.Data.SQLite.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.EF6.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.EF6</id>
    13     13       <title>System.Data.SQLite EF6</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>Support for Entity Framework 6 using System.Data.SQLite.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.Linq.Beta.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Linq.Beta</id>
    13     13       <title>System.Data.SQLite LINQ Beta</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a &quot;beta&quot; package and is not intended for production use.  Support for LINQ using System.Data.SQLite.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.Linq.Test.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Linq.Test</id>
    13     13       <title>System.Data.SQLite LINQ Test</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a pre-release package and is not intended for production use.  Support for LINQ using System.Data.SQLite.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.Linq.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Linq</id>
    13     13       <title>System.Data.SQLite LINQ</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>Support for LINQ using System.Data.SQLite.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>

Changes to NuGet/SQLite.MSIL.Beta.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.MSIL.Beta</id>
    13     13       <title>System.Data.SQLite (MSIL) Beta</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a &quot;beta&quot; package and is not intended for production use.  This is a legacy package; if possible, please use either the &quot;System.Data.SQLite.Beta&quot; or &quot;System.Data.SQLite.Core.Beta&quot; package instead.  An ADO.NET provider for SQLite (managed-only).</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>
    22     22       <copyright>Public Domain</copyright>
    23     23       <dependencies>
    24     24         <group targetFramework="net20">
    25         -        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.102.0" />
           25  +        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.103.0" />
    26     26         </group>
    27     27         <group targetFramework="net40">
    28         -        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.102.0" />
           28  +        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.103.0" />
    29     29         </group>
    30     30         <group targetFramework="net45">
    31         -        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.102.0" />
           31  +        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.103.0" />
    32     32         </group>
    33     33         <group targetFramework="net451">
    34         -        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.102.0" />
           34  +        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.103.0" />
    35     35         </group>
    36     36         <group targetFramework="net46">
    37         -        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.102.0" />
           37  +        <dependency id="System.Data.SQLite.Core.MSIL.Beta" version="1.0.103.0" />
    38     38         </group>
    39     39         <group targetFramework="net20">
    40         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           40  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    41     41         </group>
    42     42         <group targetFramework="net40">
    43         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           43  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    44     44         </group>
    45     45         <group targetFramework="net45">
    46         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           46  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    47     47         </group>
    48     48         <group targetFramework="net451">
    49         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           49  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    50     50         </group>
    51     51         <group targetFramework="net46">
    52         -        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.102.0" />
           52  +        <dependency id="System.Data.SQLite.Linq.Beta" version="1.0.103.0" />
    53     53         </group>
    54     54         <group targetFramework="net40">
    55         -        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.102.0" />
           55  +        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.103.0" />
    56     56         </group>
    57     57         <group targetFramework="net45">
    58         -        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.102.0" />
           58  +        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.103.0" />
    59     59         </group>
    60     60         <group targetFramework="net451">
    61         -        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.102.0" />
           61  +        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.103.0" />
    62     62         </group>
    63     63         <group targetFramework="net46">
    64         -        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.102.0" />
           64  +        <dependency id="System.Data.SQLite.EF6.Beta" version="1.0.103.0" />
    65     65         </group>
    66     66       </dependencies>
    67     67     </metadata>
    68     68     <files />
    69     69   </package>

Changes to NuGet/SQLite.MSIL.Test.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.MSIL.Test</id>
    13     13       <title>System.Data.SQLite (MSIL) Test</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a pre-release package and is not intended for production use.  This is a legacy package; if possible, please use either the &quot;System.Data.SQLite.Test&quot; or &quot;System.Data.SQLite.Core.Test&quot; package instead.  An ADO.NET provider for SQLite (managed-only).</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>
    22     22       <copyright>Public Domain</copyright>
    23     23       <dependencies>
    24     24         <group targetFramework="net20">
    25         -        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.102.0" />
           25  +        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.103.0" />
    26     26         </group>
    27     27         <group targetFramework="net40">
    28         -        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.102.0" />
           28  +        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.103.0" />
    29     29         </group>
    30     30         <group targetFramework="net45">
    31         -        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.102.0" />
           31  +        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.103.0" />
    32     32         </group>
    33     33         <group targetFramework="net451">
    34         -        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.102.0" />
           34  +        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.103.0" />
    35     35         </group>
    36     36         <group targetFramework="net46">
    37         -        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.102.0" />
           37  +        <dependency id="System.Data.SQLite.Core.MSIL.Test" version="1.0.103.0" />
    38     38         </group>
    39     39         <group targetFramework="net20">
    40         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           40  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    41     41         </group>
    42     42         <group targetFramework="net40">
    43         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           43  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    44     44         </group>
    45     45         <group targetFramework="net45">
    46         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           46  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    47     47         </group>
    48     48         <group targetFramework="net451">
    49         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           49  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    50     50         </group>
    51     51         <group targetFramework="net46">
    52         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           52  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    53     53         </group>
    54     54         <group targetFramework="net40">
    55         -        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.102.0" />
           55  +        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.103.0" />
    56     56         </group>
    57     57         <group targetFramework="net45">
    58         -        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.102.0" />
           58  +        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.103.0" />
    59     59         </group>
    60     60         <group targetFramework="net451">
    61         -        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.102.0" />
           61  +        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.103.0" />
    62     62         </group>
    63     63         <group targetFramework="net46">
    64         -        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.102.0" />
           64  +        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.103.0" />
    65     65         </group>
    66     66       </dependencies>
    67     67     </metadata>
    68     68     <files />
    69     69   </package>

Changes to NuGet/SQLite.MSIL.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.MSIL</id>
    13     13       <title>System.Data.SQLite (MSIL)</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>This is a legacy package; if possible, please use either the &quot;System.Data.SQLite&quot; or &quot;System.Data.SQLite.Core&quot; package instead.  An ADO.NET provider for SQLite (managed-only).</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>
    22     22       <copyright>Public Domain</copyright>
    23     23       <dependencies>
    24     24         <group targetFramework="net20">
    25         -        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.102.0" />
           25  +        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.103.0" />
    26     26         </group>
    27     27         <group targetFramework="net40">
    28         -        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.102.0" />
           28  +        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.103.0" />
    29     29         </group>
    30     30         <group targetFramework="net45">
    31         -        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.102.0" />
           31  +        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.103.0" />
    32     32         </group>
    33     33         <group targetFramework="net451">
    34         -        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.102.0" />
           34  +        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.103.0" />
    35     35         </group>
    36     36         <group targetFramework="net46">
    37         -        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.102.0" />
           37  +        <dependency id="System.Data.SQLite.Core.MSIL" version="1.0.103.0" />
    38     38         </group>
    39     39         <group targetFramework="net20">
    40         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           40  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    41     41         </group>
    42     42         <group targetFramework="net40">
    43         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           43  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    44     44         </group>
    45     45         <group targetFramework="net45">
    46         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           46  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    47     47         </group>
    48     48         <group targetFramework="net451">
    49         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           49  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    50     50         </group>
    51     51         <group targetFramework="net46">
    52         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           52  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    53     53         </group>
    54     54         <group targetFramework="net40">
    55         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           55  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    56     56         </group>
    57     57         <group targetFramework="net45">
    58         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           58  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    59     59         </group>
    60     60         <group targetFramework="net451">
    61         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           61  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    62     62         </group>
    63     63         <group targetFramework="net46">
    64         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           64  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    65     65         </group>
    66     66       </dependencies>
    67     67     </metadata>
    68     68     <files />
    69     69   </package>

Changes to NuGet/SQLite.Test.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.Test</id>
    13     13       <title>System.Data.SQLite (x86/x64) Test</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>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.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>
    22     22       <copyright>Public Domain</copyright>
    23     23       <dependencies>
    24     24         <group targetFramework="net20">
    25         -        <dependency id="System.Data.SQLite.Core.Test" version="1.0.102.0" />
           25  +        <dependency id="System.Data.SQLite.Core.Test" version="1.0.103.0" />
    26     26         </group>
    27     27         <group targetFramework="net40">
    28         -        <dependency id="System.Data.SQLite.Core.Test" version="1.0.102.0" />
           28  +        <dependency id="System.Data.SQLite.Core.Test" version="1.0.103.0" />
    29     29         </group>
    30     30         <group targetFramework="net45">
    31         -        <dependency id="System.Data.SQLite.Core.Test" version="1.0.102.0" />
           31  +        <dependency id="System.Data.SQLite.Core.Test" version="1.0.103.0" />
    32     32         </group>
    33     33         <group targetFramework="net451">
    34         -        <dependency id="System.Data.SQLite.Core.Test" version="1.0.102.0" />
           34  +        <dependency id="System.Data.SQLite.Core.Test" version="1.0.103.0" />
    35     35         </group>
    36     36         <group targetFramework="net46">
    37         -        <dependency id="System.Data.SQLite.Core.Test" version="1.0.102.0" />
           37  +        <dependency id="System.Data.SQLite.Core.Test" version="1.0.103.0" />
    38     38         </group>
    39     39         <group targetFramework="net20">
    40         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           40  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    41     41         </group>
    42     42         <group targetFramework="net40">
    43         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           43  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    44     44         </group>
    45     45         <group targetFramework="net45">
    46         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           46  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    47     47         </group>
    48     48         <group targetFramework="net451">
    49         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           49  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    50     50         </group>
    51     51         <group targetFramework="net46">
    52         -        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.102.0" />
           52  +        <dependency id="System.Data.SQLite.Linq.Test" version="1.0.103.0" />
    53     53         </group>
    54     54         <group targetFramework="net40">
    55         -        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.102.0" />
           55  +        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.103.0" />
    56     56         </group>
    57     57         <group targetFramework="net45">
    58         -        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.102.0" />
           58  +        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.103.0" />
    59     59         </group>
    60     60         <group targetFramework="net451">
    61         -        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.102.0" />
           61  +        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.103.0" />
    62     62         </group>
    63     63         <group targetFramework="net46">
    64         -        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.102.0" />
           64  +        <dependency id="System.Data.SQLite.EF6.Test" version="1.0.103.0" />
    65     65         </group>
    66     66       </dependencies>
    67     67     </metadata>
    68     68     <files />
    69     69   </package>

Changes to NuGet/SQLite.nuspec.

     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite</id>
    13     13       <title>System.Data.SQLite (x86/x64)</title>
    14         -    <version>1.0.102.0</version>
           14  +    <version>1.0.103.0</version>
    15     15       <authors>SQLite Development Team</authors>
    16     16       <description>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.</description>
    17     17       <language>en-US</language>
    18     18       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    19     19       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    20     20       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    21     21       <tags>sqlite database ado.net provider interop</tags>
    22     22       <copyright>Public Domain</copyright>
    23     23       <dependencies>
    24     24         <group targetFramework="net20">
    25         -        <dependency id="System.Data.SQLite.Core" version="1.0.102.0" />
           25  +        <dependency id="System.Data.SQLite.Core" version="1.0.103.0" />
    26     26         </group>
    27     27         <group targetFramework="net40">
    28         -        <dependency id="System.Data.SQLite.Core" version="1.0.102.0" />
           28  +        <dependency id="System.Data.SQLite.Core" version="1.0.103.0" />
    29     29         </group>
    30     30         <group targetFramework="net45">
    31         -        <dependency id="System.Data.SQLite.Core" version="1.0.102.0" />
           31  +        <dependency id="System.Data.SQLite.Core" version="1.0.103.0" />
    32     32         </group>
    33     33         <group targetFramework="net451">
    34         -        <dependency id="System.Data.SQLite.Core" version="1.0.102.0" />
           34  +        <dependency id="System.Data.SQLite.Core" version="1.0.103.0" />
    35     35         </group>
    36     36         <group targetFramework="net46">
    37         -        <dependency id="System.Data.SQLite.Core" version="1.0.102.0" />
           37  +        <dependency id="System.Data.SQLite.Core" version="1.0.103.0" />
    38     38         </group>
    39     39         <group targetFramework="net20">
    40         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           40  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    41     41         </group>
    42     42         <group targetFramework="net40">
    43         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           43  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    44     44         </group>
    45     45         <group targetFramework="net45">
    46         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           46  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    47     47         </group>
    48     48         <group targetFramework="net451">
    49         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           49  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    50     50         </group>
    51     51         <group targetFramework="net46">
    52         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           52  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    53     53         </group>
    54     54         <group targetFramework="net40">
    55         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           55  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    56     56         </group>
    57     57         <group targetFramework="net45">
    58         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           58  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    59     59         </group>
    60     60         <group targetFramework="net451">
    61         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           61  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    62     62         </group>
    63     63         <group targetFramework="net46">
    64         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           64  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    65     65         </group>
    66     66       </dependencies>
    67     67     </metadata>
    68     68     <files />
    69     69   </package>

Changes to NuGet/SQLite.x64.nuspec.

     6      6    * Written by Joe Mistachkin.
     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.x64</id>
    13         -    <version>1.0.102.0</version>
           13  +    <version>1.0.103.0</version>
    14     14       <authors>SQLite Development Team</authors>
    15     15       <description>This is a legacy package; if possible, please use either the &quot;System.Data.SQLite&quot; or &quot;System.Data.SQLite.Core&quot; package instead.  The official SQLite database engine combined with a complete ADO.NET provider all rolled into a single mixed-mode assembly for x64.</description>
    16     16       <language>en-US</language>
    17     17       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    18     18       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    19     19       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    20     20       <tags>sqlite database ado.net provider interop</tags>
    21     21       <copyright>Public Domain</copyright>
    22     22       <dependencies>
    23     23         <group targetFramework="net20">
    24         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           24  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    25     25         </group>
    26     26         <group targetFramework="net40">
    27         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           27  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    28     28         </group>
    29     29         <group targetFramework="net45">
    30         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           30  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    31     31         </group>
    32     32         <group targetFramework="net451">
    33         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           33  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    34     34         </group>
    35     35         <group targetFramework="net46">
    36         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           36  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    37     37         </group>
    38     38         <group targetFramework="net40">
    39         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           39  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    40     40         </group>
    41     41         <group targetFramework="net45">
    42         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           42  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    43     43         </group>
    44     44         <group targetFramework="net451">
    45         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           45  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    46     46         </group>
    47     47         <group targetFramework="net46">
    48         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           48  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    49     49         </group>
    50     50       </dependencies>
    51     51     </metadata>
    52     52     <files>
    53     53       <file src="..\bin\2008\x64\ReleaseStatic\System.Data.SQLite.dll" target="lib\net20" />
    54     54       <file src="..\bin\2008\Release\bin\System.Data.SQLite.xml" target="lib\net20" />
    55     55       <file src="..\bin\2010\x64\ReleaseStatic\System.Data.SQLite.dll" target="lib\net40" />

Changes to NuGet/SQLite.x86.nuspec.

     6      6    * Written by Joe Mistachkin.
     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <package>
    11     11     <metadata>
    12     12       <id>System.Data.SQLite.x86</id>
    13         -    <version>1.0.102.0</version>
           13  +    <version>1.0.103.0</version>
    14     14       <authors>SQLite Development Team</authors>
    15     15       <description>This is a legacy package; if possible, please use either the &quot;System.Data.SQLite&quot; or &quot;System.Data.SQLite.Core&quot; package instead.  The official SQLite database engine combined with a complete ADO.NET provider all rolled into a single mixed-mode assembly for x86.</description>
    16     16       <language>en-US</language>
    17     17       <projectUrl>https://system.data.sqlite.org/</projectUrl>
    18     18       <iconUrl>https://system.data.sqlite.org/images/sqlite128.png</iconUrl>
    19     19       <licenseUrl>https://www.sqlite.org/copyright.html</licenseUrl>
    20     20       <tags>sqlite database ado.net provider interop</tags>
    21     21       <copyright>Public Domain</copyright>
    22     22       <dependencies>
    23     23         <group targetFramework="net20">
    24         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           24  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    25     25         </group>
    26     26         <group targetFramework="net40">
    27         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           27  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    28     28         </group>
    29     29         <group targetFramework="net45">
    30         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           30  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    31     31         </group>
    32     32         <group targetFramework="net451">
    33         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           33  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    34     34         </group>
    35     35         <group targetFramework="net46">
    36         -        <dependency id="System.Data.SQLite.Linq" version="1.0.102.0" />
           36  +        <dependency id="System.Data.SQLite.Linq" version="1.0.103.0" />
    37     37         </group>
    38     38         <group targetFramework="net40">
    39         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           39  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    40     40         </group>
    41     41         <group targetFramework="net45">
    42         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           42  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    43     43         </group>
    44     44         <group targetFramework="net451">
    45         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           45  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    46     46         </group>
    47     47         <group targetFramework="net46">
    48         -        <dependency id="System.Data.SQLite.EF6" version="1.0.102.0" />
           48  +        <dependency id="System.Data.SQLite.EF6" version="1.0.103.0" />
    49     49         </group>
    50     50       </dependencies>
    51     51     </metadata>
    52     52     <files>
    53     53       <file src="..\bin\2008\Win32\ReleaseStatic\System.Data.SQLite.dll" target="lib\net20" />
    54     54       <file src="..\bin\2008\Release\bin\System.Data.SQLite.xml" target="lib\net20" />
    55     55       <file src="..\bin\2010\Win32\ReleaseStatic\System.Data.SQLite.dll" target="lib\net40" />

Changes to SQLite.Designer/AssemblyInfo.cs.

    39     39   //      Major Version
    40     40   //      Minor Version 
    41     41   //      Build Number
    42     42   //      Revision
    43     43   //
    44     44   // You can specify all the values or you can default the Revision and Build Numbers 
    45     45   // by using the '*' as shown below:
    46         -[assembly: AssemblyVersion("1.0.102.0")]
    47         -[assembly: AssemblyFileVersion("1.0.102.0")]
           46  +[assembly: AssemblyVersion("1.0.103.0")]
           47  +[assembly: AssemblyFileVersion("1.0.103.0")]

Changes to SQLite.Designer/source.extension.vsixmanifest.

     1      1   <?xml version="1.0" encoding="utf-8"?>
     2      2   <Vsix Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
     3      3     <Identifier Id="67b5f3a9-cde1-430f-a12b-af95bb064851">
     4      4       <Name>System.Data.SQLite Designer</Name>
     5      5       <Author>https://system.data.sqlite.org/</Author>
     6         -    <Version>1.0.102.0</Version>
            6  +    <Version>1.0.103.0</Version>
     7      7       <Description>ADO.NET Data Designer for SQLite</Description>
     8      8       <Locale>1033</Locale>
     9      9       <InstalledByMsi>false</InstalledByMsi>
    10     10       <SupportedProducts>
    11     11         <VisualStudio Version="10.0">
    12     12           <Edition>Pro</Edition>
    13     13         </VisualStudio>

Changes to SQLite.Interop/props/SQLite.Interop.2005.vsprops.

    15     15   	<UserMacro
    16     16   		Name="ConfigurationYear"
    17     17   		Value="2005"
    18     18   		PerformEnvironmentSet="true"
    19     19   	/>
    20     20   	<UserMacro
    21     21   		Name="INTEROP_BUILD_NUMBER"
    22         -		Value="102"
           22  +		Value="103"
    23     23   		PerformEnvironmentSet="true"
    24     24   	/>
    25     25   	<UserMacro
    26     26   		Name="INTEROP_LINKER_VERSION"
    27     27   		Value="1.0"
    28     28   		PerformEnvironmentSet="true"
    29     29   	/>
    30     30   	<UserMacro
    31     31   		Name="INTEROP_MANIFEST_VERSION"
    32         -		Value="1.0.102.0"
           32  +		Value="1.0.103.0"
    33     33   		PerformEnvironmentSet="true"
    34     34   	/>
    35     35   	<UserMacro
    36     36   		Name="INTEROP_RC_VERSION"
    37         -		Value="1,0,102,0"
           37  +		Value="1,0,103,0"
    38     38   		PerformEnvironmentSet="true"
    39     39   	/>
    40     40   	<UserMacro
    41     41   		Name="INTEROP_INCLUDE_DIRECTORIES"
    42     42   		Value="src\core"
    43     43   		PerformEnvironmentSet="true"
    44     44   	/>

Changes to SQLite.Interop/props/SQLite.Interop.2008.vsprops.

    15     15   	<UserMacro
    16     16   		Name="ConfigurationYear"
    17     17   		Value="2008"
    18     18   		PerformEnvironmentSet="true"
    19     19   	/>
    20     20   	<UserMacro
    21     21   		Name="INTEROP_BUILD_NUMBER"
    22         -		Value="102"
           22  +		Value="103"
    23     23   		PerformEnvironmentSet="true"
    24     24   	/>
    25     25   	<UserMacro
    26     26   		Name="INTEROP_LINKER_VERSION"
    27     27   		Value="1.0"
    28     28   		PerformEnvironmentSet="true"
    29     29   	/>
    30     30   	<UserMacro
    31     31   		Name="INTEROP_MANIFEST_VERSION"
    32         -		Value="1.0.102.0"
           32  +		Value="1.0.103.0"
    33     33   		PerformEnvironmentSet="true"
    34     34   	/>
    35     35   	<UserMacro
    36     36   		Name="INTEROP_RC_VERSION"
    37         -		Value="1,0,102,0"
           37  +		Value="1,0,103,0"
    38     38   		PerformEnvironmentSet="true"
    39     39   	/>
    40     40   	<UserMacro
    41     41   		Name="INTEROP_INCLUDE_DIRECTORIES"
    42     42   		Value="src\core"
    43     43   		PerformEnvironmentSet="true"
    44     44   	/>

Changes to SQLite.Interop/props/SQLite.Interop.2010.props.

     6      6    * Written by Joe Mistachkin.
     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
    11     11     <PropertyGroup Label="UserMacros">
    12     12       <ConfigurationYear>2010</ConfigurationYear>
    13         -    <INTEROP_BUILD_NUMBER>102</INTEROP_BUILD_NUMBER>
           13  +    <INTEROP_BUILD_NUMBER>103</INTEROP_BUILD_NUMBER>
    14     14       <INTEROP_LINKER_VERSION>1.0</INTEROP_LINKER_VERSION>
    15         -    <INTEROP_MANIFEST_VERSION>1.0.102.0</INTEROP_MANIFEST_VERSION>
    16         -    <INTEROP_RC_VERSION>1,0,102,0</INTEROP_RC_VERSION>
           15  +    <INTEROP_MANIFEST_VERSION>1.0.103.0</INTEROP_MANIFEST_VERSION>
           16  +    <INTEROP_RC_VERSION>1,0,103,0</INTEROP_RC_VERSION>
    17     17       <INTEROP_INCLUDE_DIRECTORIES>src\core</INTEROP_INCLUDE_DIRECTORIES>
    18     18       <INTEROP_LIBRARY_DIRECTORIES></INTEROP_LIBRARY_DIRECTORIES>
    19     19       <INTEROP_LIBRARY_DEPENDENCIES></INTEROP_LIBRARY_DEPENDENCIES>
    20     20       <INTEROP_DEBUG_DEFINES>INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1</INTEROP_DEBUG_DEFINES>
    21     21       <INTEROP_EXTRA_DEFINES>INTEROP_PLACEHOLDER=1;INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1;INTEROP_VIRTUAL_TABLE=1;INTEROP_FTS5_EXTENSION=1;INTEROP_PERCENTILE_EXTENSION=1;INTEROP_TOTYPE_EXTENSION=1;INTEROP_REGEXP_EXTENSION=1;INTEROP_JSON1_EXTENSION=1</INTEROP_EXTRA_DEFINES>
    22     22       <INTEROP_ASSEMBLY_RESOURCES>/ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp</INTEROP_ASSEMBLY_RESOURCES>
    23     23       <INTEROP_KEY_FILE>$(ProjectDir)..\Keys\System.Data.SQLite.snk</INTEROP_KEY_FILE>

Changes to SQLite.Interop/props/SQLite.Interop.2012.props.

     6      6    * Written by Joe Mistachkin.
     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
    11     11     <PropertyGroup Label="UserMacros">
    12     12       <ConfigurationYear>2012</ConfigurationYear>
    13         -    <INTEROP_BUILD_NUMBER>102</INTEROP_BUILD_NUMBER>
           13  +    <INTEROP_BUILD_NUMBER>103</INTEROP_BUILD_NUMBER>
    14     14       <INTEROP_LINKER_VERSION>1.0</INTEROP_LINKER_VERSION>
    15         -    <INTEROP_MANIFEST_VERSION>1.0.102.0</INTEROP_MANIFEST_VERSION>
    16         -    <INTEROP_RC_VERSION>1,0,102,0</INTEROP_RC_VERSION>
           15  +    <INTEROP_MANIFEST_VERSION>1.0.103.0</INTEROP_MANIFEST_VERSION>
           16  +    <INTEROP_RC_VERSION>1,0,103,0</INTEROP_RC_VERSION>
    17     17       <INTEROP_INCLUDE_DIRECTORIES>src\core</INTEROP_INCLUDE_DIRECTORIES>
    18     18       <INTEROP_LIBRARY_DIRECTORIES></INTEROP_LIBRARY_DIRECTORIES>
    19     19       <INTEROP_LIBRARY_DEPENDENCIES></INTEROP_LIBRARY_DEPENDENCIES>
    20     20       <INTEROP_DEBUG_DEFINES>INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1</INTEROP_DEBUG_DEFINES>
    21     21       <INTEROP_EXTRA_DEFINES>INTEROP_PLACEHOLDER=1;INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1;INTEROP_VIRTUAL_TABLE=1;INTEROP_FTS5_EXTENSION=1;INTEROP_PERCENTILE_EXTENSION=1;INTEROP_TOTYPE_EXTENSION=1;INTEROP_REGEXP_EXTENSION=1;INTEROP_JSON1_EXTENSION=1</INTEROP_EXTRA_DEFINES>
    22     22       <INTEROP_ASSEMBLY_RESOURCES>/ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp</INTEROP_ASSEMBLY_RESOURCES>
    23     23       <INTEROP_KEY_FILE>$(ProjectDir)..\Keys\System.Data.SQLite.snk</INTEROP_KEY_FILE>

Changes to SQLite.Interop/props/SQLite.Interop.2013.props.

     6      6    * Written by Joe Mistachkin.
     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
    11     11     <PropertyGroup Label="UserMacros">
    12     12       <ConfigurationYear>2013</ConfigurationYear>
    13         -    <INTEROP_BUILD_NUMBER>102</INTEROP_BUILD_NUMBER>
           13  +    <INTEROP_BUILD_NUMBER>103</INTEROP_BUILD_NUMBER>
    14     14       <INTEROP_LINKER_VERSION>1.0</INTEROP_LINKER_VERSION>
    15         -    <INTEROP_MANIFEST_VERSION>1.0.102.0</INTEROP_MANIFEST_VERSION>
    16         -    <INTEROP_RC_VERSION>1,0,102,0</INTEROP_RC_VERSION>
           15  +    <INTEROP_MANIFEST_VERSION>1.0.103.0</INTEROP_MANIFEST_VERSION>
           16  +    <INTEROP_RC_VERSION>1,0,103,0</INTEROP_RC_VERSION>
    17     17       <INTEROP_INCLUDE_DIRECTORIES>src\core</INTEROP_INCLUDE_DIRECTORIES>
    18     18       <INTEROP_LIBRARY_DIRECTORIES></INTEROP_LIBRARY_DIRECTORIES>
    19     19       <INTEROP_LIBRARY_DEPENDENCIES></INTEROP_LIBRARY_DEPENDENCIES>
    20     20       <INTEROP_DEBUG_DEFINES>INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1</INTEROP_DEBUG_DEFINES>
    21     21       <INTEROP_EXTRA_DEFINES>INTEROP_PLACEHOLDER=1;INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1;INTEROP_VIRTUAL_TABLE=1;INTEROP_FTS5_EXTENSION=1;INTEROP_PERCENTILE_EXTENSION=1;INTEROP_TOTYPE_EXTENSION=1;INTEROP_REGEXP_EXTENSION=1;INTEROP_JSON1_EXTENSION=1</INTEROP_EXTRA_DEFINES>
    22     22       <INTEROP_ASSEMBLY_RESOURCES>/ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp</INTEROP_ASSEMBLY_RESOURCES>
    23     23       <INTEROP_KEY_FILE>$(ProjectDir)..\Keys\System.Data.SQLite.snk</INTEROP_KEY_FILE>

Changes to SQLite.Interop/props/SQLite.Interop.2015.props.

     6      6    * Written by Joe Mistachkin.
     7      7    * Released to the public domain, use at your own risk!
     8      8    *
     9      9   -->
    10     10   <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
    11     11     <PropertyGroup Label="UserMacros">
    12     12       <ConfigurationYear>2015</ConfigurationYear>
    13         -    <INTEROP_BUILD_NUMBER>102</INTEROP_BUILD_NUMBER>
           13  +    <INTEROP_BUILD_NUMBER>103</INTEROP_BUILD_NUMBER>
    14     14       <INTEROP_LINKER_VERSION>1.0</INTEROP_LINKER_VERSION>
    15         -    <INTEROP_MANIFEST_VERSION>1.0.102.0</INTEROP_MANIFEST_VERSION>
    16         -    <INTEROP_RC_VERSION>1,0,102,0</INTEROP_RC_VERSION>
           15  +    <INTEROP_MANIFEST_VERSION>1.0.103.0</INTEROP_MANIFEST_VERSION>
           16  +    <INTEROP_RC_VERSION>1,0,103,0</INTEROP_RC_VERSION>
    17     17       <INTEROP_INCLUDE_DIRECTORIES>src\core</INTEROP_INCLUDE_DIRECTORIES>
    18     18       <INTEROP_LIBRARY_DIRECTORIES></INTEROP_LIBRARY_DIRECTORIES>
    19     19       <INTEROP_LIBRARY_DEPENDENCIES></INTEROP_LIBRARY_DEPENDENCIES>
    20     20       <INTEROP_DEBUG_DEFINES>INTEROP_DEBUG=0x31F;INTEROP_LOG=1;INTEROP_TEST_EXTENSION=1</INTEROP_DEBUG_DEFINES>
    21     21       <INTEROP_EXTRA_DEFINES>INTEROP_PLACEHOLDER=1;INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1;INTEROP_VIRTUAL_TABLE=1;INTEROP_FTS5_EXTENSION=1;INTEROP_PERCENTILE_EXTENSION=1;INTEROP_TOTYPE_EXTENSION=1;INTEROP_REGEXP_EXTENSION=1;INTEROP_JSON1_EXTENSION=1</INTEROP_EXTRA_DEFINES>
    22     22       <INTEROP_ASSEMBLY_RESOURCES>/ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\Resources\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp</INTEROP_ASSEMBLY_RESOURCES>
    23     23       <INTEROP_KEY_FILE>$(ProjectDir)..\Keys\System.Data.SQLite.snk</INTEROP_KEY_FILE>

Changes to SQLite.Interop/src/generic/interop.c.

    60     60   #define INTEROP_DEBUG_OPEN           (0x0008)
    61     61   #define INTEROP_DEBUG_OPEN16         (0x0010)
    62     62   #define INTEROP_DEBUG_PREPARE        (0x0020)
    63     63   #define INTEROP_DEBUG_PREPARE16      (0x0040)
    64     64   #define INTEROP_DEBUG_RESET          (0x0080)
    65     65   #define INTEROP_DEBUG_CHANGES        (0x0100)
    66     66   #define INTEROP_DEBUG_BREAK          (0x0200)
           67  +#define INTEROP_DEBUG_BLOB_CLOSE     (0x0400)
    67     68   
    68     69   #if defined(_MSC_VER) && defined(INTEROP_DEBUG) && \
    69     70       (INTEROP_DEBUG & INTEROP_DEBUG_BREAK)
    70     71   #define sqlite3InteropBreak(a) { sqlite3InteropDebug("%s\n", (a)); __debugbreak(); }
    71     72   #else
    72     73   #define sqlite3InteropBreak(a)
    73     74   #endif
................................................................................
   717    718   #endif
   718    719   
   719    720     ret = sqlite3_backup_finish(p);
   720    721   
   721    722   #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_BACKUP_FINISH)
   722    723     sqlite3InteropDebug("sqlite3_backup_finish_interop(): sqlite3_backup_finish(%p, %p, %p) returned %d.\n", pDestDb, pSrcDb, p, ret);
   723    724   #endif
          725  +
          726  +  return ret;
          727  +}
          728  +
          729  +SQLITE_API int WINAPI sqlite3_blob_close_interop(sqlite3_blob *p)
          730  +{
          731  +  int ret;
          732  +
          733  +#if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_BLOB_CLOSE)
          734  +  sqlite3InteropDebug("sqlite3_blob_close_interop(): calling sqlite3_blob_close(%p)...\n", p);
          735  +#endif
          736  +
          737  +  ret = sqlite3_blob_close(p);
          738  +
          739  +#if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_BLOB_CLOSE)
          740  +  sqlite3InteropDebug("sqlite3_blob_close_interop(): sqlite3_blob_close(%p) returned %d.\n", p, ret);
          741  +#endif
   724    742   
   725    743     return ret;
   726    744   }
   727    745   
   728    746   SQLITE_API int WINAPI sqlite3_reset_interop(sqlite3_stmt *stmt)
   729    747   {
   730    748     int ret;

Changes to SQLite.Interop/src/generic/interop.h.

     2      2    * interop.h -
     3      3    *
     4      4    * Written by Joe Mistachkin.
     5      5    * Released to the public domain, use at your own risk!
     6      6    */
     7      7   
     8      8   #ifndef INTEROP_VERSION
     9         -#define INTEROP_VERSION          "1.0.102.0"
            9  +#define INTEROP_VERSION          "1.0.103.0"
    10     10   #endif
    11     11   
    12     12   #ifndef INTEROP_SOURCE_ID
    13     13   #define INTEROP_SOURCE_ID        "0000000000000000000000000000000000000000"
    14     14   #endif
    15     15   
    16     16   #ifndef INTEROP_SOURCE_TIMESTAMP
    17     17   #define INTEROP_SOURCE_TIMESTAMP "0000-00-00 00:00:00 UTC"
    18     18   #endif

Changes to Setup/data/verify.lst.

   554    554     System.Data.SQLite/Resources/SQLiteDataAdapter.bmp
   555    555     System.Data.SQLite/Resources/SR.Designer.cs
   556    556     System.Data.SQLite/Resources/SR.resx
   557    557     System.Data.SQLite/SQLite3.cs
   558    558     System.Data.SQLite/SQLite3_UTF16.cs
   559    559     System.Data.SQLite/SQLiteBackup.cs
   560    560     System.Data.SQLite/SQLiteBase.cs
          561  +  System.Data.SQLite/SQLiteBlob.cs
   561    562     System.Data.SQLite/SQLiteCommand.cs
   562    563     System.Data.SQLite/SQLiteCommandBuilder.cs
   563    564     System.Data.SQLite/SQLiteConnection.cs
   564    565     System.Data.SQLite/SQLiteConnectionPool.cs
   565    566     System.Data.SQLite/SQLiteConnectionStringBuilder.cs
   566    567     System.Data.SQLite/SQLiteConvert.cs
   567    568     System.Data.SQLite/SQLiteDataAdapter.cs

Changes to System.Data.SQLite.Linq/AssemblyInfo.cs.

    49     49   //      Minor Version 
    50     50   //      Build Number
    51     51   //      Revision
    52     52   //
    53     53   // You can specify all the values or you can default the Build and Revision Numbers 
    54     54   // by using the '*' as shown below:
    55     55   // [assembly: AssemblyVersion("1.0.*")]
    56         -[assembly: AssemblyVersion("1.0.102.0")]
    57         -[assembly: AssemblyFileVersion("1.0.102.0")]
           56  +[assembly: AssemblyVersion("1.0.103.0")]
           57  +[assembly: AssemblyFileVersion("1.0.103.0")]

Changes to System.Data.SQLite/AssemblyInfo.cs.

    68     68   //      Major Version
    69     69   //      Minor Version 
    70     70   //      Build Number
    71     71   //      Revision
    72     72   //
    73     73   // You can specify all the values or you can default the Revision and Build Numbers 
    74     74   // by using the '*' as shown below:
    75         -[assembly: AssemblyVersion("1.0.102.0")]
           75  +[assembly: AssemblyVersion("1.0.103.0")]
    76     76   #if !PLATFORM_COMPACTFRAMEWORK
    77         -[assembly: AssemblyFileVersion("1.0.102.0")]
           77  +[assembly: AssemblyFileVersion("1.0.103.0")]
    78     78   #endif

Changes to System.Data.SQLite/SQLite3.cs.

    54     54       internal const string PublicKey =
    55     55           "002400000480000094000000060200000024000052534131000400000100010005a288de5687c4e1" +
    56     56           "b621ddff5d844727418956997f475eb829429e411aff3e93f97b70de698b972640925bdd44280df0" +
    57     57           "a25a843266973704137cbb0e7441c1fe7cae4e2440ae91ab8cde3933febcb1ac48dd33b40e13c421" +
    58     58           "d8215c18a4349a436dd499e3c385cc683015f886f6c10bd90115eb2bd61b67750839e3a19941dc9c";
    59     59   
    60     60   #if !PLATFORM_COMPACTFRAMEWORK
    61         -    internal const string DesignerVersion = "1.0.102.0";
           61  +    internal const string DesignerVersion = "1.0.103.0";
    62     62   #endif
    63     63   
    64     64       /// <summary>
    65     65       /// The opaque pointer returned to us by the sqlite provider
    66     66       /// </summary>
    67     67       protected internal SQLiteConnectionHandle _sql;
    68     68       protected string _fileName;

Changes to System.Data.SQLite/SQLiteBase.cs.

   687    687   #else
   688    688                   SQLiteErrorCode n = UnsafeNativeMethods.sqlite3_backup_finish(backup);
   689    689   #endif
   690    690                   if (n != SQLiteErrorCode.Ok) throw new SQLiteException(n, null);
   691    691               }
   692    692           }
   693    693       }
          694  +
          695  +    internal static void CloseBlob(SQLiteConnectionHandle hdl, IntPtr blob)
          696  +    {
          697  +        if ((hdl == null) || (blob == IntPtr.Zero)) return;
          698  +
          699  +        try
          700  +        {
          701  +            // do nothing.
          702  +        }
          703  +        finally /* NOTE: Thread.Abort() protection. */
          704  +        {
          705  +#if PLATFORM_COMPACTFRAMEWORK
          706  +            lock (hdl.syncRoot)
          707  +#else
          708  +            lock (hdl)
          709  +#endif
          710  +            {
          711  +#if !SQLITE_STANDARD
          712  +                SQLiteErrorCode n = UnsafeNativeMethods.sqlite3_blob_close_interop(blob);
          713  +#else
          714  +                SQLiteErrorCode n = UnsafeNativeMethods.sqlite3_blob_close(blob);
          715  +#endif
          716  +                if (n != SQLiteErrorCode.Ok) throw new SQLiteException(n, null);
          717  +            }
          718  +        }
          719  +    }
   694    720   
   695    721       internal static void FinalizeStatement(SQLiteConnectionHandle hdl, IntPtr stmt)
   696    722       {
   697    723           if ((hdl == null) || (stmt == IntPtr.Zero)) return;
   698    724   
   699    725           try
   700    726           {
................................................................................
  1187   1213         /// <summary>
  1188   1214         /// If the database type name has not been explicitly set for the
  1189   1215         /// parameter specified, fallback to using the database type name
  1190   1216         /// associated with the <see cref="DbType" /> value.
  1191   1217         /// </summary>
  1192   1218         UseParameterDbTypeForTypeName = 0x2000000000,
  1193   1219   
         1220  +      /// <summary>
         1221  +      /// When returning column values, skip verifying their affinity.
         1222  +      /// </summary>
         1223  +      NoVerifyTypeAffinity = 0x4000000000,
         1224  +
  1194   1225         /// <summary>
  1195   1226         /// When binding parameter values or returning column values, always
  1196   1227         /// treat them as though they were plain text (i.e. no numeric,
  1197   1228         /// date/time, or other conversions should be attempted).
  1198   1229         /// </summary>
  1199   1230         BindAndGetAllAsText = BindAllAsText | GetAllAsText,
  1200   1231   

Added System.Data.SQLite/SQLiteBlob.cs.

            1  +/********************************************************
            2  + * ADO.NET 2.0 Data Provider for SQLite Version 3.X
            3  + * Written by Joe Mistachkin (joe@mistachkin.com)
            4  + *
            5  + * Released to the public domain, use at your own risk!
            6  + ********************************************************/
            7  +
            8  +namespace System.Data.SQLite
            9  +{
           10  +    using System;
           11  +
           12  +    /// <summary>
           13  +    /// Represents a single SQL blob in SQLite.
           14  +    /// </summary>
           15  +    public sealed class SQLiteBlob : IDisposable
           16  +    {
           17  +        #region Private Data
           18  +        /// <summary>
           19  +        /// The underlying SQLite object this blob is bound to.
           20  +        /// </summary>
           21  +        internal SQLiteBase _sql;
           22  +
           23  +        /// <summary>
           24  +        /// The actual blob handle.
           25  +        /// </summary>
           26  +        internal SQLiteBlobHandle _sqlite_blob;
           27  +        #endregion
           28  +
           29  +        ///////////////////////////////////////////////////////////////////////////////////////////////
           30  +
           31  +        #region Private Constructors
           32  +        /// <summary>
           33  +        /// Initializes the blob.
           34  +        /// </summary>
           35  +        /// <param name="sqlbase">The base SQLite object.</param>
           36  +        /// <param name="blob">The blob handle.</param>
           37  +        private SQLiteBlob(
           38  +            SQLiteBase sqlbase,
           39  +            SQLiteBlobHandle blob
           40  +            )
           41  +        {
           42  +            _sql = sqlbase;
           43  +            _sqlite_blob = blob;
           44  +        }
           45  +        #endregion
           46  +
           47  +        ///////////////////////////////////////////////////////////////////////////////////////////////
           48  +
           49  +        #region Static "Factory" Methods
           50  +        public static SQLiteBlob Create(
           51  +            SQLiteDataReader dataReader,
           52  +            int i,
           53  +            bool readOnly
           54  +            )
           55  +        {
           56  +            SQLiteConnection connection = SQLiteDataReader.GetConnection(
           57  +                dataReader);
           58  +
           59  +            if (connection == null)
           60  +                throw new InvalidOperationException("Connection not available");
           61  +
           62  +            SQLite3 sqlite3 = connection._sql as SQLite3;
           63  +
           64  +            if (sqlite3 == null)
           65  +                throw new InvalidOperationException("Connection has no wrapper");
           66  +
           67  +            SQLiteConnectionHandle handle = sqlite3._sql;
           68  +
           69  +            if (handle == null)
           70  +                throw new InvalidOperationException("Connection has an invalid handle.");
           71  +
           72  +            long? rowId = dataReader.GetRowId(i);
           73  +
           74  +            if (rowId == null)
           75  +                throw new InvalidOperationException("No RowId is available");
           76  +
           77  +            SQLiteBlobHandle blob = null;
           78  +
           79  +            try
           80  +            {
           81  +                // do nothing.
           82  +            }
           83  +            finally /* NOTE: Thread.Abort() protection. */
           84  +            {
           85  +                IntPtr ptrBlob = IntPtr.Zero;
           86  +
           87  +                SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_blob_open(
           88  +                    sqlite3._sql, SQLiteConvert.ToUTF8(
           89  +                        dataReader.GetDatabaseName(i)), SQLiteConvert.ToUTF8(
           90  +                    dataReader.GetTableName(i)), SQLiteConvert.ToUTF8(
           91  +                        dataReader.GetName(i)), (long)rowId, readOnly ? 0 : 1,
           92  +                    ref ptrBlob);
           93  +
           94  +                if (rc != SQLiteErrorCode.Ok)
           95  +                    throw new SQLiteException(rc, null);
           96  +
           97  +                blob = new SQLiteBlobHandle(handle, ptrBlob);
           98  +            }
           99  +
          100  +            SQLiteConnection.OnChanged(null, new ConnectionEventArgs(
          101  +                SQLiteConnectionEventType.NewCriticalHandle, null,
          102  +                null, null, dataReader, blob, null, new object[] {
          103  +                typeof(SQLiteBlob), dataReader, i, readOnly }));
          104  +
          105  +            return new SQLiteBlob(sqlite3, blob);
          106  +        }
          107  +        #endregion
          108  +
          109  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          110  +
          111  +        #region Private Methods
          112  +        /// <summary>
          113  +        /// Throws an exception if the blob object does not appear to be open.
          114  +        /// </summary>
          115  +        private void CheckOpen()
          116  +        {
          117  +            if (_sqlite_blob == IntPtr.Zero)
          118  +                throw new InvalidOperationException("Blob is not open");
          119  +        }
          120  +
          121  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          122  +
          123  +        /// <summary>
          124  +        /// Throws an exception if an invalid read/write parameter is detected.
          125  +        /// </summary>
          126  +        /// <param name="buffer">
          127  +        /// When reading, this array will be populated with the bytes read from
          128  +        /// the underlying database blob.  When writing, this array contains new
          129  +        /// values for the specified portion of the underlying database blob.
          130  +        /// </param>
          131  +        /// <param name="count">
          132  +        /// The number of bytes to read or write.
          133  +        /// </param>
          134  +        /// <param name="offset">
          135  +        /// The byte offset, relative to the start of the underlying database
          136  +        /// blob, where the read or write operation will begin.
          137  +        /// </param>
          138  +        private void VerifyParameters(
          139  +            byte[] buffer,
          140  +            int count,
          141  +            int offset
          142  +            )
          143  +        {
          144  +            if (buffer == null)
          145  +                throw new ArgumentNullException("buffer");
          146  +
          147  +            if (offset < 0)
          148  +                throw new ArgumentException("Negative offset not allowed.");
          149  +
          150  +            if (count < 0)
          151  +                throw new ArgumentException("Negative count not allowed.");
          152  +
          153  +            if (count > buffer.Length)
          154  +                throw new ArgumentException("Buffer is too small.");
          155  +        }
          156  +        #endregion
          157  +
          158  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          159  +
          160  +        #region Public Methods
          161  +        /// <summary>
          162  +        /// Retargets this object to an underlying database blob for a
          163  +        /// different row; the database, table, and column remain exactly
          164  +        /// the same.  If this operation fails for any reason, this blob
          165  +        /// object is automatically disposed.
          166  +        /// </summary>
          167  +        /// <param name="rowId">
          168  +        /// The integer identifier for the new row.
          169  +        /// </param>
          170  +        public void Reopen(
          171  +            long rowId
          172  +            )
          173  +        {
          174  +            CheckDisposed();
          175  +            CheckOpen();
          176  +
          177  +            SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_blob_reopen(
          178  +                _sqlite_blob, rowId);
          179  +
          180  +            if (rc != SQLiteErrorCode.Ok)
          181  +            {
          182  +                Dispose();
          183  +                throw new SQLiteException(rc, null);
          184  +            }
          185  +        }
          186  +
          187  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          188  +
          189  +        /// <summary>
          190  +        /// Queries the total number of bytes for the underlying database blob.
          191  +        /// </summary>
          192  +        /// <returns>
          193  +        /// The total number of bytes for the underlying database blob.
          194  +        /// </returns>
          195  +        public int GetCount()
          196  +        {
          197  +            CheckDisposed();
          198  +            CheckOpen();
          199  +
          200  +            return UnsafeNativeMethods.sqlite3_blob_bytes(_sqlite_blob);
          201  +        }
          202  +
          203  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          204  +
          205  +        /// <summary>
          206  +        /// Reads data from the underlying database blob.
          207  +        /// </summary>
          208  +        /// <param name="buffer">
          209  +        /// This array will be populated with the bytes read from the
          210  +        /// underlying database blob.
          211  +        /// </param>
          212  +        /// <param name="count">
          213  +        /// The number of bytes to read.
          214  +        /// </param>
          215  +        /// <param name="offset">
          216  +        /// The byte offset, relative to the start of the underlying
          217  +        /// database blob, where the read operation will begin.
          218  +        /// </param>
          219  +        public void Read(
          220  +            byte[] buffer,
          221  +            int count,
          222  +            int offset
          223  +            )
          224  +        {
          225  +            CheckDisposed();
          226  +            CheckOpen();
          227  +            VerifyParameters(buffer, count, offset);
          228  +
          229  +            SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_blob_read(
          230  +                _sqlite_blob, buffer, count, offset);
          231  +
          232  +            if (rc != SQLiteErrorCode.Ok)
          233  +                throw new SQLiteException(rc, null);
          234  +        }
          235  +
          236  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          237  +
          238  +        /// <summary>
          239  +        /// Writes data into the underlying database blob.
          240  +        /// </summary>
          241  +        /// <param name="buffer">
          242  +        /// This array contains the new values for the specified portion of
          243  +        /// the underlying database blob.
          244  +        /// </param>
          245  +        /// <param name="count">
          246  +        /// The number of bytes to write.
          247  +        /// </param>
          248  +        /// <param name="offset">
          249  +        /// The byte offset, relative to the start of the underlying
          250  +        /// database blob, where the write operation will begin.
          251  +        /// </param>
          252  +        public void Write(
          253  +            byte[] buffer,
          254  +            int count,
          255  +            int offset
          256  +            )
          257  +        {
          258  +            CheckDisposed();
          259  +            CheckOpen();
          260  +            VerifyParameters(buffer, count, offset);
          261  +
          262  +            SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_blob_write(
          263  +                _sqlite_blob, buffer, count, offset);
          264  +
          265  +            if (rc != SQLiteErrorCode.Ok)
          266  +                throw new SQLiteException(rc, null);
          267  +        }
          268  +
          269  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          270  +
          271  +        /// <summary>
          272  +        /// Closes the blob, freeing the associated resources.
          273  +        /// </summary>
          274  +        public void Close()
          275  +        {
          276  +            Dispose();
          277  +        }
          278  +        #endregion
          279  +
          280  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          281  +
          282  +        #region IDisposable Members
          283  +        /// <summary>
          284  +        /// Disposes and finalizes the blob.
          285  +        /// </summary>
          286  +        public void Dispose()
          287  +        {
          288  +            Dispose(true);
          289  +            GC.SuppressFinalize(this);
          290  +        }
          291  +        #endregion
          292  +
          293  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          294  +
          295  +        #region IDisposable "Pattern" Members
          296  +        private bool disposed;
          297  +        private void CheckDisposed() /* throw */
          298  +        {
          299  +#if THROW_ON_DISPOSED
          300  +        if (disposed)
          301  +            throw new ObjectDisposedException(typeof(SQLiteBlob).Name);
          302  +#endif
          303  +        }
          304  +
          305  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          306  +
          307  +        private void Dispose(bool disposing)
          308  +        {
          309  +            if (!disposed)
          310  +            {
          311  +                if (disposing)
          312  +                {
          313  +                    ////////////////////////////////////
          314  +                    // dispose managed resources here...
          315  +                    ////////////////////////////////////
          316  +
          317  +                    if (_sqlite_blob != null)
          318  +                    {
          319  +                        _sqlite_blob.Dispose();
          320  +                        _sqlite_blob = null;
          321  +                    }
          322  +
          323  +                    _sql = null;
          324  +                }
          325  +
          326  +                //////////////////////////////////////
          327  +                // release unmanaged resources here...
          328  +                //////////////////////////////////////
          329  +
          330  +                disposed = true;
          331  +            }
          332  +        }
          333  +        #endregion
          334  +
          335  +        ///////////////////////////////////////////////////////////////////////////////////////////////
          336  +
          337  +        #region Destructor
          338  +        ~SQLiteBlob()
          339  +        {
          340  +            Dispose(false);
          341  +        }
          342  +        #endregion
          343  +    }
          344  +}

Changes to System.Data.SQLite/SQLiteConnection.cs.

    20     20     using System.Text;
    21     21   
    22     22     /////////////////////////////////////////////////////////////////////////////////////////////////
    23     23   
    24     24     /// <summary>
    25     25     /// This class represents a single value to be returned
    26     26     /// from the <see cref="SQLiteDataReader" /> class via
    27         -  /// its <see cref="SQLiteDataReader.GetBoolean" />,
           27  +  /// its <see cref="SQLiteDataReader.GetBlob" />,
           28  +  /// <see cref="SQLiteDataReader.GetBoolean" />,
    28     29     /// <see cref="SQLiteDataReader.GetByte" />,
    29     30     /// <see cref="SQLiteDataReader.GetBytes" />,
    30     31     /// <see cref="SQLiteDataReader.GetChar" />,
    31     32     /// <see cref="SQLiteDataReader.GetChars" />,
    32     33     /// <see cref="SQLiteDataReader.GetDateTime" />,
    33     34     /// <see cref="SQLiteDataReader.GetDecimal" />,
    34     35     /// <see cref="SQLiteDataReader.GetDouble" />,
................................................................................
    44     45     /// <see cref="SQLiteDataReader" /> method called is not a value type.
    45     46     /// If the value to be returned from the <see cref="SQLiteDataReader" />
    46     47     /// method is unsuitable (e.g. null with a value type), an exception will
    47     48     /// be thrown.
    48     49     /// </summary>
    49     50     public sealed class SQLiteDataReaderValue
    50     51     {
           52  +      /// <summary>
           53  +      /// The value to be returned from the
           54  +      /// <see cref="SQLiteDataReader.GetBlob" /> method -OR- null to
           55  +      /// indicate an error.
           56  +      /// </summary>
           57  +      public SQLiteBlob BlobValue;
           58  +
    51     59         /// <summary>
    52     60         /// The value to be returned from the
    53     61         /// <see cref="SQLiteDataReader.GetBoolean" /> method -OR- null to
    54     62         /// indicate an error.
    55     63         /// </summary>
    56     64         public bool? BooleanValue;
    57     65   
................................................................................
   148    156         /// <see cref="SQLiteDataReader.GetValue" /> method.
   149    157         /// </summary>
   150    158         public object Value;
   151    159     }
   152    160   
   153    161     /////////////////////////////////////////////////////////////////////////////////////////////////
   154    162   
          163  +  /// <summary>
          164  +  /// This class represents the parameters that are provided
          165  +  /// to the <see cref="SQLiteDataReader" /> methods, with
          166  +  /// the exception of the column index (provided separately).
          167  +  /// </summary>
          168  +  public abstract class SQLiteReadEventArgs : EventArgs
          169  +  {
          170  +      // nothing.
          171  +  }
          172  +
          173  +  /////////////////////////////////////////////////////////////////////////////////////////////////
          174  +
          175  +  /// <summary>
          176  +  /// This class represents the parameters that are provided to
          177  +  /// the <see cref="SQLiteDataReader.GetBlob" /> method, with
          178  +  /// the exception of the column index (provided separately).
          179  +  /// </summary>
          180  +  public class SQLiteReadBlobEventArgs : SQLiteReadEventArgs
          181  +  {
          182  +      #region Private Data
          183  +      /// <summary>
          184  +      /// Provides the underlying storage for the
          185  +      /// <see cref="ReadOnly" /> property.
          186  +      /// </summary>
          187  +      private bool readOnly;
          188  +      #endregion
          189  +
          190  +      /////////////////////////////////////////////////////////////////////////
          191  +
          192  +      #region Private Constructors
          193  +      /// <summary>
          194  +      /// Constructs an instance of this class to pass into a user-defined
          195  +      /// callback associated with the <see cref="SQLiteDataReader.GetBlob" />
          196  +      /// method.
          197  +      /// </summary>
          198  +      /// <param name="readOnly">
          199  +      /// The value that was originally specified for the "readOnly"
          200  +      /// parameter to the <see cref="SQLiteDataReader.GetBlob" /> method.
          201  +      /// </param>
          202  +      internal SQLiteReadBlobEventArgs(
          203  +          bool readOnly
          204  +          )
          205  +      {
          206  +          this.readOnly = readOnly;
          207  +      }
          208  +      #endregion
          209  +
          210  +      /////////////////////////////////////////////////////////////////////////
          211  +
          212  +      #region Public Properties
          213  +      /// <summary>
          214  +      /// The value that was originally specified for the "readOnly"
          215  +      /// parameter to the <see cref="SQLiteDataReader.GetBlob" /> method.
          216  +      /// </summary>
          217  +      public bool ReadOnly
          218  +      {
          219  +          get { return readOnly; }
          220  +          set { readOnly = value; }
          221  +      }
          222  +      #endregion
          223  +  }
          224  +
          225  +  /////////////////////////////////////////////////////////////////////////////////////////////////
          226  +
   155    227     /// <summary>
   156    228     /// This class represents the parameters that are provided
   157    229     /// to the <see cref="SQLiteDataReader.GetBytes" /> and
   158    230     /// <see cref="SQLiteDataReader.GetChars" /> methods, with
   159    231     /// the exception of the column index (provided separately).
   160    232     /// </summary>
   161         -  public class SQLiteReadArrayEventArgs : EventArgs
          233  +  public class SQLiteReadArrayEventArgs : SQLiteReadEventArgs
   162    234     {
   163    235         #region Private Data
   164    236         /// <summary>
   165    237         /// Provides the underlying storage for the
   166    238         /// <see cref="DataOffset" /> property.
   167    239         /// </summary>
   168    240         private long dataOffset;
................................................................................
   340    412         #endregion
   341    413     }
   342    414   
   343    415     /////////////////////////////////////////////////////////////////////////////////////////////////
   344    416   
   345    417     /// <summary>
   346    418     /// This class represents the parameters and return values for the
          419  +  /// <see cref="SQLiteDataReader.GetBlob" />,
   347    420     /// <see cref="SQLiteDataReader.GetBoolean" />,
   348    421     /// <see cref="SQLiteDataReader.GetByte" />,
   349    422     /// <see cref="SQLiteDataReader.GetBytes" />,
   350    423     /// <see cref="SQLiteDataReader.GetChar" />,
   351    424     /// <see cref="SQLiteDataReader.GetChars" />,
   352    425     /// <see cref="SQLiteDataReader.GetDateTime" />,
   353    426     /// <see cref="SQLiteDataReader.GetDecimal" />,
................................................................................
   356    429     /// <see cref="SQLiteDataReader.GetGuid" />,
   357    430     /// <see cref="SQLiteDataReader.GetInt16" />,
   358    431     /// <see cref="SQLiteDataReader.GetInt32" />,
   359    432     /// <see cref="SQLiteDataReader.GetInt64" />,
   360    433     /// <see cref="SQLiteDataReader.GetString" />, and
   361    434     /// <see cref="SQLiteDataReader.GetValue" /> methods.
   362    435     /// </summary>
   363         -  public class SQLiteReadValueEventArgs : EventArgs
          436  +  public class SQLiteReadValueEventArgs : SQLiteReadEventArgs
   364    437     {
   365    438         #region Private Data
   366    439         /// <summary>
   367    440         /// Provides the underlying storage for the
   368    441         /// <see cref="MethodName" /> property.
   369    442         /// </summary>
   370    443         private string methodName;
   371    444   
   372    445         /// <summary>
   373    446         /// Provides the underlying storage for the
   374         -      /// <see cref="ArrayEventArgs" /> property.
          447  +      /// <see cref="ExtraEventArgs" /> property.
   375    448         /// </summary>
   376         -      private SQLiteReadArrayEventArgs arrayEventArgs;
          449  +      private SQLiteReadEventArgs extraEventArgs;
   377    450   
   378    451         /// <summary>
   379    452         /// Provides the underlying storage for the
   380    453         /// <see cref="Value" /> property.
   381    454         /// </summary>
   382    455         private SQLiteDataReaderValue value;
   383    456         #endregion
   384    457   
   385    458         /////////////////////////////////////////////////////////////////////////
   386    459   
   387    460         #region Private Constructors
   388    461         /// <summary>
   389    462         /// Constructs a new instance of this class.  Depending on the method
   390         -      /// being called, the <paramref name="arrayEventArgs" /> and/or
          463  +      /// being called, the <paramref name="extraEventArgs" /> and/or
   391    464         /// <paramref name="value" /> parameters may be null.
   392    465         /// </summary>
   393    466         /// <param name="methodName">
   394    467         /// The name of the <see cref="SQLiteDataReader" /> method that was
   395    468         /// responsible for invoking this callback.
   396    469         /// </param>
   397         -      /// <param name="arrayEventArgs">
          470  +      /// <param name="extraEventArgs">
   398    471         /// If the <see cref="SQLiteDataReader.GetBytes" /> or
   399    472         /// <see cref="SQLiteDataReader.GetChars" /> method is being called,
   400    473         /// this object will contain the array related parameters for that
   401         -      /// method.
          474  +      /// method.  If the <see cref="SQLiteDataReader.GetBlob" /> method is
          475  +      /// being called, this object will contain the blob related parameters
          476  +      /// for that method.
   402    477         /// </param>
   403    478         /// <param name="value">
   404    479         /// This may be used by the callback to set the return value for the
   405    480         /// called <see cref="SQLiteDataReader" /> method.
   406    481         /// </param>
   407    482         internal SQLiteReadValueEventArgs(
   408    483             string methodName,
   409         -          SQLiteReadArrayEventArgs arrayEventArgs,
          484  +          SQLiteReadEventArgs extraEventArgs,
   410    485             SQLiteDataReaderValue value
   411    486             )
   412    487         {
   413    488             this.methodName = methodName;
   414         -          this.arrayEventArgs = arrayEventArgs;
          489  +          this.extraEventArgs = extraEventArgs;
   415    490             this.value = value;
   416    491         }
   417    492         #endregion
   418    493   
   419    494         /////////////////////////////////////////////////////////////////////////
   420    495   
   421    496         #region Public Properties
................................................................................
   430    505   
   431    506         /////////////////////////////////////////////////////////////////////////
   432    507   
   433    508         /// <summary>
   434    509         /// If the <see cref="SQLiteDataReader.GetBytes" /> or
   435    510         /// <see cref="SQLiteDataReader.GetChars" /> method is being called,
   436    511         /// this object will contain the array related parameters for that
   437         -      /// method.
          512  +      /// method.  If the <see cref="SQLiteDataReader.GetBlob" /> method is
          513  +      /// being called, this object will contain the blob related parameters
          514  +      /// for that method.
   438    515         /// </summary>
   439         -      public SQLiteReadArrayEventArgs ArrayEventArgs
          516  +      public SQLiteReadEventArgs ExtraEventArgs
   440    517         {
   441         -          get { return arrayEventArgs; }
          518  +          get { return extraEventArgs; }
   442    519         }
   443    520   
   444    521         /////////////////////////////////////////////////////////////////////////
   445    522   
   446    523         /// <summary>
   447    524         /// This may be used by the callback to set the return value for the
   448    525         /// called <see cref="SQLiteDataReader" /> method.
................................................................................
   536    613     /// skipped.  If this is set to non-zero and the necessary return value
   537    614     /// is unavailable or unsuitable, an exception will be thrown.
   538    615     /// </param>
   539    616     public delegate void SQLiteReadValueCallback(
   540    617         SQLiteConvert convert,
   541    618         SQLiteDataReader dataReader,
   542    619         SQLiteConnectionFlags flags,
   543         -      SQLiteReadValueEventArgs eventArgs,
          620  +      SQLiteReadEventArgs eventArgs,
   544    621         string typeName,
   545    622         int index,
   546    623         object userData,
   547    624         out bool complete
   548    625     );
   549    626   
   550    627     /////////////////////////////////////////////////////////////////////////////////////////////////

Changes to System.Data.SQLite/SQLiteDataReader.cs.

   387    387       /// <returns>
   388    388       /// This function throws an InvalidTypeCast() exception if the requested type doesn't match the column's definition or affinity.
   389    389       /// </returns>
   390    390       /// <param name="i">The index of the column to type-check</param>
   391    391       /// <param name="typ">The type we want to get out of the column</param>
   392    392       private TypeAffinity VerifyType(int i, DbType typ)
   393    393       {
          394  +        if ((_flags & SQLiteConnectionFlags.NoVerifyTypeAffinity) == SQLiteConnectionFlags.NoVerifyTypeAffinity)
          395  +            return TypeAffinity.None;
          396  +
   394    397           TypeAffinity affinity = GetSQLiteType(_flags, i).Affinity;
   395    398   
   396    399           switch (affinity)
   397    400           {
   398    401               case TypeAffinity.Int64:
   399    402                   if (typ == DbType.Int64) return affinity;
   400    403                   if (typ == DbType.Int32) return affinity;
................................................................................
   443    446       /// <param name="complete">
   444    447       /// Non-zero if the default handling for the data reader call should be
   445    448       /// skipped.  If this is set to non-zero and the necessary return value
   446    449       /// is unavailable or unsuitable, an exception will be thrown.
   447    450       /// </param>
   448    451       private void InvokeReadValueCallback(
   449    452           int index,
   450         -        SQLiteReadValueEventArgs eventArgs,
          453  +        SQLiteReadEventArgs eventArgs,
   451    454           out bool complete
   452    455           )
   453    456       {
   454    457           complete = false;
   455    458           SQLiteConnectionFlags oldFlags = _flags;
   456    459           _flags &= ~SQLiteConnectionFlags.UseConnectionReadValueCallbacks;
   457    460   
................................................................................
   487    490                   index, userData, out complete); /* throw */
   488    491           }
   489    492           finally
   490    493           {
   491    494               _flags |= SQLiteConnectionFlags.UseConnectionReadValueCallbacks;
   492    495           }
   493    496       }
          497  +
          498  +    /// <summary>
          499  +    /// Attempts to query the integer identifier for the current row.  This
          500  +    /// will not work for tables that were created WITHOUT ROWID -OR- if the
          501  +    /// query does not include the "rowid" column or one of its aliases -OR-
          502  +    /// if the <see cref="SQLiteDataReader" /> was not created with the
          503  +    /// <see cref="CommandBehavior.KeyInfo"/> flag.
          504  +    /// </summary>
          505  +    /// <returns>
          506  +    /// The integer identifier for the current row -OR- null if it could not
          507  +    /// be determined.
          508  +    /// </returns>
          509  +    internal long? GetRowId(int i)
          510  +    {
          511  +        // CheckDisposed();
          512  +        VerifyForGet();
          513  +
          514  +        if (_keyInfo == null)
          515  +            return null;
          516  +
          517  +        int iRowId = _keyInfo.GetRowIdIndex(
          518  +            GetDatabaseName(i), GetTableName(i));
          519  +
          520  +        if (iRowId == -1)
          521  +            return null;
          522  +
          523  +        return GetInt64(iRowId);
          524  +    }
          525  +
          526  +    /// <summary>
          527  +    /// Retrieves the column as a <see cref="SQLiteBlob" /> object.
          528  +    /// This will not work for tables that were created WITHOUT ROWID
          529  +    /// -OR- if the query does not include the "rowid" column or one
          530  +    /// of its aliases -OR- if the <see cref="SQLiteDataReader" /> was
          531  +    /// not created with the <see cref="CommandBehavior.KeyInfo"/> flag.
          532  +    /// </summary>
          533  +    /// <param name="i">The index of the column.</param>
          534  +    /// <param name="readOnly">
          535  +    /// Non-zero to open the blob object for read-only access.
          536  +    /// </param>
          537  +    /// <returns>A new <see cref="SQLiteBlob" /> object.</returns>
          538  +    public SQLiteBlob GetBlob(int i, bool readOnly)
          539  +    {
          540  +        CheckDisposed();
          541  +        VerifyForGet();
          542  +
          543  +        if ((_flags & SQLiteConnectionFlags.UseConnectionReadValueCallbacks) == SQLiteConnectionFlags.UseConnectionReadValueCallbacks)
          544  +        {
          545  +            SQLiteDataReaderValue value = new SQLiteDataReaderValue();
          546  +            bool complete;
          547  +
          548  +            InvokeReadValueCallback(i, new SQLiteReadValueEventArgs(
          549  +                "GetBlob", new SQLiteReadBlobEventArgs(readOnly), value),
          550  +                out complete);
          551  +
          552  +            if (complete)
          553  +                return (SQLiteBlob)value.BlobValue;
          554  +        }
          555  +
          556  +        if (i >= PrivateVisibleFieldCount && _keyInfo != null)
          557  +            return _keyInfo.GetBlob(i - PrivateVisibleFieldCount, readOnly);
          558  +
          559  +        return SQLiteBlob.Create(this, i, readOnly);
          560  +    }
   494    561   
   495    562       /// <summary>
   496    563       /// Retrieves the column as a boolean value
   497    564       /// </summary>
   498    565       /// <param name="i">The index of the column.</param>
   499    566       /// <returns>bool</returns>
   500    567       public override bool GetBoolean(int i)
................................................................................
  1845   1912       /// This method attempts to query the database connection associated with
  1846   1913       /// the data reader in use.  If the underlying command or connection is
  1847   1914       /// unavailable, a null value will be returned.
  1848   1915       /// </summary>
  1849   1916       /// <returns>
  1850   1917       /// The connection object -OR- null if it is unavailable.
  1851   1918       /// </returns>
  1852         -    private static SQLiteConnection GetConnection(
         1919  +    internal static SQLiteConnection GetConnection(
  1853   1920           SQLiteDataReader dataReader
  1854   1921           )
  1855   1922       {
  1856   1923           try
  1857   1924           {
  1858   1925               if (dataReader != null)
  1859   1926               {

Changes to System.Data.SQLite/SQLiteKeyReader.cs.

     1      1   /********************************************************
     2      2    * ADO.NET 2.0 Data Provider for SQLite Version 3.X
     3      3    * Written by Robert Simpson (robert@blackcastlesoft.com)
     4         - * 
            4  + *
     5      5    * Released to the public domain, use at your own risk!
     6      6    ********************************************************/
     7      7   
     8      8   namespace System.Data.SQLite
     9      9   {
    10     10     using System;
    11     11     using System.Data;
................................................................................
    20     20     /// </remarks>
    21     21     /// </summary>
    22     22     internal sealed class SQLiteKeyReader : IDisposable
    23     23     {
    24     24       private KeyInfo[] _keyInfo;
    25     25       private SQLiteStatement _stmt;
    26     26       private bool _isValid;
           27  +    private RowIdInfo[] _rowIdInfo;
    27     28   
    28     29       /// <summary>
    29     30       /// Used to support CommandBehavior.KeyInfo
    30     31       /// </summary>
    31     32       private struct KeyInfo
    32     33       {
    33     34         internal string databaseName;
................................................................................
    35     36         internal string columnName;
    36     37         internal int database;
    37     38         internal int rootPage;
    38     39         internal int cursor;
    39     40         internal KeyQuery query;
    40     41         internal int column;
    41     42       }
           43  +
           44  +    /// <summary>
           45  +    /// Used to keep track of the per-table RowId column metadata.
           46  +    /// </summary>
           47  +    private struct RowIdInfo
           48  +    {
           49  +        internal string databaseName;
           50  +        internal string tableName;
           51  +        internal int column;
           52  +    }
    42     53   
    43     54       /// <summary>
    44     55       /// A single sub-query for a given table/database.
    45     56       /// </summary>
    46     57       private sealed class KeyQuery : IDisposable
    47     58       {
    48     59           private SQLiteCommand _command;
................................................................................
   151    162       /// <param name="stmt"></param>
   152    163       internal SQLiteKeyReader(SQLiteConnection cnn, SQLiteDataReader reader, SQLiteStatement stmt)
   153    164       {
   154    165         Dictionary<string, int> catalogs = new Dictionary<string, int>();
   155    166         Dictionary<string, List<string>> tables = new Dictionary<string, List<string>>();
   156    167         List<string> list;
   157    168         List<KeyInfo> keys = new List<KeyInfo>();
          169  +      List<RowIdInfo> rowIds = new List<RowIdInfo>();
   158    170   
   159    171         // Record the statement so we can use it later for sync'ing
   160    172         _stmt = stmt;
   161    173   
   162    174         // Fetch all the attached databases on this connection
   163    175         using (DataTable tbl = cnn.GetSchema("Catalogs"))
   164    176         {
................................................................................
   199    211           {
   200    212             for (int i = 0; i < pair.Value.Count; i++)
   201    213             {
   202    214               string table = pair.Value[i];
   203    215               DataRow preferredRow = null;
   204    216               using (DataTable tbl = cnn.GetSchema("Indexes", new string[] { pair.Key, null, table }))
   205    217               {
   206         -              // Loop twice.  The first time looking for a primary key index, 
          218  +              // Loop twice.  The first time looking for a primary key index,
   207    219                 // the second time looking for a unique index
   208    220                 for (int n = 0; n < 2 && preferredRow == null; n++)
   209    221                 {
   210    222                   foreach (DataRow row in tbl.Rows)
   211    223                   {
   212    224                     if (n == 0 && (bool)row["PRIMARY_KEY"] == true)
   213    225                     {
................................................................................
   234    246                     int database = catalogs[pair.Key];
   235    247                     int rootPage = Convert.ToInt32(tblTables.Rows[0]["TABLE_ROOTPAGE"], CultureInfo.InvariantCulture);
   236    248                     int cursor = stmt._sql.GetCursorForTable(stmt, database, rootPage);
   237    249   
   238    250                     // Now enumerate the members of the index we're going to use
   239    251                     using (DataTable indexColumns = cnn.GetSchema("IndexColumns", new string[] { pair.Key, null, table, (string)preferredRow["INDEX_NAME"] }))
   240    252                     {
          253  +                    //
          254  +                    // NOTE: If this is actually a RowId (or alias), record that now.  There should
          255  +                    //       be exactly one index column in that case.
          256  +                    //
          257  +                    bool isRowId = (string)preferredRow["INDEX_NAME"] == "sqlite_master_PK_" + table;
   241    258                       KeyQuery query = null;
   242    259   
   243    260                       List<string> cols = new List<string>();
   244    261                       for (int x = 0; x < indexColumns.Rows.Count; x++)
   245    262                       {
   246    263                         string columnName = SQLiteConvert.GetStringOrNull(
   247    264                             indexColumns.Rows[x]["COLUMN_NAME"]);
................................................................................
   253    270                           if (row.IsNull(SchemaTableColumn.BaseColumnName))
   254    271                             continue;
   255    272   
   256    273                           if ((string)row[SchemaTableColumn.BaseColumnName] == columnName &&
   257    274                               (string)row[SchemaTableColumn.BaseTableName] == table &&
   258    275                               (string)row[SchemaTableOptionalColumn.BaseCatalogName] == pair.Key)
   259    276                           {
          277  +                          if (isRowId)
          278  +                          {
          279  +                            RowIdInfo rowId = new RowIdInfo();
          280  +
          281  +                            rowId.databaseName = pair.Key;
          282  +                            rowId.tableName = table;
          283  +                            rowId.column = (int)row[SchemaTableColumn.ColumnOrdinal];
          284  +
          285  +                            rowIds.Add(rowId);
          286  +                          }
   260    287                             indexColumns.Rows.RemoveAt(x);
   261    288                             x--;
   262    289                             addKey = false;
   263    290                             break;
   264    291                           }
   265    292                         }
   266    293                         if (addKey == true)
   267    294                           cols.Add(columnName);
   268    295                       }
   269    296   
   270    297                       // If the index is not a rowid alias, record all the columns
   271    298                       // needed to make up the unique index and construct a SQL query for it
   272         -                    if ((string)preferredRow["INDEX_NAME"] != "sqlite_master_PK_" + table)
          299  +                    if (!isRowId)
   273    300                       {
   274    301                         // Whatever remains of the columns we need that make up the index that are not
   275    302                         // already in the query need to be queried separately, so construct a subquery
   276    303                         if (cols.Count > 0)
   277    304                         {
   278    305                           string[] querycols = new string[cols.Count];
   279    306                           cols.CopyTo(querycols);
................................................................................
   306    333           }
   307    334         }
   308    335   
   309    336         // Now we have all the additional columns we have to return in order to support
   310    337         // CommandBehavior.KeyInfo
   311    338         _keyInfo = new KeyInfo[keys.Count];
   312    339         keys.CopyTo(_keyInfo);
          340  +
          341  +      _rowIdInfo = new RowIdInfo[rowIds.Count];
          342  +      rowIds.CopyTo(_rowIdInfo);
          343  +    }
          344  +
          345  +    ///////////////////////////////////////////////////////////////////////////////////////////////
          346  +
          347  +    internal int GetRowIdIndex(
          348  +        string databaseName,
          349  +        string tableName
          350  +        )
          351  +    {
          352  +        if ((_rowIdInfo != null) &&
          353  +            (databaseName != null) &&
          354  +            (tableName != null))
          355  +        {
          356  +            for (int i = 0; i < _rowIdInfo.Length; i++)
          357  +            {
          358  +                if (_rowIdInfo[i].databaseName == databaseName &&
          359  +                    _rowIdInfo[i].tableName == tableName)
          360  +                {
          361  +                    return _rowIdInfo[i].column;
          362  +                }
          363  +            }
          364  +        }
          365  +
          366  +        return -1;
   313    367       }
   314    368   
   315    369       ///////////////////////////////////////////////////////////////////////////////////////////////
   316    370   
   317    371       #region IDisposable Members
   318    372       public void Dispose()
   319    373       {
................................................................................
   458    512       {
   459    513         for (int n = 0; n < _keyInfo.Length; n++)
   460    514         {
   461    515           if (String.Compare(name, _keyInfo[n].columnName, StringComparison.OrdinalIgnoreCase) == 0) return n;
   462    516         }
   463    517         return -1;
   464    518       }
          519  +
          520  +    internal SQLiteBlob GetBlob(int i, bool readOnly)
          521  +    {
          522  +      Sync(i);
          523  +      if (_keyInfo[i].query != null) return _keyInfo[i].query._reader.GetBlob(_keyInfo[i].column, readOnly);
          524  +      else throw new InvalidCastException();
          525  +    }
   465    526   
   466    527       internal bool GetBoolean(int i)
   467    528       {
   468    529         Sync(i);
   469    530         if (_keyInfo[i].query != null) return _keyInfo[i].query._reader.GetBoolean(_keyInfo[i].column);
   470    531         else throw new InvalidCastException();
   471    532       }
................................................................................
   561    622       {
   562    623         Sync(i);
   563    624         if (_keyInfo[i].query != null) return _keyInfo[i].query._reader.GetInt64(_keyInfo[i].column);
   564    625         else
   565    626         {
   566    627           long rowid = _stmt._sql.GetRowIdForCursor(_stmt, _keyInfo[i].cursor);
   567    628           if (rowid == 0) throw new InvalidCastException();
   568         -        return Convert.ToInt64(rowid);
          629  +        return rowid;
   569    630         }
   570    631       }
   571    632   
   572    633       internal string GetString(int i)
   573    634       {
   574    635         Sync(i);
   575    636         if (_keyInfo[i].query != null) return _keyInfo[i].query._reader.GetString(_keyInfo[i].column);

Changes to System.Data.SQLite/Targets/System.Data.SQLite.Files.targets.

    17     17       <Compile Include="AssemblyInfo.cs" />
    18     18       <Compile Include="AssemblySourceIdAttribute.cs" />
    19     19       <Compile Include="AssemblySourceTimeStampAttribute.cs" />
    20     20       <Compile Include="SQLite3.cs" />
    21     21       <Compile Include="SQLite3_UTF16.cs" />
    22     22       <Compile Include="SQLiteBackup.cs" />
    23     23       <Compile Include="SQLiteBase.cs" />
           24  +    <Compile Include="SQLiteBlob.cs" />
    24     25       <Compile Include="SQLiteCommand.cs">
    25     26         <SubType>Component</SubType>
    26     27       </Compile>
    27     28       <Compile Include="SQLiteCommandBuilder.cs">
    28     29         <SubType>Component</SubType>
    29     30       </Compile>
    30     31       <Compile Include="SQLiteConnection.cs">

Changes to System.Data.SQLite/UnsafeNativeMethods.cs.

    53     53         //       associated constructors and are decremented upon the
    54     54         //       successful completion of the associated ReleaseHandle
    55     55         //       methods.
    56     56         //
    57     57         internal static int connectionCount;
    58     58         internal static int statementCount;
    59     59         internal static int backupCount;
           60  +      internal static int blobCount;
    60     61   #endif
    61     62         #endregion
    62     63   
    63     64         /////////////////////////////////////////////////////////////////////////
    64     65   
    65     66         #region Settings Read Counts (Debug Build Only)
    66     67   #if DEBUG
................................................................................
  1677   1678       //
  1678   1679       // NOTE: On the .NET Compact Framework, the native interop assembly must
  1679   1680       //       be used because it provides several workarounds to .NET Compact
  1680   1681       //       Framework limitations important for proper operation of the core
  1681   1682       //       System.Data.SQLite functionality (e.g. being able to bind
  1682   1683       //       parameters and handle column values of types Int64 and Double).
  1683   1684       //
  1684         -    internal const string SQLITE_DLL = "SQLite.Interop.102.dll";
         1685  +    internal const string SQLITE_DLL = "SQLite.Interop.103.dll";
  1685   1686   #elif SQLITE_STANDARD
  1686   1687       //
  1687   1688       // NOTE: Otherwise, if the standard SQLite library is enabled, use it.
  1688   1689       //
  1689   1690       internal const string SQLITE_DLL = "sqlite3";
  1690   1691   #elif USE_INTEROP_DLL
  1691   1692       //
................................................................................
  1799   1800   
  1800   1801       [DllImport(SQLITE_DLL)]
  1801   1802       internal static extern SQLiteErrorCode sqlite3_finalize_interop(IntPtr stmt);
  1802   1803   
  1803   1804       [DllImport(SQLITE_DLL)]
  1804   1805       internal static extern SQLiteErrorCode sqlite3_backup_finish_interop(IntPtr backup);
  1805   1806   
         1807  +    [DllImport(SQLITE_DLL)]
         1808  +    internal static extern SQLiteErrorCode sqlite3_blob_close_interop(IntPtr blob);
         1809  +
  1806   1810       [DllImport(SQLITE_DLL)]
  1807   1811       internal static extern SQLiteErrorCode sqlite3_open_interop(byte[] utf8Filename, byte[] vfsName, SQLiteOpenFlagsEnum flags, int extFuncs, ref IntPtr db);
  1808   1812   
  1809   1813       [DllImport(SQLITE_DLL)]
  1810   1814       internal static extern SQLiteErrorCode sqlite3_open16_interop(byte[] utf8Filename, byte[] vfsName, SQLiteOpenFlagsEnum flags, int extFuncs, ref IntPtr db);
  1811   1815   
  1812   1816       [DllImport(SQLITE_DLL)]
................................................................................
  2773   2777   #if !PLATFORM_COMPACTFRAMEWORK
  2774   2778       [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
  2775   2779   #else
  2776   2780       [DllImport(SQLITE_DLL)]
  2777   2781   #endif
  2778   2782       internal static extern int sqlite3_backup_pagecount(IntPtr backup);
  2779   2783   
         2784  +#if !PLATFORM_COMPACTFRAMEWORK
         2785  +    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
         2786  +#else
         2787  +    [DllImport(SQLITE_DLL)]
         2788  +#endif
         2789  +    internal static extern SQLiteErrorCode sqlite3_blob_close(IntPtr blob);
         2790  +
         2791  +#if !PLATFORM_COMPACTFRAMEWORK
         2792  +    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
         2793  +#else
         2794  +    [DllImport(SQLITE_DLL)]
         2795  +#endif
         2796  +    internal static extern int sqlite3_blob_bytes(IntPtr blob);
         2797  +
         2798  +#if !PLATFORM_COMPACTFRAMEWORK
         2799  +    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
         2800  +#else
         2801  +    [DllImport(SQLITE_DLL)]
         2802  +#endif
         2803  +    internal static extern SQLiteErrorCode sqlite3_blob_open(IntPtr db, byte[] dbName, byte[] tblName, byte[] colName, long rowId, int flags, ref IntPtr ptrBlob);
         2804  +
         2805  +#if !PLATFORM_COMPACTFRAMEWORK
         2806  +    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
         2807  +#else
         2808  +    [DllImport(SQLITE_DLL)]
         2809  +#endif
         2810  +    internal static extern SQLiteErrorCode sqlite3_blob_read(IntPtr blob, [MarshalAs(UnmanagedType.LPArray)] byte[] buffer, int count, int offset);
         2811  +
         2812  +#if !PLATFORM_COMPACTFRAMEWORK
         2813  +    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
         2814  +#else
         2815  +    [DllImport(SQLITE_DLL)]
         2816  +#endif
         2817  +    internal static extern SQLiteErrorCode sqlite3_blob_reopen(IntPtr blob, long rowId);
         2818  +
         2819  +#if !PLATFORM_COMPACTFRAMEWORK
         2820  +    [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
         2821  +#else
         2822  +    [DllImport(SQLITE_DLL)]
         2823  +#endif
         2824  +    internal static extern SQLiteErrorCode sqlite3_blob_write(IntPtr blob, [MarshalAs(UnmanagedType.LPArray)] byte[] buffer, int count, int offset);
         2825  +
  2780   2826   #if !PLATFORM_COMPACTFRAMEWORK
  2781   2827       [DllImport(SQLITE_DLL, CallingConvention = CallingConvention.Cdecl)]
  2782   2828   #else
  2783   2829       [DllImport(SQLITE_DLL)]
  2784   2830   #endif
  2785   2831       internal static extern SQLiteErrorCode sqlite3_declare_vtab(IntPtr db, IntPtr zSQL);
  2786   2832   
................................................................................
  3844   3890   
  3845   3891   #if COUNT_HANDLE
  3846   3892           public int WasReleasedOk()
  3847   3893           {
  3848   3894               return Interlocked.Decrement(ref DebugData.backupCount);
  3849   3895           }
  3850   3896   #endif
         3897  +
         3898  +        ///////////////////////////////////////////////////////////////////////
         3899  +
         3900  +        public override bool IsInvalid
         3901  +        {
         3902  +            get
         3903  +            {
         3904  +#if PLATFORM_COMPACTFRAMEWORK
         3905  +                lock (syncRoot)
         3906  +#endif
         3907  +                {
         3908  +                    return (handle == IntPtr.Zero);
         3909  +                }
         3910  +            }
         3911  +        }
         3912  +
         3913  +        ///////////////////////////////////////////////////////////////////////
         3914  +
         3915  +#if DEBUG
         3916  +        public override string ToString()
         3917  +        {
         3918  +#if PLATFORM_COMPACTFRAMEWORK
         3919  +            lock (syncRoot)
         3920  +#endif
         3921  +            {
         3922  +                return handle.ToString();
         3923  +            }
         3924  +        }
         3925  +#endif
         3926  +    }
         3927  +    #endregion
         3928  +
         3929  +    ///////////////////////////////////////////////////////////////////////////
         3930  +
         3931  +    #region SQLiteBlobHandle Class
         3932  +    // Provides finalization support for unmanaged SQLite blob objects.
         3933  +    internal sealed class SQLiteBlobHandle : CriticalHandle
         3934  +    {
         3935  +#if PLATFORM_COMPACTFRAMEWORK
         3936  +        internal readonly object syncRoot = new object();
         3937  +#endif
         3938  +
         3939  +        ///////////////////////////////////////////////////////////////////////
         3940  +
         3941  +        private SQLiteConnectionHandle cnn;
         3942  +
         3943  +        ///////////////////////////////////////////////////////////////////////
         3944  +
         3945  +        public static implicit operator IntPtr(SQLiteBlobHandle blob)
         3946  +        {
         3947  +            if (blob != null)
         3948  +            {
         3949  +#if PLATFORM_COMPACTFRAMEWORK
         3950  +                lock (blob.syncRoot)
         3951  +#endif
         3952  +                {
         3953  +                    return blob.handle;
         3954  +                }
         3955  +            }
         3956  +            return IntPtr.Zero;
         3957  +        }
         3958  +
         3959  +        ///////////////////////////////////////////////////////////////////////
         3960  +
         3961  +        internal SQLiteBlobHandle(SQLiteConnectionHandle cnn, IntPtr blob)
         3962  +            : this()
         3963  +        {
         3964  +#if PLATFORM_COMPACTFRAMEWORK
         3965  +            lock (syncRoot)
         3966  +#endif
         3967  +            {
         3968  +                this.cnn = cnn;
         3969  +                SetHandle(blob);
         3970  +            }
         3971  +        }
         3972  +
         3973  +        ///////////////////////////////////////////////////////////////////////
         3974  +
         3975  +        private SQLiteBlobHandle()
         3976  +            : base(IntPtr.Zero)
         3977  +        {
         3978  +#if COUNT_HANDLE
         3979  +            Interlocked.Increment(ref DebugData.blobCount);
         3980  +#endif
         3981  +        }
         3982  +
         3983  +        ///////////////////////////////////////////////////////////////////////
         3984  +
         3985  +        protected override bool ReleaseHandle()
         3986  +        {
         3987  +            try
         3988  +            {
         3989  +#if !PLATFORM_COMPACTFRAMEWORK
         3990  +                IntPtr localHandle = Interlocked.Exchange(
         3991  +                    ref handle, IntPtr.Zero);
         3992  +
         3993  +                if (localHandle != IntPtr.Zero)
         3994  +                    SQLiteBase.CloseBlob(cnn, localHandle);
         3995  +
         3996  +#if !NET_COMPACT_20 && TRACE_HANDLE
         3997  +                try
         3998  +                {
         3999  +                    Trace.WriteLine(HelperMethods.StringFormat(
         4000  +                        CultureInfo.CurrentCulture,
         4001  +                        "CloseBlob: {0}", localHandle)); /* throw */
         4002  +                }
         4003  +                catch
         4004  +                {
         4005  +                }
         4006  +#endif
         4007  +#else
         4008  +                lock (syncRoot)
         4009  +                {
         4010  +                    if (handle != IntPtr.Zero)
         4011  +                    {
         4012  +                        SQLiteBase.CloseBlob(cnn, handle);
         4013  +                        SetHandle(IntPtr.Zero);
         4014  +                    }
         4015  +                }
         4016  +#endif
         4017  +#if COUNT_HANDLE
         4018  +                Interlocked.Decrement(ref DebugData.blobCount);
         4019  +#endif
         4020  +#if DEBUG
         4021  +                return true;
         4022  +#endif
         4023  +            }
         4024  +#if !NET_COMPACT_20 && TRACE_HANDLE
         4025  +            catch (SQLiteException e)
         4026  +#else
         4027  +            catch (SQLiteException)
         4028  +#endif
         4029  +            {
         4030  +#if !NET_COMPACT_20 && TRACE_HANDLE
         4031  +                try
         4032  +                {
         4033  +                    Trace.WriteLine(HelperMethods.StringFormat(
         4034  +                        CultureInfo.CurrentCulture,
         4035  +                        "CloseBlob: {0}, exception: {1}",
         4036  +                        handle, e)); /* throw */
         4037  +                }
         4038  +                catch
         4039  +                {
         4040  +                }
         4041  +#endif
         4042  +            }
         4043  +            finally
         4044  +            {
         4045  +#if PLATFORM_COMPACTFRAMEWORK
         4046  +                lock (syncRoot)
         4047  +#endif
         4048  +                {
         4049  +                    SetHandleAsInvalid();
         4050  +                }
         4051  +            }
         4052  +#if DEBUG
         4053  +            return false;
         4054  +#else
         4055  +            return true;
         4056  +#endif
         4057  +        }
         4058  +
         4059  +        ///////////////////////////////////////////////////////////////////////
         4060  +
         4061  +#if COUNT_HANDLE
         4062  +        public int WasReleasedOk()
         4063  +        {
         4064  +            return Interlocked.Decrement(ref DebugData.blobCount);
         4065  +        }
         4066  +#endif
  3851   4067   
  3852   4068           ///////////////////////////////////////////////////////////////////////
  3853   4069   
  3854   4070           public override bool IsInvalid
  3855   4071           {
  3856   4072               get
  3857   4073               {

Changes to Tests/basic.eagle.

  4423   4423   } -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\
  4424   4424   System.Data.SQLite compileCSharp} -match regexp -result {^Ok\
  4425   4425   System#CodeDom#Compiler#CompilerResults#\d+ \{\} 1 \{SQL logic error or missing\
  4426   4426   database -- no such function: REGEXP\} 1 \{SQL logic error or missing database\
  4427   4427   -- no such function: REGEXP\} 0 \{\} 0 1 0 0 0 True 1 \{SQL logic error or\
  4428   4428   missing database -- no such function: REGEXP\} 1 \{SQL logic error or missing\
  4429   4429   database -- no such function: REGEXP\} 0 \{\}$}}
         4430  +
         4431  +###############################################################################
         4432  +
         4433  +runTest {test data-1.84 {GetBlob method and SQLiteBlob class} -setup {
         4434  +  proc getBytesAsList { bytes } {
         4435  +    set byteList [object create -alias ByteList $bytes]
         4436  +    return [$byteList ToString]
         4437  +  }
         4438  +
         4439  +  setupDb [set fileName data-1.84.db] "" "" "" NoVerifyTypeAffinity
         4440  +} -body {
         4441  +  sql execute $db {
         4442  +    CREATE TABLE t1(x INTEGER PRIMARY KEY, y);
         4443  +    INSERT INTO t1 (x, y) VALUES(1, 'nope');
         4444  +    INSERT INTO t1 (x, y) VALUES(2, '1984');
         4445  +  }
         4446  +
         4447  +  set dataReader [sql execute -execute reader -format datareader \
         4448  +      -behavior +KeyInfo -alias $db "SELECT x, y FROM t1;"]
         4449  +
         4450  +  set size 4
         4451  +  set bytes(1) [object create -alias Byte\[\] $size]
         4452  +  set bytes(2) [object create -alias Byte\[\] $size]
         4453  +  set result [list]
         4454  +
         4455  +  while {[$dataReader Read]} {
         4456  +    set blob [$dataReader -alias GetBlob 1 false]
         4457  +    lappend result [$blob GetCount]
         4458  +    $blob Read $bytes(1) $size 0
         4459  +    lappend result [getBytesAsList $bytes(1)]
         4460  +
         4461  +    for {set i 0} {$i < $size} {incr i} {
         4462  +      set byte [$bytes(1) GetValue $i]
         4463  +      incr byte; set byte [object invoke -create Byte Parse $byte]
         4464  +      $bytes(1) SetValue $byte $i
         4465  +    }
         4466  +
         4467  +    $blob Write $bytes(1) $size 0
         4468  +
         4469  +    if {[$dataReader GetInt64 0] == 1} then {
         4470  +      $blob Reopen 2
         4471  +      $blob Read $bytes(2) $size 0
         4472  +      lappend result [getBytesAsList $bytes(2)]
         4473  +    }
         4474  +
         4475  +    $blob Close
         4476  +  }
         4477  +
         4478  +  $dataReader Close; unset dataReader
         4479  +
         4480  +  set dataReader [sql execute -execute reader -format datareader \
         4481  +      -alias $db "SELECT x, y FROM t1;"]
         4482  +
         4483  +  while {[$dataReader Read]} {
         4484  +    lappend result [$dataReader GetInt64 0]
         4485  +    lappend result [$dataReader GetString 0]
         4486  +    lappend result [$dataReader GetInt64 1]
         4487  +    lappend result [$dataReader GetString 1]
         4488  +  }
         4489  +
         4490  +  set result
         4491  +} -cleanup {
         4492  +  unset -nocomplain blob
         4493  +  unset -nocomplain dataReader
         4494  +
         4495  +  cleanupDb $fileName
         4496  +
         4497  +  unset -nocomplain byte i bytes size result db fileName
         4498  +
         4499  +  rename getBytesAsList ""
         4500  +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\
         4501  +System.Data.SQLite} -result {4 {110 111 112 101} {49 57 56 52} 4 {49 57 56 52}\
         4502  +1 1 0 opqf 2 2 2 2:95}}
  4430   4503   
  4431   4504   ###############################################################################
  4432   4505   
  4433   4506   reportSQLiteResources $test_channel
  4434   4507   
  4435   4508   ###############################################################################
  4436   4509   
  4437   4510   runSQLiteTestFilesEpilogue
  4438   4511   runSQLiteTestEpilogue
  4439   4512   runTestEpilogue

Changes to Tests/types.eagle.

   108    108   ###############################################################################
   109    109   
   110    110   set readArgs [list \
   111    111       convert dataReader flags eventArgs typeName index userData \
   112    112       completeVarName]
   113    113   
   114    114   set params [list \
   115         -    [list Boolean    GetBoolean    false   BooleanValue    true    0] \
   116         -    [list Byte       GetByte       false   ByteValue       true    0] \
   117         -    [list Byte       GetBytes      true    BytesValue      false   0] \
   118         -    [list Char       GetChar       false   CharValue       true    0] \
   119         -    [list Char       GetChars      true    CharsValue      false   0] \
   120         -    [list DateTime   GetDateTime   false   DateTimeValue   true    0] \
   121         -    [list Decimal    GetDecimal    false   DecimalValue    true    0] \
   122         -    [list Double     GetDouble     false   DoubleValue     true    0] \
   123         -    [list Single     GetFloat      false   FloatValue      true    0] \
   124         -    [list Guid       GetGuid       false   GuidValue       true    \
          115  +    [list Boolean         GetBoolean    false   BooleanValue    true    0] \
          116  +    [list Byte            GetByte       false   ByteValue       true    0] \
          117  +    [list Byte            GetBytes      true    BytesValue      false   0] \
          118  +    [list Char            GetChar       false   CharValue       true    0] \
          119  +    [list Char            GetChars      true    CharsValue      false   0] \
          120  +    [list DateTime        GetDateTime   false   DateTimeValue   true    0] \
          121  +    [list Decimal         GetDecimal    false   DecimalValue    true    0] \
          122  +    [list Double          GetDouble     false   DoubleValue     true    0] \
          123  +    [list Single          GetFloat      false   FloatValue      true    0] \
          124  +    [list Guid            GetGuid       false   GuidValue       true    \
   125    125           00000000-0000-0000-0000-000000000000] \
   126         -    [list Int16      GetInt16      false   Int16Value      true    0] \
   127         -    [list Int32      GetInt32      false   Int32Value      true    0] \
   128         -    [list Int64      GetInt64      false   Int64Value      true    0] \
   129         -    [list String     GetString     false   StringValue     false   null] \
   130         -    [list Object     GetValue      false   Value           false   null]]
          126  +    [list Int16           GetInt16      false   Int16Value      true    0] \
          127  +    [list Int32           GetInt32      false   Int32Value      true    0] \
          128  +    [list Int64           GetInt64      false   Int64Value      true    0] \
          129  +    [list String          GetString     false   StringValue     false   null] \
          130  +    [list Object          GetValue      false   Value           false   null] \
          131  +    [list SDS.SQLiteBlob  GetBlob       false   BlobValue       false   0]]
   131    132   
   132    133   ###############################################################################
   133    134   
   134    135   set expectedResults [list \
   135    136       {False False True False False False False False} \
   136    137       {0 0 1 0 0 0 0 0} \
   137    138       {0 1 48 1 49 3 {49 46 50} 5 {116 104 114\
................................................................................
   163    164       {0 0 1 0 0 0 0 0} \
   164    165       {0 0 1 0 0 0 0 0} \
   165    166       "<NUL> <NUL> <NUL> <NUL> three \x04\x05\x06\
   166    167           {2016-06-19 19:50:04.1234567}\
   167    168           74f1f402-ddef-4027-a78f-3847fa97b830" \
   168    169       {{} 0 1 1.2 three {4 5 6} {2016-06-19\
   169    170           19:50:04.1234567}\
   170         -        74f1f402-ddef-4027-a78f-3847fa97b830}]
          171  +        74f1f402-ddef-4027-a78f-3847fa97b830} \
          172  +    {System.Data.SQLite.SQLiteBlob System.Data.SQLite.SQLiteBlob\
          173  +        System.Data.SQLite.SQLiteBlob System.Data.SQLite.SQLiteBlob\
          174  +        System.Data.SQLite.SQLiteBlob System.Data.SQLite.SQLiteBlob\
          175  +        System.Data.SQLite.SQLiteBlob System.Data.SQLite.SQLiteBlob}]
   171    176   
   172    177   ###############################################################################
   173    178   
   174    179   set savedDateTimeFormat [object invoke Interpreter.GetActive DateTimeFormat]
   175    180   if {![isObjectHandle $savedDateTimeFormat]} then {set savedDateTimeFormat null}
   176    181   object invoke Interpreter.GetActive DateTimeFormat [getDateTimeFormat]
   177    182   
................................................................................
   178    183   ###############################################################################
   179    184   
   180    185   for {set i 0} {$i < [llength $params]} {incr i} {
   181    186     foreach {
   182    187       typeName methodName isArray propertyName isRequired value
   183    188     } [lindex $params $i] break
   184    189   
          190  +  set typeName [string map [list SDS. System.Data.SQLite.] $typeName]
   185    191     set expectedResult [lindex $expectedResults $i]
   186    192   
   187    193     #############################################################################
   188    194   
   189    195     proc readValueCallback2 $readArgs [subst {
   190    196       if {$isArray} then {
   191    197         if {\[catch {
   192         -        set dataOffset \[\$eventArgs ArrayEventArgs.DataOffset\]
          198  +        set dataOffset \[\$eventArgs ExtraEventArgs.DataOffset\]
   193    199   
   194         -        set buffer \[\$eventArgs -create [appendArgs ArrayEventArgs. \
          200  +        set buffer \[\$eventArgs -create [appendArgs ExtraEventArgs. \
   195    201               $typeName Buffer]\]
   196    202   
   197         -        set bufferOffset \[\$eventArgs ArrayEventArgs.BufferOffset\]
   198         -        set length \[\$eventArgs ArrayEventArgs.Length\]
          203  +        set bufferOffset \[\$eventArgs ExtraEventArgs.BufferOffset\]
          204  +        set length \[\$eventArgs ExtraEventArgs.Length\]
   199    205   
   200    206           set readValue \[\$dataReader \[\$eventArgs MethodName\] \
   201    207               \$index \$dataOffset \$buffer \$bufferOffset \$length\]
   202    208   
   203    209           \$eventArgs \[appendArgs Value. $propertyName\] \$readValue
   204    210         } error\]} then {
   205    211           set readValue \[\$dataReader -tostring GetValue \$index\]
................................................................................
   209    215             set buffer \[\$string -create -alias ToCharArray]
   210    216           } else {
   211    217             set buffer \[object invoke -create -alias \
   212    218                 System.Text.Encoding.UTF8 GetBytes \$readValue\]
   213    219           }
   214    220   
   215    221           \$eventArgs \[appendArgs Value. $propertyName\] \$buffer
   216         -        \$eventArgs ArrayEventArgs.Length \[\$buffer Length\]
          222  +        \$eventArgs ExtraEventArgs.Length \[\$buffer Length\]
   217    223         } else {
   218         -        set buffer \[\$eventArgs -create [appendArgs ArrayEventArgs. \
          224  +        set buffer \[\$eventArgs -create [appendArgs ExtraEventArgs. \
   219    225               $typeName Buffer]\]
   220    226   
   221    227           \$eventArgs \[appendArgs Value. $propertyName\] \$buffer
   222    228         }
   223    229       } else {
   224    230         if {\[catch {
   225         -        set readValue \[\$dataReader \[\$eventArgs MethodName\] \$index\]
          231  +        if {"$typeName" eq "System.Data.SQLite.SQLiteBlob"} then {
          232  +          set readValue \[object create -flags +NonPublic $typeName \
          233  +              null null\]
          234  +        } else {
          235  +          set readValue \[\$dataReader \[\$eventArgs MethodName\] \$index\]
   226    236   
   227         -        if {"$typeName" eq "Char"} then {
   228         -          set readValue \[object invoke -create Char Parse \$readValue\]
          237  +          if {"$typeName" eq "Char"} then {
          238  +            set readValue \[object invoke -create Char Parse \$readValue\]
          239  +          }
   229    240           }
   230    241   
   231    242           \$eventArgs \[appendArgs Value. $propertyName\] \$readValue
   232    243         } error\]} then {
   233    244           \$eventArgs \[appendArgs Value. $propertyName\] {$value}
   234    245         }
   235    246       }
................................................................................
   292    303                   $list 0 [expr {$value - 1}] false]
   293    304             }
   294    305           } else {
   295    306             lappend result [list error(array) $::errorCode]
   296    307           }
   297    308         } else {
   298    309           if {[catch {
   299         -          $dataReader $methodName 0
          310  +          if {$typeName eq "System.Data.SQLite.SQLiteBlob"} then {
          311  +            $dataReader $methodName 0 true; # read-only
          312  +          } else {
          313  +            $dataReader $methodName 0
          314  +          }
   300    315           } value] == 0} then {
   301    316             if {$value eq "\x00"} then {
   302    317               lappend result <NUL>
   303    318             } else {
   304    319               lappend result [getStringFromObjectHandle $value]
   305    320             }
   306    321           } else {

Changes to Tests/version.eagle.

    27     27   # NOTE: For these unit tests to be useful and accurate, the following version
    28     28   #       numbers must be manually kept synchronized with the version numbers for
    29     29   #       the source code files, the built binaries, and the release packages.
    30     30   #       The revision number is reserved for NuGet package versioning.
    31     31   #
    32     32   set version(major)             1
    33     33   set version(minor)             0
    34         -set version(build)           102; # NOTE: Incremented with each release.
           34  +set version(build)           103; # NOTE: Incremented with each release.
    35     35   set version(revision)          0
    36     36   
    37     37   ###############################################################################
    38     38   
    39     39   #
    40     40   # NOTE: What is the full version of the EntityFramework NuGet package (which
    41     41   #       is not [necessarily] the same version as the assembly itself) in use

Changes to lib/System.Data.SQLite/common.eagle.

  3164   3164         set result [list]
  3165   3165   
  3166   3166         if {[haveSQLiteObjectCommand] && \
  3167   3167             [haveSQLiteDefineConstant COUNT_HANDLE]} then {
  3168   3168           #
  3169   3169           # NOTE: Add each critical handle count to the resulting list.
  3170   3170           #
  3171         -        foreach name [list connectionCount statementCount backupCount] {
         3171  +        foreach name [list \
         3172  +            connectionCount statementCount backupCount blobCount] {
  3172   3173             if {[catch {
  3173   3174               object invoke -flags +NonPublic \
  3174   3175                   System.Data.SQLite.DebugData $name
  3175   3176             } value] == 0} then {
  3176   3177               if {!$quiet} then {
  3177   3178                 tputs $channel [appendArgs \
  3178   3179                     "---- critical handle count \"" $name "\" is " $value \n]

Changes to readme.htm.

     1      1   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     2      2   <html>
     3      3   <head>
     4      4   <title></title>
     5      5   </head>
     6      6   <body>
     7      7   ADO.NET SQLite Data Provider<br />
     8         -Version 1.0.102.0 - June 23, 2016<br />
            8  +Version 1.0.103.0 - August XX, 2016 <font color="red">(release scheduled)</font><br />
     9      9   Using <a href="https://www.sqlite.org/releaselog/3_13_0.html">SQLite 3.13.0</a><br />
    10     10   Originally written by Robert Simpson<br />
    11     11   Released to the public domain, use at your own risk!<br />
    12     12   Official provider website:&nbsp;<a href="https://system.data.sqlite.org/">https://system.data.sqlite.org/</a><br />
    13     13   Legacy versions:&nbsp;<a href="http://sqlite.phxsoftware.com/">http://sqlite.phxsoftware.com/</a><br />
    14     14   <br />
    15     15   The current development version can be downloaded from <a href="https://system.data.sqlite.org/index.html/timeline?y=ci">
................................................................................
   142    142   app.config file:<br />
   143    143   <pre>
   144    144   &lt;configuration&gt;
   145    145       &lt;system.data&gt;
   146    146           &lt;DbProviderFactories&gt;
   147    147               &lt;remove invariant="System.Data.SQLite" /&gt;
   148    148               &lt;add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite"
   149         -                 type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /&gt;
          149  +                 type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /&gt;
   150    150           &lt;/DbProviderFactories&gt;
   151    151       &lt;/system.data&gt;
   152    152   &lt;/configuration&gt;
   153    153   </pre>
   154    154   <p>
   155    155   See the help documentation for further details on implementing both version-specific
   156    156   (GAC enabled) and version independent DBProviderFactories support.
................................................................................
   204    204   supported <a href="https://www.sqlite.org/compile.html">compile-time options</a>
   205    205   designed for robustness and maximum backward compatibility with previously
   206    206   released versions of System.Data.SQLite.
   207    207   </p>
   208    208   
   209    209   <h2><b>Version History</b></h2>
   210    210   
          211  +<p>
          212  +    <b>1.0.103.0 - August XX, 2016 <font color="red">(release scheduled)</font></b>
          213  +</p>
          214  +<ul>
          215  +    <li>Change the SQLiteReadValueCallback delegate &quot;eventArgs&quot; parameter to be of type SQLiteReadEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
          216  +    <li>Make SQLiteReadValueEventArgs and SQLiteReadArrayEventArgs derive from SQLiteReadEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
          217  +    <li>Rename SQLiteReadValueEventArgs.ArrayEventArgs property to ExtraEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
          218  +    <li>Add NoVerifyTypeAffinity connection flag to disable all type affinity checking.</li>
          219  +    <li>Add support for <a href="https://www.sqlite.org/c3ref/blob_open.html">incremental blob I/O</a>.</li>
          220  +</ul>
   211    221   <p>
   212    222       <b>1.0.102.0 - June 23, 2016</b>
   213    223   </p>
   214    224   <ul>
   215    225       <li>Updated to <a href="https://www.sqlite.org/releaselog/3_13_0.html">SQLite 3.13.0</a>.</li>
   216    226       <li>Update the SQLiteConnection.EnableExtensions method to make use of the new SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION option, when available.&nbsp;<b>** Potentially Incompatible Change **</b></li>
   217    227       <li>Prevent the SQLiteCommand.ExecuteScalar method from throwing an exception when there are no result columns.&nbsp;<b>** Potentially Incompatible Change **</b></li>

Changes to test/AssemblyInfo.cs.

    34     34   // Version information for an assembly consists of the following four values:
    35     35   //
    36     36   //      Major Version
    37     37   //      Minor Version 
    38     38   //      Build Number
    39     39   //      Revision
    40     40   //
    41         -[assembly: AssemblyVersion("1.0.102.0")]
    42         -[assembly: AssemblyFileVersion("1.0.102.0")]
           41  +[assembly: AssemblyVersion("1.0.103.0")]
           42  +[assembly: AssemblyFileVersion("1.0.103.0")]

Changes to test/app.config.

     1      1   <configuration>
     2      2     <system.data>
     3      3       <DbProviderFactories>
     4      4         <remove invariant="System.Data.SQLite" />
     5         -      <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.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            5  +      <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.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
     6      6       </DbProviderFactories>
     7      7     </system.data>
     8      8   </configuration>

Changes to testce/AssemblyInfo.cs.

    34     34   // Version information for an assembly consists of the following four values:
    35     35   //
    36     36   //      Major Version
    37     37   //      Minor Version 
    38     38   //      Build Number
    39     39   //      Revision
    40     40   //
    41         -[assembly: AssemblyVersion("1.0.102.0")]
    42         -// [assembly: AssemblyFileVersion("1.0.102.0")]
           41  +[assembly: AssemblyVersion("1.0.103.0")]
           42  +// [assembly: AssemblyFileVersion("1.0.103.0")]

Changes to testlinq/2008/LINQ/App.config.

     1      1   <?xml version="1.0"?>
     2      2   <configuration>
     3      3     <system.data>
     4      4       <DbProviderFactories>
     5      5         <remove invariant="System.Data.SQLite.Linq" />
     6         -      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            6  +      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
     7      7       </DbProviderFactories>
     8      8     </system.data>
     9      9     <connectionStrings>
    10     10       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.Linq.2008.csdl|res://*/NorthwindModel.Linq.2008.ssdl|res://*/NorthwindModel.Linq.2008.msl;provider=System.Data.SQLite.Linq;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    11     11     </connectionStrings>
    12     12   </configuration>

Changes to testlinq/2010/EF6/App.config.

     2      2   <configuration>
     3      3     <configSections>
     4      4       <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     5      5     </configSections>
     6      6     <system.data>
     7      7       <DbProviderFactories>
     8      8         <remove invariant="System.Data.SQLite.EF6" />
     9         -      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            9  +      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    10     10       </DbProviderFactories>
    11     11     </system.data>
    12     12     <connectionStrings>
    13     13       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2010.csdl|res://*/NorthwindModel.EF6.2010.ssdl|res://*/NorthwindModel.EF6.2010.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    14     14     </connectionStrings>
    15     15     <entityFramework>
    16     16       <providers>
    17         -      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
           17  +      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    18     18       </providers>
    19     19     </entityFramework>
    20     20   </configuration>

Changes to testlinq/2010/LINQ/App.config.

     1      1   <?xml version="1.0"?>
     2      2   <configuration>
     3      3     <system.data>
     4      4       <DbProviderFactories>
     5      5         <remove invariant="System.Data.SQLite.Linq" />
     6         -      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            6  +      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
     7      7       </DbProviderFactories>
     8      8     </system.data>
     9      9     <connectionStrings>
    10     10       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.Linq.2010.csdl|res://*/NorthwindModel.Linq.2010.ssdl|res://*/NorthwindModel.Linq.2010.msl;provider=System.Data.SQLite.Linq;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    11     11     </connectionStrings>
    12     12   </configuration>

Changes to testlinq/2012/EF6/App.config.

     2      2   <configuration>
     3      3     <configSections>
     4      4       <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     5      5     </configSections>
     6      6     <system.data>
     7      7       <DbProviderFactories>
     8      8         <remove invariant="System.Data.SQLite.EF6" />
     9         -      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            9  +      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    10     10       </DbProviderFactories>
    11     11     </system.data>
    12     12     <connectionStrings>
    13     13       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2012.csdl|res://*/NorthwindModel.EF6.2012.ssdl|res://*/NorthwindModel.EF6.2012.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    14     14     </connectionStrings>
    15     15     <entityFramework>
    16     16       <providers>
    17         -      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
           17  +      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    18     18       </providers>
    19     19     </entityFramework>
    20     20   </configuration>

Changes to testlinq/2012/LINQ/App.config.

     1      1   <?xml version="1.0"?>
     2      2   <configuration>
     3      3     <system.data>
     4      4       <DbProviderFactories>
     5      5         <remove invariant="System.Data.SQLite.Linq" />
     6         -      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            6  +      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
     7      7       </DbProviderFactories>
     8      8     </system.data>
     9      9     <connectionStrings>
    10     10       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.Linq.2012.csdl|res://*/NorthwindModel.Linq.2012.ssdl|res://*/NorthwindModel.Linq.2012.msl;provider=System.Data.SQLite.Linq;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    11     11     </connectionStrings>
    12     12   </configuration>

Changes to testlinq/2013/EF6/App.config.

     2      2   <configuration>
     3      3     <configSections>
     4      4       <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     5      5     </configSections>
     6      6     <system.data>
     7      7       <DbProviderFactories>
     8      8         <remove invariant="System.Data.SQLite.EF6" />
     9         -      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            9  +      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    10     10       </DbProviderFactories>
    11     11     </system.data>
    12     12     <connectionStrings>
    13     13       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2013.csdl|res://*/NorthwindModel.EF6.2013.ssdl|res://*/NorthwindModel.EF6.2013.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    14     14     </connectionStrings>
    15     15     <entityFramework>
    16     16       <providers>
    17         -      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
           17  +      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    18     18       </providers>
    19     19     </entityFramework>
    20     20   </configuration>

Changes to testlinq/2013/LINQ/App.config.

     1      1   <?xml version="1.0"?>
     2      2   <configuration>
     3      3     <system.data>
     4      4       <DbProviderFactories>
     5      5         <remove invariant="System.Data.SQLite.Linq" />
     6         -      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            6  +      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
     7      7       </DbProviderFactories>
     8      8     </system.data>
     9      9     <connectionStrings>
    10     10       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.Linq.2013.csdl|res://*/NorthwindModel.Linq.2013.ssdl|res://*/NorthwindModel.Linq.2013.msl;provider=System.Data.SQLite.Linq;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    11     11     </connectionStrings>
    12     12   </configuration>

Changes to testlinq/2015/EF6/App.config.

     2      2   <configuration>
     3      3     <configSections>
     4      4       <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     5      5     </configSections>
     6      6     <system.data>
     7      7       <DbProviderFactories>
     8      8         <remove invariant="System.Data.SQLite.EF6" />
     9         -      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            9  +      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    10     10       </DbProviderFactories>
    11     11     </system.data>
    12     12     <connectionStrings>
    13     13       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2015.csdl|res://*/NorthwindModel.EF6.2015.ssdl|res://*/NorthwindModel.EF6.2015.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    14     14     </connectionStrings>
    15     15     <entityFramework>
    16     16       <providers>
    17         -      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
           17  +      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    18     18       </providers>
    19     19     </entityFramework>
    20     20   </configuration>

Changes to testlinq/2015/LINQ/App.config.

     1      1   <?xml version="1.0"?>
     2      2   <configuration>
     3      3     <system.data>
     4      4       <DbProviderFactories>
     5      5         <remove invariant="System.Data.SQLite.Linq" />
     6         -      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            6  +      <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq, Version=1.0.103.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
     7      7       </DbProviderFactories>
     8      8     </system.data>
     9      9     <connectionStrings>
    10     10       <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.Linq.2015.csdl|res://*/NorthwindModel.Linq.2015.ssdl|res://*/NorthwindModel.Linq.2015.msl;provider=System.Data.SQLite.Linq;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
    11     11     </connectionStrings>
    12     12   </configuration>

Changes to testlinq/Properties/AssemblyInfo.cs.

    42     42   //      Minor Version
    43     43   //      Build Number
    44     44   //      Revision
    45     45   //
    46     46   // You can specify all the values or you can default the Build and Revision Numbers
    47     47   // by using the '*' as shown below:
    48     48   // [assembly: AssemblyVersion("1.0.*")]
    49         -[assembly: AssemblyVersion("1.0.102.0")]
    50         -[assembly: AssemblyFileVersion("1.0.102.0")]
           49  +[assembly: AssemblyVersion("1.0.103.0")]
           50  +[assembly: AssemblyFileVersion("1.0.103.0")]

Changes to tools/install/Properties/AssemblyInfo.cs.

    24     24   // Version information for an assembly consists of the following four values:
    25     25   //
    26     26   //      Major Version
    27     27   //      Minor Version 
    28     28   //      Build Number
    29     29   //      Revision
    30     30   //
    31         -[assembly: AssemblyVersion("1.0.102.0")]
    32         -[assembly: AssemblyFileVersion("1.0.102.0")]
           31  +[assembly: AssemblyVersion("1.0.103.0")]
           32  +[assembly: AssemblyFileVersion("1.0.103.0")]

Changes to www/news.wiki.

     1      1   <title>News</title>
     2      2   
     3      3   <b>Version History</b>
     4      4   
            5  +<p>
            6  +    <b>1.0.103.0 - August XX, 2016 <font color="red">(release scheduled)</font></b>
            7  +</p>
            8  +<ul>
            9  +    <li>Change the SQLiteReadValueCallback delegate &quot;eventArgs&quot; parameter to be of type SQLiteReadEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
           10  +    <li>Make SQLiteReadValueEventArgs and SQLiteReadArrayEventArgs derive from SQLiteReadEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
           11  +    <li>Rename SQLiteReadValueEventArgs.ArrayEventArgs property to ExtraEventArgs.&nbsp;<b>** Potentially Incompatible Change **</b></li>
           12  +    <li>Add NoVerifyTypeAffinity connection flag to disable all type affinity checking.</li>
           13  +    <li>Add support for [https://www.sqlite.org/c3ref/blob_open.html|incremental blob I/O].</li>
           14  +</ul>
     5     15   <p>
     6     16       <b>1.0.102.0 - June 23, 2016</b>
     7     17   </p>
     8     18   <ul>
     9     19       <li>Updated to [https://www.sqlite.org/releaselog/3_13_0.html|SQLite 3.13.0].</li>
    10     20       <li>Update the SQLiteConnection.EnableExtensions method to make use of the new SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION option, when available.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    11     21       <li>Prevent the SQLiteCommand.ExecuteScalar method from throwing an exception when there are no result columns.&nbsp;<b>** Potentially Incompatible Change **</b></li>