System.Data.SQLite
Check-in [25174c66f9]
Not logged in

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

Overview
Comment:Rename the ManagedVersion property to ProviderVersion. Rename the ManagedSourceId property to ProviderSourceId. Add InteropVersion and InteropSourceId properties to the SQLiteConnection class.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 25174c66f99d125dcc4dabe3c4ff8776beb1c667
User & Date: mistachkin 2013-09-17 07:04:37
Context
2013-09-17
08:00
Add some simple tests of the new properties. check-in: 06c39db73a user: mistachkin tags: trunk
07:04
Rename the ManagedVersion property to ProviderVersion. Rename the ManagedSourceId property to ProviderSourceId. Add InteropVersion and InteropSourceId properties to the SQLiteConnection class. check-in: 25174c66f9 user: mistachkin tags: trunk
2013-09-16
22:10
Add ManagedVersion and ManagedSourceId properties to the SQLiteConnection class. check-in: 7eca16cac4 user: mistachkin tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Changes to Doc/Extra/version.html.

    50     50         <li>Check the result of sqlite3_column_name function against NULL.</li>
    51     51         <li>Return false for the SQLiteParameterCollection.IsSynchronized property because it is not thread-safe.</li>
    52     52         <li>Raise the static SQLiteConnection.Changed event when any SQLiteCommand, SQLiteDataReader, or CriticalHandle derived object instance is created. Fix for <a href="http://system.data.sqlite.org/index.html/info/aba4549801">[aba4549801]</a>.</li>
    53     53         <li>Add SQLiteCommand.Execute, SQLiteCommand.ExecuteNonQuery, and SQLiteCommand.ExecuteScalar method overloads that take a CommandBehavior parameter.</li>
    54     54         <li>Revise how the extra object data is passed to the static SQLiteConnection.Changed event.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    55     55         <li>Make sure the database cannot be changed by a query when the CommandBehavior.SchemaOnly flag is used. Fix for <a href="http://system.data.sqlite.org/index.html/info/f8dbab8baf">[f8dbab8baf]</a>.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    56     56         <li>Include the XML documentation files in the NuGet packages. Fix for <a href="http://system.data.sqlite.org/index.html/info/5970d5b0a6">[5970d5b0a6]</a>.</li>
    57         -      <li>Add ManagedVersion and ManagedSourceId properties to the SQLiteConnection class.</li>
           57  +      <li>Add InteropVersion, InteropSourceId, ProviderVersion, and ProviderSourceId properties to the SQLiteConnection class.</li>
    58     58       </ul>
    59     59       <p><b>1.0.88.0 - August 7, 2013</b></p>
    60     60       <ul>
    61     61         <li>Various fixes to managed virtual table integration infrastructure.</li>
    62     62         <li>Implement workaround for an incorrect PROCESSOR_ARCHITECTURE being reported. Fix for <a href="http://system.data.sqlite.org/index.html/info/9ac9862611">[9ac9862611]</a>.</li>
    63     63         <li>Modify classes that implement the IDisposable pattern to set the disposed flag after their base classes have been disposed.</li>
    64     64         <li>When automatically registering custom functions, use the executing assembly (i.e. System.Data.SQLite) for reference detection. Fix for <a href="http://system.data.sqlite.org/index.html/info/4e49a58c4c">[4e49a58c4c]</a>.</li>

Changes to SQLite.Interop/src/win/SQLite.Interop.rc.

    52     52               VALUE "FileDescription", "System.Data.SQLite Interop Assembly"
    53     53               VALUE "FileVersion", INTEROP_VERSION
    54     54               VALUE "InternalName", "SQLite.Interop"
    55     55               VALUE "LegalCopyright", "Public Domain"
    56     56               VALUE "OriginalFilename", "SQLite.Interop.dll"
    57     57               VALUE "ProductName", "System.Data.SQLite"
    58     58               VALUE "ProductVersion", INTEROP_VERSION
           59  +            VALUE "SourceId", INTEROP_SOURCE_ID " " INTEROP_SOURCE_TIMESTAMP
    59     60               VALUE "SQLiteCompanyName", "D. Richard Hipp, et al."
    60     61               VALUE "SQLiteDescription", "SQLite Database Engine"
    61     62               VALUE "SQLiteCopyright", "http://www.sqlite.org/copyright.html"
    62     63               VALUE "SQLiteVersion", SQLITE_VERSION
    63     64               VALUE "SQLiteSourceId", SQLITE_SOURCE_ID
    64     65           END
    65     66       END
    66     67       BLOCK "VarFileInfo"
    67     68       BEGIN
    68     69           VALUE "Translation", 0x409, 0x4b0
    69     70       END
    70     71   END

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

    18     18   extern int RegisterExtensionFunctions(sqlite3 *db);
    19     19   #endif
    20     20   
    21     21   #ifdef SQLITE_OS_WIN
    22     22   #if defined(INTEROP_CODEC)
    23     23   #include "crypt.c"
    24     24   #endif
           25  +
           26  +#include "interop.h"
    25     27   
    26     28   #define INTEROP_DEBUG_NONE           (0x0000)
    27     29   #define INTEROP_DEBUG_CLOSE          (0x0001)
    28     30   #define INTEROP_DEBUG_FINALIZE       (0x0002)
    29     31   #define INTEROP_DEBUG_BACKUP_FINISH  (0x0004)
    30     32   #define INTEROP_DEBUG_OPEN           (0x0008)
    31     33   #define INTEROP_DEBUG_OPEN16         (0x0010)
................................................................................
   212    214       }
   213    215     }else{
   214    216       ret = SQLITE_OK;
   215    217     }
   216    218     return ret;
   217    219   }
   218    220   #endif
          221  +
          222  +SQLITE_API const char *sqlite3_libversion_interop(void)
          223  +{
          224  +  return INTEROP_VERSION;
          225  +}
          226  +
          227  +SQLITE_API const char *sqlite3_sourceid_interop(void)
          228  +{
          229  +  return INTEROP_SOURCE_ID " " INTEROP_SOURCE_TIMESTAMP;
          230  +}
   219    231   
   220    232   SQLITE_API int WINAPI sqlite3_open_interop(const char *filename, int flags, sqlite3 **ppdb)
   221    233   {
   222    234     int ret;
   223    235   
   224    236   #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_OPEN)
   225    237     sqlite3InteropDebug("sqlite3_open_interop(): calling sqlite3_open_v2(\"%s\", %d, %p)...\n", filename, flags, ppdb);

Changes to SQLite.Interop/src/win/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.89.0"
            9  +#define INTEROP_VERSION          "1.0.89.0"
           10  +#endif
           11  +
           12  +#ifndef INTEROP_SOURCE_ID
           13  +#define INTEROP_SOURCE_ID        "0000000000000000000000000000000000000000"
           14  +#endif
           15  +
           16  +#ifndef INTEROP_SOURCE_TIMESTAMP
           17  +#define INTEROP_SOURCE_TIMESTAMP "0000-00-00 00:00:00 UTC"
    10     18   #endif

Changes to Setup/build.bat.

   244    244   IF DEFINED LOGGING GOTO skip_setLogging
   245    245   IF DEFINED NOLOG GOTO skip_setLogging
   246    246   
   247    247   SET LOGGING="/logger:FileLogger,Microsoft.Build.Engine;Logfile=%LOGDIR%\%LOGPREFIX%_%CONFIGURATION%_%PLATFORM%_%YEAR%_%LOGSUFFIX%.log;Verbosity=diagnostic"
   248    248   
   249    249   :skip_setLogging
   250    250   
   251         -IF EXIST Externals\Eagle\bin\EagleShell.exe (
   252         -  %__ECHO% Externals\Eagle\bin\EagleShell.exe -file Setup\sourceTag.eagle SourceIdMode System.Data.SQLite\SQLitePatchLevel.cs
          251  +IF NOT DEFINED NOTAG (
          252  +  IF EXIST Externals\Eagle\bin\EagleShell.exe (
          253  +    %__ECHO% Externals\Eagle\bin\EagleShell.exe -file Setup\sourceTag.eagle SourceIdMode SQLite.Interop\src\win\interop.h
   253    254   
   254         -  IF ERRORLEVEL 1 (
   255         -    ECHO Source tagging failed.
   256         -    GOTO errors
          255  +    IF ERRORLEVEL 1 (
          256  +      ECHO Source tagging of interop assembly failed.
          257  +      GOTO errors
          258  +    )
          259  +
          260  +    %__ECHO% Externals\Eagle\bin\EagleShell.exe -file Setup\sourceTag.eagle SourceIdMode System.Data.SQLite\SQLitePatchLevel.cs
          261  +
          262  +    IF ERRORLEVEL 1 (
          263  +      ECHO Source tagging of provider assembly failed.
          264  +      GOTO errors
          265  +    )
          266  +  ) ELSE (
          267  +    ECHO WARNING: Source tagging skipped, Eagle binaries are not available.
   257    268     )
   258    269   ) ELSE (
   259         -  ECHO WARNING: Source tagging skipped, Eagle binaries are not available.
          270  +  ECHO WARNING: Source tagging skipped, disabled via NOTAG environment variable.
   260    271   )
   261    272   
   262    273   %_VECHO% Logging = '%LOGGING%'
   263    274   %_VECHO% MsBuildArgs = '%MSBUILD_ARGS%'
   264    275   
   265    276   %__ECHO% MSBuild.exe "%SOLUTION%" "/target:%TARGET%" "/property:Configuration=%CONFIGURATION%" "/property:Platform=%PLATFORM%" %LOGGING% %MSBUILD_ARGS%
   266    277   

Changes to Setup/sourceTag.eagle.

    80     80             #
    81     81             # NOTE: Match against this pattern in the "PatchLevel.cs"
    82     82             #       file (this pattern is fairly strict to prevent
    83     83             #       false-positives).
    84     84             #
    85     85             set pattern1 {AssemblySourceId\(.*?\)}
    86     86             set pattern2 {AssemblySourceTimeStamp\(.*?\)}
    87         -          set pattern3 {SOURCE_ID\t\t".*?"}
    88         -          set pattern4 {SOURCE_TIMESTAMP\t".*?"}
           87  +          set pattern3 {INTEROP_SOURCE_ID\s+".*?"}
           88  +          set pattern4 {INTEROP_SOURCE_TIMESTAMP\s+".*?"}
    89     89   
    90     90             #
    91     91             # NOTE: Build the final replacement specification string.
    92     92             #
    93     93             set subSpec1 [appendArgs AssemblySourceId(\" $id \" )]
    94     94             set subSpec2 [appendArgs AssemblySourceTimeStamp(\" $timeStamp \" )]
    95         -          set subSpec3 [appendArgs SOURCE_ID\t\t \" $id \"]
    96         -          set subSpec4 [appendArgs SOURCE_TIMESTAMP\t \" $timeStamp \"]
           95  +          set subSpec3 [appendArgs INTEROP_SOURCE_ID "        \"" $id \"]
           96  +          set subSpec4 [appendArgs INTEROP_SOURCE_TIMESTAMP " \"" $timeStamp \"]
    97     97   
    98     98             #
    99     99             # NOTE: Perform the replacements in the original data
   100    100             #       (first match only).
   101    101             #
   102    102             set count 0
   103    103   

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

   360    360       internal static string SQLiteSourceId
   361    361       {
   362    362         get
   363    363         {
   364    364           return UTF8ToString(UnsafeNativeMethods.sqlite3_sourceid(), -1);
   365    365         }
   366    366       }
          367  +
          368  +    internal static string InteropVersion
          369  +    {
          370  +        get
          371  +        {
          372  +#if !SQLITE_STANDARD
          373  +            return UTF8ToString(UnsafeNativeMethods.sqlite3_libversion_interop(), -1);
          374  +#else
          375  +            return null;
          376  +#endif
          377  +        }
          378  +    }
          379  +
          380  +    internal static string InteropSourceId
          381  +    {
          382  +        get
          383  +        {
          384  +#if !SQLITE_STANDARD
          385  +            return UTF8ToString(UnsafeNativeMethods.sqlite3_sourceid_interop(), -1);
          386  +#else
          387  +            return null;
          388  +#endif
          389  +        }
          390  +    }
   367    391   
   368    392       internal override bool AutoCommit
   369    393       {
   370    394         get
   371    395         {
   372    396           return IsAutocommit(_sql, _sql);
   373    397         }

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

  2457   2457       /// </summary>
  2458   2458       public static string DefineConstants
  2459   2459       {
  2460   2460           get { return SQLite3.DefineConstants; }
  2461   2461       }
  2462   2462   
  2463   2463       /// <summary>
  2464         -    /// Returns the version of the underlying SQLite database engine
         2464  +    /// Returns the version of the underlying SQLite core library.
  2465   2465       /// </summary>
  2466   2466       public static string SQLiteVersion
  2467   2467       {
  2468   2468         get { return SQLite3.SQLiteVersion; }
  2469   2469       }
  2470   2470   
  2471   2471       /// <summary>
................................................................................
  2473   2473       /// SQLITE_SOURCE_ID C preprocessor macro used when compiling the
  2474   2474       /// SQLite core library.
  2475   2475       /// </summary>
  2476   2476       public static string SQLiteSourceId
  2477   2477       {
  2478   2478         get { return SQLite3.SQLiteSourceId; }
  2479   2479       }
         2480  +
         2481  +    /// <summary>
         2482  +    /// This method returns the version of the interop SQLite assembly
         2483  +    /// used.  If the SQLite interop assembly is not in use or the
         2484  +    /// necessary information cannot be obtained for any reason, a null
         2485  +    /// value may be returned.
         2486  +    /// </summary>
         2487  +    public static string InteropVersion
         2488  +    {
         2489  +      get { return SQLite3.InteropVersion; }
         2490  +    }
         2491  +
         2492  +    /// <summary>
         2493  +    /// This method returns the string whose value contains the unique
         2494  +    /// identifier for the source checkout used to build the interop
         2495  +    /// assembly.  If the SQLite interop assembly is not in use or the
         2496  +    /// necessary information cannot be obtained for any reason, a null
         2497  +    /// value may be returned.
         2498  +    /// </summary>
         2499  +    public static string InteropSourceId
         2500  +    {
         2501  +      get { return SQLite3.InteropSourceId; }
         2502  +    }
  2480   2503   
  2481   2504       /// <summary>
  2482   2505       /// This method returns the version of the managed components used
  2483   2506       /// to interact with the SQLite core library.  If the necessary
  2484   2507       /// information cannot be obtained for any reason, a null value may
  2485   2508       /// be returned.
  2486   2509       /// </summary>
  2487         -    public static string ManagedVersion
         2510  +    public static string ProviderVersion
  2488   2511       {
  2489   2512           get
  2490   2513           {
  2491   2514               return (_assembly != null) ?
  2492   2515                   _assembly.GetName().Version.ToString() : null;
  2493   2516           }
  2494   2517       }
................................................................................
  2495   2518   
  2496   2519       /// <summary>
  2497   2520       /// This method returns the string whose value contains the unique
  2498   2521       /// identifier for the source checkout used to build the managed
  2499   2522       /// components currently executing.  If the necessary information
  2500   2523       /// cannot be obtained for any reason, a null value may be returned.
  2501   2524       /// </summary>
  2502         -    public static string ManagedSourceId
         2525  +    public static string ProviderSourceId
  2503   2526       {
  2504   2527           get
  2505   2528           {
  2506   2529               if (_assembly == null)
  2507   2530                   return null;
  2508   2531   
  2509   2532               string sourceId = null;

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

   767    767   
   768    768       // These functions add existing functionality on top of SQLite and require a little effort to
   769    769       // get working when using the standard SQLite library.
   770    770       #region interop added functionality
   771    771   
   772    772   #if !SQLITE_STANDARD
   773    773   
          774  +    [DllImport(SQLITE_DLL)]
          775  +    internal static extern IntPtr sqlite3_libversion_interop();
          776  +
          777  +    [DllImport(SQLITE_DLL)]
          778  +    internal static extern IntPtr sqlite3_sourceid_interop();
          779  +
   774    780       [DllImport(SQLITE_DLL)]
   775    781       internal static extern SQLiteErrorCode sqlite3_close_interop(IntPtr db);
   776    782   
   777    783       [DllImport(SQLITE_DLL)]
   778    784       internal static extern SQLiteErrorCode sqlite3_create_function_interop(IntPtr db, byte[] strName, int nArgs, int nType, IntPtr pvUser, SQLiteCallback func, SQLiteCallback fstep, SQLiteFinalCallback ffinal, int needCollSeq);
   779    785   
   780    786       [DllImport(SQLITE_DLL)]

Changes to Tests/common.eagle.

   738    738                 tputs $channel no\n
   739    739               }
   740    740             }
   741    741           }
   742    742         }
   743    743       }
   744    744   
   745         -    proc checkForSQLite { channel } {
   746         -      tputs $channel "---- checking for core SQLite library... "
          745  +    proc checkForSQLiteLibrary { channel } {
          746  +      tputs $channel "---- checking for SQLite core library... "
   747    747   
   748    748         if {[catch {
   749    749                 object invoke -flags +NonPublic System.Data.SQLite.SQLite3 \
   750    750                 SQLiteVersion} version] == 0} then {
          751  +        #
          752  +        # NOTE: Check if the returned version was null.  If so, make it easy
          753  +        #       to spot.
          754  +        #
          755  +        if {[string length $version] == 0} then {
          756  +          set version null
          757  +        }
          758  +
   751    759           #
   752    760           # NOTE: Attempt to query the Fossil source identifier for the SQLite
   753    761           #       core library.
   754    762           #
   755    763           if {[catch {
   756    764                   object invoke -flags +NonPublic System.Data.SQLite.SQLite3 \
   757    765                   SQLiteSourceId} sourceId]} then {
   758    766             #
   759    767             # NOTE: We failed to query the Fossil source identifier.
   760    768             #
   761    769             set sourceId unknown
   762    770           }
   763    771   
          772  +        #
          773  +        # NOTE: Check if the returned Fossil source identifier was null.  If
          774  +        #       so, make it easy to spot.
          775  +        #
          776  +        if {[string length $sourceId] == 0} then {
          777  +          set sourceId null
          778  +        }
          779  +
   764    780           #
   765    781           # NOTE: Yes, the SQLite core library appears to be available.
   766    782           #
   767    783           addConstraint SQLite
          784  +
          785  +        tputs $channel [appendArgs "yes (" $version " " $sourceId ")\n"]
          786  +      } else {
          787  +        tputs $channel no\n
          788  +      }
          789  +    }
          790  +
          791  +    proc checkForSQLiteInterop { channel } {
          792  +      tputs $channel "---- checking for SQLite interop assembly... "
          793  +
          794  +      if {[catch {
          795  +              object invoke -flags +NonPublic System.Data.SQLite.SQLite3 \
          796  +              InteropVersion} version] == 0} then {
          797  +        #
          798  +        # NOTE: Check if the returned version was null.  If so, make it easy
          799  +        #       to spot.
          800  +        #
          801  +        if {[string length $version] == 0} then {
          802  +          set version null
          803  +        }
          804  +
          805  +        #
          806  +        # NOTE: Attempt to query the Fossil source identifier for the SQLite
          807  +        #       core library.
          808  +        #
          809  +        if {[catch {
          810  +                object invoke -flags +NonPublic System.Data.SQLite.SQLite3 \
          811  +                InteropSourceId} sourceId]} then {
          812  +          #
          813  +          # NOTE: We failed to query the Fossil source identifier.
          814  +          #
          815  +          set sourceId unknown
          816  +        }
          817  +
          818  +        #
          819  +        # NOTE: Check if the returned Fossil source identifier was null.  If
          820  +        #       so, make it easy to spot.
          821  +        #
          822  +        if {[string length $sourceId] == 0} then {
          823  +          set sourceId null
          824  +        }
          825  +
          826  +        #
          827  +        # NOTE: Yes, the SQLite interop assembly appears to be available.
          828  +        #
          829  +        addConstraint SQLiteInterop
   768    830   
   769    831           tputs $channel [appendArgs "yes (" $version " " $sourceId ")\n"]
   770    832         } else {
   771    833           tputs $channel no\n
   772    834         }
   773    835       }
   774    836   
................................................................................
  1939   2001             } else {
  1940   2002               tputs $::test_channel unknown\n
  1941   2003             }
  1942   2004           }
  1943   2005   
  1944   2006           catch {
  1945   2007             tputs $::test_channel \
  1946         -              "---- source version of \"System.Data.SQLite\"... "
         2008  +              "---- source version of \"System.Data.SQLite.dll\"... "
  1947   2009   
  1948   2010             if {[catch {object invoke -flags +NonPublic \
  1949         -                  System.Data.SQLite.SQLiteConnection ManagedVersion} \
  1950         -                  sourceVersion] == 0} then {
  1951         -            if {[string length $sourceVersion] == 0} then {
  1952         -              set sourceVersion <none>
         2011  +                  System.Data.SQLite.SQLiteConnection ProviderVersion} \
         2012  +                  version] == 0} then {
         2013  +            if {[string length $version] == 0} then {
         2014  +              set version null
  1953   2015               }
  1954         -            tputs $::test_channel [appendArgs $sourceVersion \n]
         2016  +            tputs $::test_channel [appendArgs $version \n]
  1955   2017             } else {
  1956   2018               tputs $::test_channel unknown\n
  1957   2019             }
  1958   2020           }
  1959   2021   
  1960   2022           catch {
  1961   2023             tputs $::test_channel \
  1962         -              "---- source checkout of \"System.Data.SQLite\"... "
         2024  +              "---- source checkout of \"System.Data.SQLite.dll\"... "
  1963   2025   
  1964   2026             if {[catch {object invoke -flags +NonPublic \
  1965         -                  System.Data.SQLite.SQLiteConnection ManagedSourceId} \
         2027  +                  System.Data.SQLite.SQLiteConnection ProviderSourceId} \
  1966   2028                     sourceId] == 0} then {
  1967   2029               if {[string length $sourceId] == 0} then {
  1968         -              set sourceId <none>
         2030  +              set sourceId null
  1969   2031               }
  1970   2032               tputs $::test_channel [appendArgs $sourceId \n]
  1971   2033             } else {
  1972   2034               tputs $::test_channel unknown\n
  1973   2035             }
  1974   2036           }
  1975   2037   
................................................................................
  1981   2043           #
  1982   2044           # NOTE: Now, we need to know if the SQLite core library is available
  1983   2045           #       (i.e. because the managed-only System.Data.SQLite assembly can
  1984   2046           #       load without it; however, it cannot do anything useful without
  1985   2047           #       it).  If we are using the mixed-mode assembly and we already
  1986   2048           #       found it (above), this should always succeed.
  1987   2049           #
  1988         -        checkForSQLite $::test_channel
         2050  +        checkForSQLiteLibrary $::test_channel
         2051  +
         2052  +        #
         2053  +        # NOTE: Check if the SQLite interop assembly is available.
         2054  +        #
         2055  +        checkForSQLiteInterop $::test_channel
  1989   2056   
  1990   2057           #
  1991   2058           # NOTE: Check the SQLite database and temporary directories.
  1992   2059           #
  1993   2060           checkForSQLiteDirectories $::test_channel
  1994   2061   
  1995   2062           #

Changes to readme.htm.

   195    195       <li>Check the result of sqlite3_column_name function against NULL.</li>
   196    196       <li>Return false for the SQLiteParameterCollection.IsSynchronized property because it is not thread-safe.</li>
   197    197       <li>Raise the static SQLiteConnection.Changed event when any SQLiteCommand, SQLiteDataReader, or CriticalHandle derived object instance is created. Fix for [aba4549801].</li>
   198    198       <li>Add SQLiteCommand.Execute, SQLiteCommand.ExecuteNonQuery, and SQLiteCommand.ExecuteScalar method overloads that take a CommandBehavior parameter.</li>
   199    199       <li>Revise how the extra object data is passed to the static SQLiteConnection.Changed event.&nbsp;<b>** Potentially Incompatible Change **</b></li>
   200    200       <li>Make sure the database cannot be changed by a query when the CommandBehavior.SchemaOnly flag is used. Fix for [f8dbab8baf].&nbsp;<b>** Potentially Incompatible Change **</b></li>
   201    201       <li>Include the XML documentation files in the NuGet packages. Fix for [5970d5b0a6].</li>
   202         -    <li>Add ManagedVersion and ManagedSourceId properties to the SQLiteConnection class.</li>
          202  +    <li>Add InteropVersion, InteropSourceId, ProviderVersion, and ProviderSourceId properties to the SQLiteConnection class.</li>
   203    203   </ul>
   204    204   <p>
   205    205       <b>1.0.88.0 - August 7, 2013</b>
   206    206   </p>
   207    207   <ul>
   208    208       <li>Various fixes to managed virtual table integration infrastructure.</li>
   209    209       <li>Implement workaround for an incorrect PROCESSOR_ARCHITECTURE being reported. Fix for [9ac9862611].</li>

Changes to www/news.wiki.

    11     11       <li>Check the result of sqlite3_column_name function against NULL.</li>
    12     12       <li>Return false for the SQLiteParameterCollection.IsSynchronized property because it is not thread-safe.</li>
    13     13       <li>Raise the static SQLiteConnection.Changed event when any SQLiteCommand, SQLiteDataReader, or CriticalHandle derived object instance is created. Fix for [aba4549801].</li>
    14     14       <li>Add SQLiteCommand.Execute, SQLiteCommand.ExecuteNonQuery, and SQLiteCommand.ExecuteScalar method overloads that take a CommandBehavior parameter.</li>
    15     15       <li>Revise how the extra object data is passed to the static SQLiteConnection.Changed event.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    16     16       <li>Make sure the database cannot be changed by a query when the CommandBehavior.SchemaOnly flag is used. Fix for [f8dbab8baf].&nbsp;<b>** Potentially Incompatible Change **</b></li>
    17     17       <li>Include the XML documentation files in the NuGet packages. Fix for [5970d5b0a6].</li>
    18         -    <li>Add ManagedVersion and ManagedSourceId properties to the SQLiteConnection class.</li>
           18  +    <li>Add InteropVersion, InteropSourceId, ProviderVersion, and ProviderSourceId properties to the SQLiteConnection class.</li>
    19     19   </ul>
    20     20   <p>
    21     21       <b>1.0.88.0 - August 7, 2013</b>
    22     22   </p>
    23     23   <ul>
    24     24       <li>Various fixes to managed virtual table integration infrastructure.</li>
    25     25       <li>Implement workaround for an incorrect PROCESSOR_ARCHITECTURE being reported. Fix for [9ac9862611].</li>