System.Data.SQLite
Check-in [7518ccfcff]
Not logged in

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

Overview
Comment:1.0.47.0
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | sourceforge
Files: files | file ages | folders
SHA1: 7518ccfcff880210e3e827f262a474f344a98f6a
User & Date: rmsimpson 2007-12-04 16:07:21
Context
2007-12-04
16:11
SQLite 3.5.3 check-in: ba03747b49 user: rmsimpson tags: sourceforge
16:07
1.0.47.0 check-in: 7518ccfcff user: rmsimpson tags: sourceforge
2007-10-01
03:25
1.0.46.0 check-in: 67f18e8aaa user: rmsimpson tags: sourceforge
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Changes to Doc/Extra/dbfactorysupport.html.

    93     93   <configuration>
    94     94     <system.data>
    95     95       <DbProviderFactories>
    96     96         <remove invariant="System.Data.SQLite"/>
    97     97         <add name="SQLite Data Provider" invariant="System.Data.SQLite" 
    98     98              description=".Net Framework Data Provider for SQLite"
    99     99              type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite,
   100         -                 Version=1.0.46.0, Culture=neutral,
          100  +                 Version=1.0.47.0, Culture=neutral,
   101    101                    PublicKeyToken=db937bc2d44ff139"/>
   102    102       </DbProviderFactories>
   103    103     </system.data>
   104    104   </configuration>
   105    105   </pre>
   106    106         </div>
   107    107         <p>

Changes to Doc/Extra/version.html.

    51     51             </td>
    52     52           </tr>
    53     53         </table>
    54     54       </div>
    55     55       <div id="mainSection">
    56     56       <div id="mainBody">
    57     57       <h1 class="heading">Version History</h1>
           58  +    <p><b>1.0.47.0 - December 4, 2007</b></p>
           59  +    <ul>
           60  +      <li>Code merge with SQLite 3.5.3</li>
           61  +      <li>Added installer support for Visual Studio 2008.&nbsp; Code is still using the
           62  +        VS2005 SDK so one or two bells and whistles are missing, but nothing significant.</li>
           63  +      <li>This is the last version that the FTS1 and FTS2 extensions will appear.&nbsp;
           64  +        Everyone should rebuild their fulltext indexes using the new FTS3 module.&nbsp;
           65  +        FTS1 and FTS2 suffer from a design flaw that could cause database corruption with
           66  +        certain vacuum operations.</li>
           67  +      <li>Fixed pooled connections so they rollback any outstanding transactions before
           68  +        going to the pool.&nbsp; </li>
           69  +      <li>Fixed the unintended breaking of the TYPES keyword, and mis-typing of untyped
           70  +        or indeterminate column types. </li>
           71  +      <li>Assert a FileIOPermission() requirement in the static SQLiteFunction constructor.
           72  +      </li>
           73  +      <li>The CE-only SQLiteFunction.RegisterFunction() is now available on the desktop
           74  +        platform for dynamic registration of functions.&nbsp; You must still close and re-open
           75  +        a connection in order for the new function to be seen by a connection.</li>
           76  +      <li>Fixed the "database is locked" errors by implementing behavioral changes in the
           77  +        interop.c file for SQLite.&nbsp; Closing a database force-finalizes any prepared
           78  +        statements on the database to ensure the connection is fully closed.&nbsp; This
           79  +        was rather tricky because the GC thread could still be finalizing statements itself.
           80  +        &nbsp;</li>
           81  +      <li>Modifed the mergebin utility to help circumvent a long-standing strong name verification
           82  +        bug in the Compact Framework.</li>
           83  +    </ul>
    58     84       <p><b>1.0.46.0 - September 30, 2007</b></p>
    59     85       <ul>
    60     86       <li>Fixed faulty logic in type discovery code when using SQLiteDataReader.GetValue().</li>
    61     87         <li>Fixed Connection.Open() bug when dealing with :memory: databases.</li>
    62     88         <li>Fixed SQLiteCommand.ExecuteScalar() to return a properly-typed value.</li>
    63     89         <li>Added support for SQLiteParameter.ResetDbType().</li>
    64     90         <li>Added test cases for rigid and flexible type testing.</li>

Changes to Doc/Extra/welcome.html.

    98     98             engine (compared to other providers and engines)</a></p>
    99     99         <br>
   100    100         <h1 class="heading">SQLite.NET Provider Features</h1>
   101    101         <p>This SQLite provider implements every feature of the underlying SQLite 
   102    102           database engine without omission. Here's a brief summary:</p>
   103    103         <UL>
   104    104           <LI>
   105         -        Written from scratch on VS2005 specifically for ADO.NET 2.0, implenting all the
          105  +        Written from scratch on VS2005/2008 specifically for ADO.NET 2.0, implenting all the
   106    106           base classes and features recently introduced in the framework, including automatic
   107    107           transaction enlistment.<li>Supports the Full and Compact .NET Framework, as well as
   108    108             native C/C++ development.&nbsp; 100% binary compatible with the original sqlite3.dll.
   109    109           </li>
   110    110           <li>
   111    111           On the Compact Framework, it is faster than the newly-introduced Sql Server Mobile.
   112    112             SQLite's installed size is a fraction of Sql Mobile's. It uses less memory at runtime,
   113    113             runs queries faster, and has a smaller database file size as well. </li>
   114    114           <li>Encrypted database support.&nbsp; Encrypted databases are fully encrypted and
   115    115             support both binary and cleartext password types. </li>
   116         -        <li>Visual Studio 2005 Design-Time Support.&nbsp; You can add a SQLite 
          116  +        <li>Visual Studio 2005/2008 Design-Time Support.&nbsp; You can add a SQLite 
   117    117           database to the Servers list, design queries with the Query Designer, 
   118    118           drag-and-drop tables onto a Typed DataSet, etc. </li>
   119    119           <li>
   120    120           Single file redistributable.&nbsp; The core sqlite3 codebase and the ADO.NET wrapper 
   121    121           are combined into one multi-module assembly. </li>
   122    122           <li>Binaries included for Itanium, x64, x86 and ARM processors. </li>
   123    123           <li>

Changes to Doc/SQLite.NET.chm.

cannot compute difference between binary files

Changes to SQLite.Interop/SQLite.Interop.rc.

    49     49   
    50     50   /////////////////////////////////////////////////////////////////////////////
    51     51   //
    52     52   // Version
    53     53   //
    54     54   
    55     55   VS_VERSION_INFO VERSIONINFO
    56         - FILEVERSION 1,0,46,0
           56  + FILEVERSION 1,0,47,0
    57     57    PRODUCTVERSION 1,0,0,0
    58     58    FILEFLAGSMASK 0x17L
    59     59   #ifdef _DEBUG
    60     60    FILEFLAGS 0x1L
    61     61   #else
    62     62    FILEFLAGS 0x0L
    63     63   #endif
................................................................................
    67     67   BEGIN
    68     68       BLOCK "StringFileInfo"
    69     69       BEGIN
    70     70           BLOCK "040904b0"
    71     71           BEGIN
    72     72               VALUE "Comments", "http://sqlite.phxsoftware.com"
    73     73               VALUE "FileDescription", "System.Data.SQLite Interop Library"
    74         -            VALUE "FileVersion", "1.0.46.0"
           74  +            VALUE "FileVersion", "1.0.47.0"
    75     75               VALUE "InternalName", "SQLite.Interop.DLL"
    76     76               VALUE "LegalCopyright", "Released to the public domain"
    77     77               VALUE "OriginalFilename", "SQLite3.DLL 3.4.2"
    78     78               VALUE "ProductName", "System.Data.SQLite"
    79     79               VALUE "ProductVersion", "1.0"
    80     80           END
    81     81       END

Changes to SQLite.Interop/SQLite.Interop.vcproj.

    50     50   				Name="VCMIDLTool"
    51     51   			/>
    52     52   			<Tool
    53     53   				Name="VCCLCompilerTool"
    54     54   				AdditionalOptions="/GS-"
    55     55   				Optimization="2"
    56     56   				FavorSizeOrSpeed="1"
    57         -				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS1;SQLITE_ENABLE_FTS2;SQLITE_OMIT_TRACE"
           57  +				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS3;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_OMIT_TRACE"
    58     58   				StringPooling="true"
    59     59   				ExceptionHandling="0"
    60     60   			/>
    61     61   			<Tool
    62     62   				Name="VCManagedResourceCompilerTool"
    63     63   			/>
    64     64   			<Tool
................................................................................
    65     65   				Name="VCResourceCompilerTool"
    66     66   			/>
    67     67   			<Tool
    68     68   				Name="VCPreLinkEventTool"
    69     69   			/>
    70     70   			<Tool
    71     71   				Name="VCLinkerTool"
    72         -				AdditionalDependencies="advapi32.lib &quot;fts1/$(ConfigurationName)/SQLite.Interop.FTS1.lib&quot; &quot;fts2/$(ConfigurationName)/SQLite.Interop.FTS2.lib&quot; $(NOINHERIT)"
    73     72   				OutputFile="../bin/System.Data.SQLite.DLL"
    74     73   				GenerateManifest="false"
    75     74   				IgnoreDefaultLibraryNames=""
    76     75   				ModuleDefinitionFile="src\sqlite3.def"
    77     76   				EmbedManagedResourceFile=""
    78     77   				DelayLoadDLLs="advapi32.dll"
    79     78   				OptimizeForWindows98="1"
................................................................................
   132    131   			/>
   133    132   			<Tool
   134    133   				Name="VCMIDLTool"
   135    134   			/>
   136    135   			<Tool
   137    136   				Name="VCCLCompilerTool"
   138    137   				ExecutionBucket="7"
   139         -				PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;$(PLATFORMDEFINES);NDEBUG;_WINDOWS;_USRDLL;CPPSMART_EXPORTS;$(ARCHFAM);$(_ARCHFAM_);UNICODE;_UNICODE;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS2;SQLITE_OMIT_TRACE"
          138  +				PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;$(PLATFORMDEFINES);NDEBUG;_WINDOWS;_USRDLL;CPPSMART_EXPORTS;$(ARCHFAM);$(_ARCHFAM_);UNICODE;_UNICODE;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS3;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_OMIT_TRACE"
   140    139   				StringPooling="true"
   141    140   				ExceptionHandling="0"
   142    141   				BufferSecurityCheck="false"
   143    142   			/>
   144    143   			<Tool
   145    144   				Name="VCManagedResourceCompilerTool"
   146    145   			/>
................................................................................
   151    150   				AdditionalIncludeDirectories="$(IntDir)"
   152    151   			/>
   153    152   			<Tool
   154    153   				Name="VCPreLinkEventTool"
   155    154   			/>
   156    155   			<Tool
   157    156   				Name="VCLinkerTool"
   158         -				IgnoreImportLibrary="true"
   159         -				AdditionalDependencies="&quot;fts2/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS2.lib&quot;"
   160    157   				OutputFile="../bin/CompactFramework/System.Data.SQLite.DLL"
   161    158   				AdditionalLibraryDirectories=""
   162    159   				IgnoreDefaultLibraryNames=""
   163    160   				ModuleDefinitionFile="src\sqlite3.def"
   164    161   				AddModuleNamesToAssembly=""
   165    162   				EmbedManagedResourceFile=""
   166    163   				SubSystem="9"
   167         -				MergeSections=""
   168    164   				TargetMachine="3"
   169    165   			/>
   170    166   			<Tool
   171    167   				Name="VCALinkTool"
   172    168   			/>
   173    169   			<Tool
   174    170   				Name="VCXDCMakeTool"
................................................................................
   178    174   			/>
   179    175   			<Tool
   180    176   				Name="VCCodeSignTool"
   181    177   			/>
   182    178   			<Tool
   183    179   				Name="VCPostBuildEventTool"
   184    180   				Description="Merging binaries ..."
   185         -				CommandLine="..\bin\tools\mergebin.exe /S:.clr ..\System.Data.SQLite\bin\CompactFramework\$(TargetFileName) &quot;$(TargetPath)&quot;&#x0D;&#x0A;sn -Ra &quot;$(TargetPath)&quot; ..\System.Data.SQLite\System.Data.SQLite.CF.snk&#x0D;&#x0A;"
          181  +				CommandLine="..\bin\tools\mergebin.exe /A:1120 /S:.clr ..\System.Data.SQLite\bin\CompactFramework\$(TargetFileName) &quot;$(TargetPath)&quot;&#x0D;&#x0A;sn -Ra &quot;$(TargetPath)&quot; ..\System.Data.SQLite\System.Data.SQLite.CF.snk&#x0D;&#x0A;"
   186    182   			/>
   187    183   			<DeploymentTool
   188    184   				ForceDirty="-1"
   189    185   				RemoteDirectory="\Program Files\testce"
   190    186   				RegisterOutput="0"
   191    187   				AdditionalFiles=""
   192    188   			/>
................................................................................
   220    216   				TargetEnvironment="2"
   221    217   			/>
   222    218   			<Tool
   223    219   				Name="VCCLCompilerTool"
   224    220   				AdditionalOptions="/GS-"
   225    221   				Optimization="2"
   226    222   				FavorSizeOrSpeed="1"
   227         -				PreprocessorDefinitions="NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;WIN64;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS1;SQLITE_ENABLE_FTS2;SQLITE_OMIT_TRACE"
          223  +				PreprocessorDefinitions="NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;WIN64;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS3;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_OMIT_TRACE"
   228    224   				StringPooling="true"
   229    225   				ExceptionHandling="0"
   230    226   				BufferSecurityCheck="false"
   231    227   				EnableFunctionLevelLinking="true"
   232    228   				RuntimeTypeInfo="false"
   233    229   			/>
   234    230   			<Tool
................................................................................
   238    234   				Name="VCResourceCompilerTool"
   239    235   			/>
   240    236   			<Tool
   241    237   				Name="VCPreLinkEventTool"
   242    238   			/>
   243    239   			<Tool
   244    240   				Name="VCLinkerTool"
   245         -				AdditionalDependencies="advapi32.lib &quot;fts1/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS1.lib&quot; &quot;fts2/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS2.lib&quot; $(NOINHERIT)"
   246    241   				OutputFile="../bin/Itanium/System.Data.SQLite.DLL"
   247    242   				ModuleDefinitionFile="src\sqlite3.def"
   248    243   				EmbedManagedResourceFile=""
   249    244   				DelayLoadDLLs="advapi32.dll"
   250    245   				OptimizeForWindows98="1"
   251    246   				ImportLibrary=""
   252    247   				TargetMachine="5"
................................................................................
   307    302   				TargetEnvironment="3"
   308    303   			/>
   309    304   			<Tool
   310    305   				Name="VCCLCompilerTool"
   311    306   				AdditionalOptions="/GS-"
   312    307   				Optimization="2"
   313    308   				FavorSizeOrSpeed="1"
   314         -				PreprocessorDefinitions="NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;WIN64;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS1;SQLITE_ENABLE_FTS2;SQLITE_OMIT_TRACE"
          309  +				PreprocessorDefinitions="NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;WIN64;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS3;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_OMIT_TRACE"
   315    310   				StringPooling="true"
   316    311   				ExceptionHandling="0"
   317    312   				BufferSecurityCheck="false"
   318    313   				EnableFunctionLevelLinking="true"
   319    314   				RuntimeTypeInfo="false"
   320    315   			/>
   321    316   			<Tool
................................................................................
   325    320   				Name="VCResourceCompilerTool"
   326    321   			/>
   327    322   			<Tool
   328    323   				Name="VCPreLinkEventTool"
   329    324   			/>
   330    325   			<Tool
   331    326   				Name="VCLinkerTool"
   332         -				AdditionalDependencies="advapi32.lib &quot;fts1/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS1.lib&quot; &quot;fts2/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS2.lib&quot; $(NOINHERIT)"
   333    327   				OutputFile="../bin/x64/System.Data.SQLite.DLL"
   334    328   				ModuleDefinitionFile="src\sqlite3.def"
   335    329   				EmbedManagedResourceFile=""
   336    330   				DelayLoadDLLs="advapi32.dll"
   337    331   				OptimizeForWindows98="1"
   338    332   				ImportLibrary=""
   339    333   				TargetMachine="17"
................................................................................
   392    386   			<Tool
   393    387   				Name="VCMIDLTool"
   394    388   			/>
   395    389   			<Tool
   396    390   				Name="VCCLCompilerTool"
   397    391   				AdditionalOptions="/GS-"
   398    392   				Optimization="0"
   399         -				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS2;SQLITE_OMIT_TRACE"
          393  +				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS3;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_OMIT_TRACE"
   400    394   				RuntimeLibrary="3"
   401    395   				RuntimeTypeInfo="false"
   402    396   				DebugInformationFormat="3"
   403    397   			/>
   404    398   			<Tool
   405    399   				Name="VCManagedResourceCompilerTool"
   406    400   			/>
................................................................................
   408    402   				Name="VCResourceCompilerTool"
   409    403   			/>
   410    404   			<Tool
   411    405   				Name="VCPreLinkEventTool"
   412    406   			/>
   413    407   			<Tool
   414    408   				Name="VCLinkerTool"
   415         -				AdditionalDependencies="advapi32.lib &quot;fts1/$(ConfigurationName)/SQLite.Interop.FTS1.lib&quot; &quot;fts2/$(ConfigurationName)/SQLite.Interop.FTS2.lib&quot; $(NOINHERIT)"
   416    409   				OutputFile="../bin/$(InputName).DLL"
   417    410   				LinkIncremental="1"
   418    411   				ModuleDefinitionFile="src\sqlite3.def"
   419    412   				EmbedManagedResourceFile=""
   420    413   				DelayLoadDLLs="advapi32.dll"
   421    414   				GenerateDebugInformation="true"
   422    415   				ImportLibrary=""
................................................................................
   476    469   				TargetEnvironment="1"
   477    470   			/>
   478    471   			<Tool
   479    472   				Name="VCCLCompilerTool"
   480    473   				ExecutionBucket="7"
   481    474   				AdditionalOptions="/GS-"
   482    475   				Optimization="0"
   483         -				PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;$(PLATFORMDEFINES);_DEBUG;_WINDOWS;_USRDLL;CPPSMART_EXPORTS;$(ARCHFAM);$(_ARCHFAM_);UNICODE;_UNICODE;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS1;SQLITE_ENABLE_FTS2;SQLITE_OMIT_TRACE"
          476  +				PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;$(PLATFORMDEFINES);_DEBUG;_WINDOWS;_USRDLL;CPPSMART_EXPORTS;$(ARCHFAM);$(_ARCHFAM_);UNICODE;_UNICODE;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS3;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_OMIT_TRACE"
   484    477   				DebugInformationFormat="3"
   485    478   			/>
   486    479   			<Tool
   487    480   				Name="VCManagedResourceCompilerTool"
   488    481   			/>
   489    482   			<Tool
   490    483   				Name="VCResourceCompilerTool"
................................................................................
   495    488   			<Tool
   496    489   				Name="VCPreLinkEventTool"
   497    490   			/>
   498    491   			<Tool
   499    492   				Name="VCLinkerTool"
   500    493   				IgnoreImportLibrary="true"
   501    494   				AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE"
   502         -				AdditionalDependencies="&quot;fts1/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS1.lib&quot; &quot;fts2/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS2.lib&quot;"
   503    495   				OutputFile="../bin/CompactFramework/$(InputName).DLL"
   504    496   				AdditionalLibraryDirectories=""
   505    497   				IgnoreDefaultLibraryNames=""
   506    498   				ModuleDefinitionFile="src\sqlite3.def"
   507    499   				AddModuleNamesToAssembly=""
   508    500   				EmbedManagedResourceFile=""
   509    501   				GenerateDebugInformation="true"
................................................................................
   560    552   				Name="VCMIDLTool"
   561    553   				TargetEnvironment="2"
   562    554   			/>
   563    555   			<Tool
   564    556   				Name="VCCLCompilerTool"
   565    557   				AdditionalOptions="/GS-"
   566    558   				Optimization="0"
   567         -				PreprocessorDefinitions="_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;WIN64;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS1;SQLITE_ENABLE_FTS2;SQLITE_OMIT_TRACE"
          559  +				PreprocessorDefinitions="_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;WIN64;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS3;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_OMIT_TRACE"
   568    560   				RuntimeLibrary="3"
   569    561   				RuntimeTypeInfo="false"
   570    562   				DebugInformationFormat="3"
   571    563   			/>
   572    564   			<Tool
   573    565   				Name="VCManagedResourceCompilerTool"
   574    566   			/>
................................................................................
   576    568   				Name="VCResourceCompilerTool"
   577    569   			/>
   578    570   			<Tool
   579    571   				Name="VCPreLinkEventTool"
   580    572   			/>
   581    573   			<Tool
   582    574   				Name="VCLinkerTool"
   583         -				AdditionalDependencies="advapi32.lib &quot;fts1/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS1.lib&quot; &quot;fts2/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS2.lib&quot; $(NOINHERIT)"
   584    575   				OutputFile="../bin/Itanium/$(InputName).DLL"
   585    576   				ModuleDefinitionFile="src\sqlite3.def"
   586    577   				EmbedManagedResourceFile=""
   587    578   				DelayLoadDLLs="advapi32.dll"
   588    579   				GenerateDebugInformation="true"
   589    580   				ImportLibrary=""
   590    581   				TargetMachine="5"
................................................................................
   642    633   				Name="VCMIDLTool"
   643    634   				TargetEnvironment="3"
   644    635   			/>
   645    636   			<Tool
   646    637   				Name="VCCLCompilerTool"
   647    638   				AdditionalOptions="/GS-"
   648    639   				Optimization="0"
   649         -				PreprocessorDefinitions="_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;WIN64;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS1;SQLITE_ENABLE_FTS2;SQLITE_OMIT_TRACE"
          640  +				PreprocessorDefinitions="_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NO_TCL;THREADSAFE=1;WIN64;SQLITE_HAS_CODEC;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_FTS3;SQLITE_ENABLE_FTS2;SQLITE_ENABLE_FTS1;SQLITE_OMIT_TRACE"
   650    641   				RuntimeLibrary="3"
   651    642   				RuntimeTypeInfo="false"
   652    643   				DebugInformationFormat="3"
   653    644   			/>
   654    645   			<Tool
   655    646   				Name="VCManagedResourceCompilerTool"
   656    647   			/>
................................................................................
   658    649   				Name="VCResourceCompilerTool"
   659    650   			/>
   660    651   			<Tool
   661    652   				Name="VCPreLinkEventTool"
   662    653   			/>
   663    654   			<Tool
   664    655   				Name="VCLinkerTool"
   665         -				AdditionalDependencies="advapi32.lib &quot;fts1/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS1.lib&quot; &quot;fts2/$(PlatformName)/$(ConfigurationName)/SQLite.Interop.FTS2.lib&quot; $(NOINHERIT)"
   666    656   				OutputFile="../bin/x64/$(InputName).DLL"
   667    657   				ModuleDefinitionFile="src\sqlite3.def"
   668    658   				EmbedManagedResourceFile=""
   669    659   				DelayLoadDLLs="advapi32.dll"
   670    660   				GenerateDebugInformation="true"
   671    661   				ImportLibrary=""
   672    662   				TargetMachine="17"

Changes to SQLite.Interop/crypt.c.

    49     49   // space to hold it.
    50     50   static LPCRYPTBLOCK CreateCryptBlock(HCRYPTKEY hKey, Pager *pager, LPCRYPTBLOCK pExisting)
    51     51   {
    52     52     LPCRYPTBLOCK pBlock;
    53     53   
    54     54     if (!pExisting) // Creating a new cryptblock
    55     55     {
    56         -    pBlock = sqliteMalloc(sizeof(CRYPTBLOCK));
           56  +    pBlock = sqlite3_malloc(sizeof(CRYPTBLOCK));
    57     57       ZeroMemory(pBlock, sizeof(CRYPTBLOCK));
    58     58       pBlock->hReadKey = hKey;
    59     59       pBlock->hWriteKey = hKey;
    60     60     }
    61     61     else // Updating an existing cryptblock
    62     62     {
    63     63       pBlock = pExisting;
................................................................................
    65     65   
    66     66     pBlock->dwPageSize = (DWORD)pager->pageSize;
    67     67     pBlock->dwCryptSize = pBlock->dwPageSize;
    68     68   
    69     69     // Existing cryptblocks may have a buffer, if so, delete it
    70     70     if (pBlock->pvCrypt)
    71     71     {
    72         -    sqliteFree(pBlock->pvCrypt);
           72  +    sqlite3_free(pBlock->pvCrypt);
    73     73       pBlock->pvCrypt = NULL;
    74     74     }
    75     75   
    76     76     // Figure out how big to make our spare crypt block
    77     77     CryptEncrypt(hKey, 0, TRUE, 0, NULL, &pBlock->dwCryptSize, pBlock->dwCryptSize * 2);
    78         -  pBlock->pvCrypt = sqliteMalloc(pBlock->dwCryptSize + (CRYPT_OFFSET * 2));
           78  +  pBlock->pvCrypt = sqlite3_malloc(pBlock->dwCryptSize + (CRYPT_OFFSET * 2));
    79     79   
    80     80     return pBlock;
    81     81   }
    82     82   
    83     83   // Destroy a cryptographic context and any buffers and keys allocated therein
    84     84   static void DestroyCryptBlock(LPCRYPTBLOCK pBlock)
    85     85   {
................................................................................
    94     94     {
    95     95       CryptDestroyKey(pBlock->hWriteKey);
    96     96     }
    97     97   
    98     98     // If there's extra buffer space allocated, free it as well
    99     99     if (pBlock->pvCrypt)
   100    100     {
   101         -    sqliteFree(pBlock->pvCrypt);
          101  +    sqlite3_free(pBlock->pvCrypt);
   102    102     }
   103    103   
   104    104     // All done with this cryptblock
   105         -  sqliteFree(pBlock);
          105  +  sqlite3_free(pBlock);
   106    106   }
   107    107   
   108    108   // Encrypt/Decrypt functionality, called by pager.c
   109    109   void * sqlite3Codec(void *pArg, void *data, Pgno nPageNum, int nMode)
   110    110   {
   111    111     LPCRYPTBLOCK pBlock = (LPCRYPTBLOCK)pArg;
   112    112     DWORD dwPageSize;
   113    113     LPVOID pvTemp;
   114    114   
   115    115     if (!pBlock) return data;
   116    116   
   117    117     // Make sure the page size for the pager is still the same as the page size
   118    118     // for the cryptblock.  If the user changed it, we need to adjust!
   119         -  if (nMode != 2)
   120         -  {
   121         -    PgHdr *pageHeader;
   122         -    pageHeader = DATA_TO_PGHDR(data);
   123         -    if (pageHeader->pPager->pageSize != pBlock->dwPageSize)
   124         -    {
   125         -      // Update the cryptblock to reflect the new page size
   126         -      CreateCryptBlock(0, pageHeader->pPager, pBlock);
   127         -    }
   128         -  }
          119  +  //if (nMode != 2)
          120  +  //{
          121  +  //  PgHdr *pageHeader;
          122  +  //  pageHeader = DATA_TO_PGHDR(data);
          123  +  //  if (pageHeader->pPager->pageSize != pBlock->dwPageSize)
          124  +  //  {
          125  +  //    // Update the cryptblock to reflect the new page size
          126  +  //    CreateCryptBlock(0, pageHeader->pPager, pBlock);
          127  +  //  }
          128  +  //}
   129    129   
   130    130     switch(nMode)
   131    131     {
   132    132     case 0: // Undo a "case 7" journal file encryption
   133    133     case 2: // Reload a page
   134    134     case 3: // Load a page
   135    135       if (!pBlock->hReadKey) break;

Changes to SQLite.Interop/interop.c.

            1  +//#include "../temp/sqlite.interop/src/sqlite3.c"
     1      2   #include "src/sqlite3.c"
     2      3   #include "crypt.c"
     3      4   #include <tchar.h>
     4      5   
     5      6   #if NDEBUG
     6      7   
     7      8   #if _WIN32_WCE
     8      9   #include "merge.h"
     9         -
    10         -// IMPORTANT: This placeholder is here for a reason!!!
    11         -// On the Compact Framework the .data section of the DLL must have its RawDataSize larger than the VirtualSize!
    12         -// If its not, strong name validation will fail and other bad things will happen.
    13         -DWORD _ph[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    14         -
    15     10   #else
    16     11   #include "merge_full.h"
    17     12   #endif // _WIN32_WCE
    18     13   #endif // NDEBUG
    19     14   
    20     15   #ifdef OS_WIN
    21     16   
    22         -#include <tchar.h>
    23         -
    24     17   // Additional flag for sqlite3.flags, we use it as a reference counter
    25     18   #define SQLITE_WantClose 0x10000000
    26     19   
    27     20   typedef void (WINAPI *SQLITEUSERFUNC)(void *, int, void **);
    28     21   typedef int  (WINAPI *SQLITECOLLATION)(int, const void *, int, const void*);
    29     22   
    30     23   typedef void (WINAPI *SQLITEUPDATEHOOK)(int, const char *, int, const char *, int, sqlite_int64);
................................................................................
    68     61   __declspec(dllexport) void WINAPI sqlite3_sleep_interop(int milliseconds)
    69     62   {
    70     63     Sleep(milliseconds);
    71     64   }
    72     65   
    73     66   void InitializeDbMutex(sqlite3 *pdb)
    74     67   {
    75         -  pdb->pTraceArg = (CRITICAL_SECTION *)sqliteMalloc(sizeof(CRITICAL_SECTION));
    76         -  InitializeCriticalSection(pdb->pTraceArg);
           68  +  //pdb->pTraceArg = (CRITICAL_SECTION *)sqlite3_malloc(sizeof(CRITICAL_SECTION));
           69  +  //InitializeCriticalSection(pdb->pTraceArg);
    77     70   }
    78     71   
    79     72   void EnterDbMutex(sqlite3 *pdb)
    80     73   {
    81         -  if (pdb->pTraceArg)
    82         -  {
    83         -    EnterCriticalSection(pdb->pTraceArg);
    84         -  }
           74  +  //if (pdb->pTraceArg)
           75  +  //{
           76  +  //  EnterCriticalSection(pdb->pTraceArg);
           77  +  //}
    85     78   }
    86     79   
    87     80   void LeaveDbMutex(sqlite3 *pdb)
    88     81   {
    89         -  if (pdb->pTraceArg)
    90         -  {
    91         -    LeaveCriticalSection(pdb->pTraceArg);
    92         -  }
           82  +  //if (pdb->pTraceArg)
           83  +  //{
           84  +  //  LeaveCriticalSection(pdb->pTraceArg);
           85  +  //}
    93     86   }
    94     87   
    95     88   int sqlite3_closeAndFreeMutex(sqlite3 *db)
    96     89   {
    97         -  CRITICAL_SECTION *pcrit = db->pTraceArg;
    98         -  int ret;
    99         -  EnterDbMutex(db);
           90  +  //CRITICAL_SECTION *pcrit = db->pTraceArg;
           91  +  //int ret;
           92  +  //EnterDbMutex(db);
   100     93   
   101         -  ret = sqlite3_close(db);
   102         -  if (ret == SQLITE_OK)
   103         -  {
   104         -    if (pcrit)
   105         -    {
   106         -      LeaveCriticalSection(pcrit);
   107         -      DeleteCriticalSection(pcrit);
   108         -      free(pcrit);
   109         -    }
   110         -  }
   111         -  else
   112         -    LeaveDbMutex(db);
           94  +  //ret = sqlite3_close(db);
           95  +  //if (ret == SQLITE_OK)
           96  +  //{
           97  +  //  if (pcrit)
           98  +  //  {
           99  +  //    LeaveCriticalSection(pcrit);
          100  +  //    DeleteCriticalSection(pcrit);
          101  +  //    sqlite3_free(pcrit);
          102  +  //  }
          103  +  //}
          104  +  //else
          105  +  //  LeaveDbMutex(db);
   113    106   
   114         -  return ret;
          107  +  return 0;
   115    108   }
   116    109   
   117    110   int SetCompression(const wchar_t *pwszFilename, unsigned short ufLevel)
   118    111   {
   119    112   #ifdef FSCTL_SET_COMPRESSION
   120    113     HMODULE hMod = GetModuleHandle(_T("KERNEL32"));
   121    114     CREATEFILEW pfunc;
................................................................................
   177    170   }
   178    171   
   179    172   __declspec(dllexport) int WINAPI sqlite3_libversion_number_interop(void)
   180    173   {
   181    174     return sqlite3_libversion_number();
   182    175   }
   183    176   
          177  +/*
          178  +    The goal of this version of close is different than that of sqlite3_close(), and is designed to lend itself better to .NET's non-deterministic finalizers and
          179  +    the GC thread.  SQLite will not close a database if statements are open on it -- but for our purposes, we'd rather finalize all active statements
          180  +    and forcibly close the database.  The reason is simple -- a lot of people don't Dispose() of their objects correctly and let the garbage collector
          181  +    do it.  This leads to unexpected behavior when a user thinks they've closed a database, but it's still open because not all the statements have
          182  +    hit the GC yet.
          183  +
          184  +    So, here we have a problem ... .NET has a pointer to any number of sqlite3_stmt objects.  We can't call sqlite3_finalize() on these because
          185  +    their memory is freed and can be used for something else.  The GC thread could potentially try and call finalize again on the statement after
          186  +    that memory was deallocated.  BAD.  So, what we need to do is make a copy of each statement, and call finalize() on the copy -- so that the original
          187  +    statement's memory is preserved, and marked as BAD, but we can still manage to finalize everything and forcibly close the database.  Later when the 
          188  +    GC gets around to calling finalize_interop() on the "bad" statement, we detect that and finish deallocating the pointer.
          189  +*/
   184    190   __declspec(dllexport) int WINAPI sqlite3_close_interop(sqlite3 *db)
   185    191   {
   186         -  // Try and close the database.  If there are unfinalized statements, mark the database to be closed as
   187         -  // soon as the last finalized statement is closed
   188    192     int ret = sqlite3_closeAndFreeMutex(db);
   189         -  if (ret == SQLITE_BUSY)
          193  +
          194  +  if (ret == SQLITE_BUSY && db->pVdbe)
   190    195     {
   191         -    if (db->pVdbe)
          196  +    while (db->pVdbe)
   192    197       {
   193         -      db->flags |= SQLITE_WantClose;
   194         -      ret = 0;
          198  +      // Make a copy of the first prepared statement
          199  +      Vdbe *p = (Vdbe *)sqlite3_malloc(sizeof(Vdbe));
          200  +      Vdbe *po = db->pVdbe;
          201  +
          202  +      if (!p) return SQLITE_NOMEM;
          203  +
          204  +      CopyMemory(p, po, sizeof(Vdbe));
          205  +
          206  +      // Put it on the chain so we can free it
          207  +      db->pVdbe = p;
          208  +      ret = sqlite3_finalize((sqlite3_stmt *)p); // This will also free the copy's memory
          209  +      if (ret)
          210  +      {
          211  +        // finalize failed -- so we must put back anything we munged
          212  +        CopyMemory(po, p, sizeof(Vdbe));
          213  +        db->pVdbe = po;
          214  +        break;
          215  +      }
          216  +      else
          217  +      {
          218  +        ZeroMemory(po, sizeof(Vdbe));
          219  +        po->magic = VDBE_MAGIC_DEAD;
          220  +      }
   195    221       }
          222  +    ret = sqlite3_closeAndFreeMutex(db);
   196    223     }
   197    224   
   198    225     return ret;
   199    226   }
   200    227   
   201    228   // Returns the number of databases attached to this one
   202    229   __declspec(dllexport) void WINAPI sqlite3_detach_all_interop(sqlite3 *db)
................................................................................
   482    509   __declspec(dllexport) int WINAPI sqlite3_finalize_interop(sqlite3_stmt *stmt)
   483    510   {
   484    511     // Try and finalize a statement, and close the database it belonged to if the database was marked for closing
   485    512     Vdbe *p = (Vdbe *)stmt;
   486    513     sqlite3 *db = (p == NULL) ? NULL : p->db;
   487    514     int ret;
   488    515   
          516  +  if (p->magic == VDBE_MAGIC_DEAD && p->db == NULL)
          517  +  {
          518  +    sqlite3_free(p);
          519  +    return SQLITE_OK;
          520  +  }
   489    521     EnterDbMutex(db);
   490    522     ret = sqlite3_finalize(stmt);
   491    523     LeaveDbMutex(db);
   492    524   
   493    525     if (ret == SQLITE_OK)
   494    526     {
   495    527       if (db->flags & SQLITE_WantClose)
................................................................................
   857    889       break;
   858    890     }
   859    891     LeaveDbMutex(db);
   860    892   
   861    893     return ret;
   862    894   }
   863    895   
          896  +
          897  +// IMPORTANT: This placeholder is here for a reason!!!
          898  +// On the Compact Framework the .data section of the DLL must have its RawDataSize larger than the VirtualSize!
          899  +// If its not, strong name validation will fail and other bad things will happen.
          900  +#if _WIN32_WCE
          901  +__int64 _ph[84] = {1};
          902  +#endif // _WIN32_WCE
          903  +
   864    904   #endif // OS_WIN

Changes to SQLite.Interop/merge.h.

     1      1   // This code was automatically generated from assembly
     2      2   // C:\Src\SQLite.NET\System.Data.SQLite\bin\CompactFramework\System.Data.SQLite.dll
     3      3   
     4      4   #include <windef.h>
     5      5   
     6         -#pragma data_seg(".clr")
            6  +#pragma data_seg(push,clrseg,".clr")
     7      7   #pragma comment(linker, "/SECTION:.clr,ER")
     8         -  char __ph[131688] = {0}; // The number of bytes to reserve
     9         -#pragma data_seg()
            8  +  char __ph[131636] = {0}; // The number of bytes to reserve
            9  +#pragma data_seg(pop,clrseg)
    10     10   
    11     11   typedef BOOL (WINAPI *DLLMAIN)(HANDLE, DWORD, LPVOID);
    12     12   typedef struct EXTRA_STUFF
    13     13   {
    14     14     DWORD dwNativeEntryPoint;
    15     15   } EXTRA_STUFF, *LPEXTRA_STUFF;
    16     16   

Changes to SQLite.Interop/merge_full.h.

     1      1   // This code was automatically generated from assembly
     2      2   // C:\Src\SQLite.NET\System.Data.SQLite\bin\System.Data.SQLite.dll
     3      3   
     4      4   #include <windef.h>
     5      5   
     6         -#pragma data_seg(".clr")
            6  +#pragma data_seg(push,clrseg,".clr")
     7      7   #pragma comment(linker, "/SECTION:.clr,ER")
     8         -  char __ph[141848] = {0}; // The number of bytes to reserve
     9         -#pragma data_seg()
            8  +  char __ph[142252] = {0}; // The number of bytes to reserve
            9  +#pragma data_seg(pop,clrseg)
    10     10   
    11     11   typedef BOOL (WINAPI *DLLMAIN)(HANDLE, DWORD, LPVOID);
    12     12   typedef struct EXTRA_STUFF
    13     13   {
    14     14     DWORD dwNativeEntryPoint;
    15     15   } EXTRA_STUFF, *LPEXTRA_STUFF;
    16     16   

Changes to SQLite.NET.sln.

    24     24   EndProject
    25     25   Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SQLite.Interop", "SQLite.Interop\SQLite.Interop.vcproj", "{10B51CE8-A838-44DE-BD82-B658F0296F80}"
    26     26   	ProjectSection(WebsiteProperties) = preProject
    27     27   		Debug.AspNetCompiler.Debug = "True"
    28     28   		Release.AspNetCompiler.Debug = "False"
    29     29   	EndProjectSection
    30     30   	ProjectSection(ProjectDependencies) = postProject
    31         -		{BCD4CA74-771B-49EE-9025-606CB839DA0B} = {BCD4CA74-771B-49EE-9025-606CB839DA0B}
    32     31   		{AC139951-261A-4463-B6FA-AEBC25283A66} = {AC139951-261A-4463-B6FA-AEBC25283A66}
    33     32   		{AC139952-261A-4463-B6FA-AEBC25283A66} = {AC139952-261A-4463-B6FA-AEBC25283A66}
           33  +		{BCD4CA74-771B-49EE-9025-606CB839DA0B} = {BCD4CA74-771B-49EE-9025-606CB839DA0B}
    34     34   		{BCD6CA74-771B-49EE-9025-606CB839DA0B} = {BCD6CA74-771B-49EE-9025-606CB839DA0B}
    35     35   	EndProjectSection
    36     36   EndProject
    37     37   Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "testce", "testce\testce.csproj", "{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}"
    38     38   	ProjectSection(WebsiteProperties) = preProject
    39     39   		Debug.AspNetCompiler.Debug = "True"
    40     40   		Release.AspNetCompiler.Debug = "False"
................................................................................
    63     63   	EndProjectSection
    64     64   EndProject
    65     65   Global
    66     66   	GlobalSection(SolutionConfigurationPlatforms) = preSolution
    67     67   		Debug|Compact Framework = Debug|Compact Framework
    68     68   		Debug|Itanium = Debug|Itanium
    69     69   		Debug|Mixed Platforms = Debug|Mixed Platforms
           70  +		Debug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)
    70     71   		Debug|Win32 = Debug|Win32
    71     72   		Debug|x64 = Debug|x64
    72     73   		Release|Compact Framework = Release|Compact Framework
    73     74   		Release|Itanium = Release|Itanium
    74     75   		Release|Mixed Platforms = Release|Mixed Platforms
           76  +		Release|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)
    75     77   		Release|Win32 = Release|Win32
    76     78   		Release|x64 = Release|x64
    77     79   	EndGlobalSection
    78     80   	GlobalSection(ProjectConfigurationPlatforms) = postSolution
    79     81   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|Compact Framework.ActiveCfg = Debug|Any CPU
    80     82   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|Compact Framework.Build.0 = Debug|Any CPU
    81     83   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|Itanium.ActiveCfg = Debug|Any CPU
    82     84   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    83     85   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    84     86   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU
           87  +		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Any CPU
    85     88   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|Win32.ActiveCfg = Debug|Any CPU
    86     89   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Debug|x64.ActiveCfg = Debug|Any CPU
    87     90   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|Compact Framework.ActiveCfg = Release|Any CPU
    88     91   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|Compact Framework.Build.0 = Release|Any CPU
    89     92   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|Itanium.ActiveCfg = Release|Any CPU
    90     93   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    91     94   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    92     95   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU
           96  +		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Any CPU
    93     97   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|Win32.ActiveCfg = Release|Any CPU
    94     98   		{AC139951-261A-4463-B6FA-AEBC25283A66}.Release|x64.ActiveCfg = Release|Any CPU
    95     99   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|Compact Framework.ActiveCfg = Debug|Any CPU
    96    100   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|Itanium.ActiveCfg = Debug|Itanium
    97    101   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|Itanium.Build.0 = Debug|Itanium
    98    102   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    99    103   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
          104  +		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Any CPU
   100    105   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|Win32.ActiveCfg = Debug|x86
   101    106   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|Win32.Build.0 = Debug|x86
   102    107   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|x64.ActiveCfg = Debug|x64
   103    108   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Debug|x64.Build.0 = Debug|x64
   104    109   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|Compact Framework.ActiveCfg = Release|Any CPU
   105    110   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|Itanium.ActiveCfg = Release|Itanium
   106    111   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|Itanium.Build.0 = Release|Itanium
   107    112   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
   108    113   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|Mixed Platforms.Build.0 = Release|Any CPU
          114  +		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Any CPU
   109    115   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|Win32.ActiveCfg = Release|x86
   110    116   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|Win32.Build.0 = Release|x86
   111    117   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|x64.ActiveCfg = Release|x64
   112    118   		{E27B1B1E-19C0-45E8-AA74-B6E1C041A130}.Release|x64.Build.0 = Release|x64
   113    119   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Compact Framework.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
   114    120   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Compact Framework.Build.0 = Debug|Pocket PC 2003 (ARMV4)
   115    121   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Compact Framework.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
   116    122   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Itanium.ActiveCfg = Debug|Itanium
   117    123   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Itanium.Build.0 = Debug|Itanium
   118    124   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Itanium.Deploy.0 = Debug|Itanium
   119    125   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
   120    126   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Mixed Platforms.Build.0 = Debug|x64
          127  +		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
          128  +		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
          129  +		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
   121    130   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Win32.ActiveCfg = Debug|Win32
   122    131   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Win32.Build.0 = Debug|Win32
   123    132   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|Win32.Deploy.0 = Debug|Win32
   124    133   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|x64.ActiveCfg = Debug|x64
   125    134   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|x64.Build.0 = Debug|x64
   126    135   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Debug|x64.Deploy.0 = Debug|x64
   127    136   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Compact Framework.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
   128    137   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Compact Framework.Build.0 = Release|Pocket PC 2003 (ARMV4)
   129    138   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Compact Framework.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
   130    139   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Itanium.ActiveCfg = Release|Itanium
   131    140   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Itanium.Build.0 = Release|Itanium
   132    141   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Mixed Platforms.ActiveCfg = Release|x64
   133    142   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Mixed Platforms.Build.0 = Release|x64
          143  +		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
          144  +		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
          145  +		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
   134    146   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Win32.ActiveCfg = Release|Win32
   135    147   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|Win32.Build.0 = Release|Win32
   136    148   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|x64.ActiveCfg = Release|x64
   137    149   		{10B51CE8-A838-44DE-BD82-B658F0296F80}.Release|x64.Build.0 = Release|x64
   138    150   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Compact Framework.ActiveCfg = Debug|Any CPU
   139    151   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Compact Framework.Build.0 = Debug|Any CPU
   140    152   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Compact Framework.Deploy.0 = Debug|Any CPU
   141    153   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Itanium.ActiveCfg = Debug|Any CPU
   142    154   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
   143    155   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
   144    156   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU
          157  +		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Any CPU
   145    158   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|Win32.ActiveCfg = Debug|Any CPU
   146    159   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Debug|x64.ActiveCfg = Debug|Any CPU
   147    160   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Compact Framework.ActiveCfg = Release|Any CPU
   148    161   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Compact Framework.Build.0 = Release|Any CPU
   149    162   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Compact Framework.Deploy.0 = Release|Any CPU
   150    163   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Itanium.ActiveCfg = Release|Any CPU
   151    164   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
   152    165   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
   153    166   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU
          167  +		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Any CPU
   154    168   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|Win32.ActiveCfg = Release|Any CPU
   155    169   		{B86CE504-C4E4-496F-A0F0-E613BCFD3DF7}.Release|x64.ActiveCfg = Release|Any CPU
   156    170   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|Compact Framework.ActiveCfg = Debug|Any CPU
   157    171   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|Itanium.ActiveCfg = Debug|Any CPU
   158    172   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|Itanium.Build.0 = Debug|Any CPU
   159    173   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
   160    174   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
          175  +		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Any CPU
   161    176   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|Win32.ActiveCfg = Debug|Any CPU
   162    177   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|Win32.Build.0 = Debug|Any CPU
   163    178   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|x64.ActiveCfg = Debug|Any CPU
   164    179   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Debug|x64.Build.0 = Debug|Any CPU
   165    180   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|Compact Framework.ActiveCfg = Release|Any CPU
   166    181   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|Itanium.ActiveCfg = Release|Any CPU
   167    182   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|Itanium.Build.0 = Release|Any CPU
   168    183   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
   169    184   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|Mixed Platforms.Build.0 = Release|Any CPU
          185  +		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Any CPU
   170    186   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|Win32.ActiveCfg = Release|Any CPU
   171    187   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|Win32.Build.0 = Release|Any CPU
   172    188   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|x64.ActiveCfg = Release|Any CPU
   173    189   		{AC139952-261A-4463-B6FA-AEBC25283A66}.Release|x64.Build.0 = Release|Any CPU
   174    190   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Compact Framework.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
   175    191   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Compact Framework.Build.0 = Debug|Pocket PC 2003 (ARMV4)
   176    192   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Itanium.ActiveCfg = Debug|Itanium
   177    193   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Itanium.Build.0 = Debug|Itanium
   178         -		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
   179         -		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
          194  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
          195  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Mixed Platforms.Build.0 = Debug|x64
          196  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
          197  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
          198  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
   180    199   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Win32.ActiveCfg = Debug|Win32
   181    200   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|Win32.Build.0 = Debug|Win32
   182    201   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|x64.ActiveCfg = Debug|x64
   183    202   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Debug|x64.Build.0 = Debug|x64
   184    203   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Compact Framework.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
   185    204   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Compact Framework.Build.0 = Release|Pocket PC 2003 (ARMV4)
   186    205   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Itanium.ActiveCfg = Release|Itanium
   187    206   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Itanium.Build.0 = Release|Itanium
   188         -		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
   189         -		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Mixed Platforms.Build.0 = Release|Win32
          207  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Mixed Platforms.ActiveCfg = Release|x64
          208  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Mixed Platforms.Build.0 = Release|x64
          209  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
          210  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
          211  +		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
   190    212   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Win32.ActiveCfg = Release|Win32
   191    213   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|Win32.Build.0 = Release|Win32
   192    214   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|x64.ActiveCfg = Release|x64
   193    215   		{BCD6CA74-771B-49EE-9025-606CB839DA0B}.Release|x64.Build.0 = Release|x64
   194    216   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Compact Framework.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
   195    217   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Compact Framework.Build.0 = Debug|Pocket PC 2003 (ARMV4)
   196    218   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Itanium.ActiveCfg = Debug|Itanium
   197    219   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Itanium.Build.0 = Debug|Itanium
   198    220   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
   199    221   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Mixed Platforms.Build.0 = Debug|x64
          222  +		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
          223  +		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
          224  +		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
   200    225   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Win32.ActiveCfg = Debug|Win32
   201    226   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|Win32.Build.0 = Debug|Win32
   202    227   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|x64.ActiveCfg = Debug|x64
   203    228   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Debug|x64.Build.0 = Debug|x64
   204    229   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Compact Framework.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
   205    230   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Compact Framework.Build.0 = Release|Pocket PC 2003 (ARMV4)
   206    231   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Itanium.ActiveCfg = Release|Itanium
   207    232   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Itanium.Build.0 = Release|Itanium
   208    233   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Mixed Platforms.ActiveCfg = Release|x64
   209    234   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Mixed Platforms.Build.0 = Release|x64
          235  +		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
          236  +		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
          237  +		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
   210    238   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Win32.ActiveCfg = Release|Win32
   211    239   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|Win32.Build.0 = Release|Win32
   212    240   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|x64.ActiveCfg = Release|x64
   213    241   		{BCD4CA74-771B-49EE-9025-606CB839DA0B}.Release|x64.Build.0 = Release|x64
   214    242   	EndGlobalSection
   215    243   	GlobalSection(SolutionProperties) = preSolution
   216    244   		HideSolutionNode = FALSE
   217    245   	EndGlobalSection
   218    246   EndGlobal

Changes to SQLite.NET.suo.

cannot compute difference between binary files

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

    44     44   //      Major Version
    45     45   //      Minor Version 
    46     46   //      Build Number
    47     47   //      Revision
    48     48   //
    49     49   // You can specify all the values or you can default the Revision and Build Numbers 
    50     50   // by using the '*' as shown below:
    51         -[assembly: AssemblyVersion("1.0.46.0")]
           51  +[assembly: AssemblyVersion("1.0.47.0")]
    52     52   #if !PLATFORM_COMPACTFRAMEWORK
    53         -[assembly: AssemblyFileVersion("1.0.46.0")]
           53  +[assembly: AssemblyFileVersion("1.0.47.0")]
    54     54   #endif

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

   335    335         int len;
   336    336         IntPtr p = UnsafeNativeMethods.sqlite3_column_decltype_interop(stmt._sqlite_stmt, index, out len);
   337    337         nAffinity = ColumnAffinity(stmt, index);
   338    338   
   339    339         if (p != IntPtr.Zero) return UTF8ToString(p, len);
   340    340         else
   341    341         {
          342  +        string[] ar = stmt.TypeDefinitions;
          343  +        if (ar != null)
          344  +        {
          345  +          if (index < ar.Length && ar[index] != null)
          346  +            return ar[index];
          347  +        }
   342    348           return String.Empty;
   343         -        //string[] ar = stmt.TypeDefinitions;
   344         -        //if (ar != null)
   345         -        //{
   346         -        //  if (index < ar.Length && ar[index] != null)
   347         -        //    return ar[index];
   348         -        //}
   349    349   
   350    350           //switch (nAffinity)
   351    351           //{
   352    352           //  case TypeAffinity.Int64:
   353    353           //    return "BIGINT";
   354    354           //  case TypeAffinity.Double:
   355    355           //    return "DOUBLE";

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

   561    561   
   562    562         for(;;)
   563    563         {
   564    564           stmt = GetStatement(x);
   565    565           x++;
   566    566           if (stmt == null) break;
   567    567   
   568         -        _cnn._sql.Step(stmt);
   569         -        nAffected += _cnn._sql.Changes;
          568  +        while (_cnn._sql.Step(stmt)) ;
   570    569           _cnn._sql.Reset(stmt);
          570  +        nAffected += _cnn._sql.Changes;
   571    571         }
   572    572   
   573    573         return nAffected;
   574    574       }
   575    575   
   576    576       /// <summary>
   577    577       /// Execute the command and return the first column of the first row of the resultset

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

   497    497             cnn._transactionLevel = _transactionLevel;
   498    498             cnn._enlistment = _enlistment;
   499    499             cnn._connectionState = _connectionState;
   500    500             cnn._version = _version;
   501    501   
   502    502             cnn._enlistment._transaction._cnn = cnn;
   503    503             cnn._enlistment._disposeConnection = true;
          504  +          _sql = null;
          505  +          _enlistment = null;
   504    506           }
   505         -        else
          507  +#endif
          508  +        if (_sql != null)
   506    509           {
          510  +          if (_transactionLevel > 0)
          511  +            SQLiteTransaction.IssueRollback(this);
          512  +
   507    513             _sql.Close();
   508    514           }
   509         -        _enlistment = null;
   510         -#else
   511         -          _sql.Close();
   512         -#endif
   513    515           _sql = null;
   514    516           _transactionLevel = 0;
   515    517         }
   516    518         OnStateChange(ConnectionState.Closed);
   517    519       }
   518    520   
   519    521       /// <summary>

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

   351    351       /// <summary>
   352    352       /// Converts a SQLiteType to a .NET Type object
   353    353       /// </summary>
   354    354       /// <param name="t">The SQLiteType to convert</param>
   355    355       /// <returns>Returns a .NET Type object</returns>
   356    356       internal static Type SQLiteTypeToType(SQLiteType t)
   357    357       {
   358         -      if (t.Type != DbType.Object)
   359         -        return SQLiteConvert.DbTypeToType(t.Type);
   360         -
   361         -      return _typeaffinities[(int)t.Affinity];
          358  +      return SQLiteConvert.DbTypeToType(t.Type);
   362    359       }
   363    360   
   364         -    static Type[] _typeaffinities = {
   365         -      null,
   366         -      typeof(Int64),
   367         -      typeof(Double),
   368         -      typeof(string),
   369         -      typeof(byte[]),
   370         -      typeof(DBNull),
   371         -      null,
   372         -      null,
   373         -      null,
   374         -      null,
   375         -      typeof(DateTime),
   376         -      null,
   377         -    };
   378         -
   379    361       /// <summary>
   380    362       /// For a given intrinsic type, return a DbType
   381    363       /// </summary>
   382    364       /// <param name="typ">The native type to convert</param>
   383    365       /// <returns>The corresponding (closest match) DbType</returns>
   384    366       internal static DbType TypeToDbType(Type typ)
   385    367       {

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

   403    403       }
   404    404   
   405    405   #if !PLATFORM_COMPACTFRAMEWORK
   406    406       /// <summary>
   407    407       /// Using reflection, enumerate all assemblies in the current appdomain looking for classes that
   408    408       /// have a SQLiteFunctionAttribute attribute, and registering them accordingly.
   409    409       /// </summary>
          410  +    [Security.Permissions.FileIOPermission(Security.Permissions.SecurityAction.Assert, AllFiles = Security.Permissions.FileIOPermissionAccess.PathDiscovery)]
   410    411       static SQLiteFunction()
   411    412       {
   412    413         SQLiteFunctionAttribute at;
   413    414         System.Reflection.Assembly[] arAssemblies = System.AppDomain.CurrentDomain.GetAssemblies();
   414    415         int w = arAssemblies.Length;
   415    416         System.Reflection.AssemblyName sqlite = System.Reflection.Assembly.GetCallingAssembly().GetName();
   416    417   
................................................................................
   458    459                 at._instanceType = arTypes[x];
   459    460                 _registeredFunctions.Add(at);
   460    461               }
   461    462             }
   462    463           }
   463    464         }
   464    465       }
   465         -#else
          466  +#endif
   466    467       /// <summary>
   467    468       /// Manual method of registering a function.  The type must still have the SQLiteFunctionAttributes in order to work
   468    469       /// properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported.
   469    470       /// </summary>
   470    471       /// <param name="typ">The type of the function to register</param>
   471    472       public static void RegisterFunction(Type typ)
   472    473       {
................................................................................
   480    481           if (at != null)
   481    482           {
   482    483             at._instanceType = typ;
   483    484             _registeredFunctions.Add(at);
   484    485           }
   485    486         }
   486    487       }
   487         -#endif
   488    488   
   489    489       /// <summary>
   490    490       /// Called by SQLiteBase derived classes, this function binds all user-defined functions to a connection.
   491    491       /// It is done this way so that all user-defined functions will access the database using the same encoding scheme
   492    492       /// as the connection (UTF-8 or UTF-16).
   493    493       /// </summary>
   494    494       /// <remarks>

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

   116    116       /// <summary>
   117    117       /// Rolls back the active transaction.
   118    118       /// </summary>
   119    119       public override void Rollback()
   120    120       {
   121    121         IsValid(true);
   122    122   
   123         -      using (SQLiteCommand cmd = _cnn.CreateCommand())
          123  +      IssueRollback(_cnn);
          124  +
          125  +      _cnn._transactionLevel = 0;
          126  +      _cnn = null;
          127  +    }
          128  +
          129  +    internal static void IssueRollback(SQLiteConnection cnn)
          130  +    {
          131  +      using (SQLiteCommand cmd = cnn.CreateCommand())
   124    132         {
   125    133           cmd.CommandText = "ROLLBACK";
   126    134           cmd.ExecuteNonQuery();
   127    135         }
   128         -      _cnn._transactionLevel = 0;
   129         -      _cnn = null;
   130    136       }
   131    137   
   132    138       internal bool IsValid(bool throwError)
   133    139       {
   134    140         if (_cnn == null)
   135    141         {
   136    142           if (throwError == true) throw new ArgumentNullException("No connection associated with this transaction");

Changes to bin/CompactFramework/System.Data.SQLite.DLL.

cannot compute difference between binary files

Changes to bin/CompactFramework/System.Data.SQLite.lib.

cannot compute difference between binary files

Changes to bin/CompactFramework/testce.exe.

cannot compute difference between binary files

Changes to bin/Designer/SQLite.Designer.dll.

cannot compute difference between binary files

Changes to bin/Designer/install.exe.

cannot compute difference between binary files

Changes to bin/System.Data.SQLite.dll.

cannot compute difference between binary files

Changes to bin/System.Data.SQLite.lib.

cannot compute difference between binary files

Changes to bin/itanium/System.Data.SQLite.DLL.

cannot compute difference between binary files

Changes to bin/itanium/System.Data.SQLite.lib.

cannot compute difference between binary files

Changes to bin/test.exe.

cannot compute difference between binary files

Changes to bin/tools/mergebin.exe.

cannot compute difference between binary files

Changes to bin/x64/System.Data.SQLite.DLL.

cannot compute difference between binary files

Changes to bin/x64/System.Data.SQLite.lib.

cannot compute difference between binary files

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 2.0 SQLite Data Provider<br>
     8         -    Version 1.0.46.0 September 30, 2007<br>
     9         -    Using SQLite 3.4.2<br>
            8  +    Version 1.0.47.0 December 4, 2007<br>
            9  +    Using SQLite 3.5.3<br>
    10     10       Written by Robert Simpson (<a href="mailto:robert@blackcastlesoft.com">robert@blackcastlesoft.com</a>)<br>
    11     11       Released to the public domain, use at your own risk!<br>
    12     12       Official provider website:&nbsp; <a href="http://sqlite.phxsoftware.com">http://sqlite.phxsoftware.com</a><br />
    13     13       <br>
    14     14       The latest version can be downloaded <a href="http://sourceforge.net/projects/sqlite-dotnet2">
    15     15         here</a>
    16     16       <br>
................................................................................
    17     17       <br>
    18     18       <b></b>
    19     19       <h2>
    20     20         <b>Features:</b><br>
    21     21       </h2>
    22     22       <UL>
    23     23         <LI>
    24         -      Written from scratch on VS2005 specifically for ADO.NET 2.0, implementing all the
           24  +      Written from scratch on VS2005/2008 specifically for ADO.NET 2.0, implementing all the
    25     25         base classes and features recently introduced in the framework, including automatic
    26     26         transaction enlistment.<li>Supports the Full
    27     27           and Compact .NET Framework, as well as native C/C++ development.&nbsp; 100% binary
    28     28           compatible with the original sqlite3.dll.</li>
    29     29         <LI>
    30     30         On the Compact Framework, it is faster than the newly-introduced Sql Server 
    31     31         Mobile.  SQLite's installed size is a fraction of Sql Mobile's. It uses less memory at runtime, runs queries faster, and has a smaller database file size as well.
    32     32         <li>Encrypted database support.&nbsp; Encrypted databases are fully encrypted and
    33     33           support both binary and cleartext password types.</li>
    34     34         <LI>
    35         -      Visual Studio 2005 Design-Time Support, works with all versions of VS2005, including
           35  +      Visual Studio 2005/2008 Design-Time Support, works with all versions of VS2005/2008,
           36  +        including
    36     37         all Express Editions.&nbsp; You can add a SQLite 
    37     38         database to the Servers list, design queries with the Query Designer, 
    38     39         drag-and-drop tables onto a Typed DataSet, etc.
    39     40         <LI>
    40     41         Single file redistributable.&nbsp; The core sqlite3 codebase and the ADO.NET wrapper 
    41     42         are combined into one multi-module assembly.
    42     43         <LI>
................................................................................
    75     76       <strong></strong>
    76     77       <h2>
    77     78         <strong>Design-Time Support</strong></h2>
    78     79       <P>
    79     80         In Windows Explorer, navigate to the <STRONG>SQLite.NET\bin\Designer</STRONG>
    80     81           folder and execute the <STRONG>INSTALL.EXE</STRONG>
    81     82         file.&nbsp; The program will
    82         -      automatically detect what version(s) of Visual Studio 2005 are installed and allow
           83  +      automatically detect what version(s) of Visual Studio 2005/2008 are installed and allow
    83     84         you to selectively install and uninstall the designer for each edition.</P>
    84     85       <H2><STRONG>DbFactory Support (Non-Compact Framework)</STRONG></H2>
    85     86       In order to use the SQLiteFactory and have the SQLite data provider enumerated 
    86     87       in the DbProviderFactories methods, you must add the following segment into your application's app.config file:<br>
    87     88       <br>
    88     89       <pre>&lt;configuration&gt;
    89     90     &lt;system.data&gt;
................................................................................
   115    116       <p>
   116    117         The core sqlite engine is compiled directly from the unmodified source code available
   117    118         at the sqlite.org website.&nbsp; Several additional pieces are compiled on top of
   118    119         it to extend its functionality, but the core engine's source is not changed.</p>
   119    120       <p></p>
   120    121       <p>
   121    122         <b>Version History</b></p>
          123  +    <p><b>1.0.47.0 - December 4, 2007</b></p>
          124  +    <ul>
          125  +      <li>Code merge with SQLite 3.5.3</li>
          126  +      <li>Added installer support for Visual Studio 2008.&nbsp; Code is still using the
          127  +        VS2005 SDK so one or two bells and whistles are missing, but nothing significant.</li>
          128  +      <li>This is the last version that the FTS1 and FTS2 extensions will appear.&nbsp;
          129  +        Everyone should rebuild their fulltext indexes using the new FTS3 module.&nbsp;
          130  +        FTS1 and FTS2 suffer from a design flaw that could cause database corruption with
          131  +        certain vacuum operations.</li>
          132  +      <li>Fixed pooled connections so they rollback any outstanding transactions before
          133  +        going to the pool.&nbsp; </li>
          134  +      <li>Fixed the unintended breaking of the TYPES keyword, and mis-typing of untyped
          135  +        or indeterminate column types. </li>
          136  +      <li>Assert a FileIOPermission() requirement in the static SQLiteFunction constructor.
          137  +      </li>
          138  +      <li>The CE-only SQLiteFunction.RegisterFunction() is now available on the desktop
          139  +        platform for dynamic registration of functions.&nbsp; You must still close and re-open
          140  +        a connection in order for the new function to be seen by a connection.</li>
          141  +      <li>Fixed the "database is locked" errors by implementing behavioral changes in the
          142  +        interop.c file for SQLite.&nbsp; Closing a database force-finalizes any prepared
          143  +        statements on the database to ensure the connection is fully closed.&nbsp; This
          144  +        was rather tricky because the GC thread could still be finalizing statements itself.
          145  +        &nbsp;</li>
          146  +      <li>Modifed the mergebin utility to help circumvent a long-standing strong name verification
          147  +        bug in the Compact Framework.</li>
          148  +    </ul>
   122    149       <p><b>1.0.46.0 - September 30, 2007</b></p>
   123    150       <ul>
   124    151       <li>Fixed faulty logic in type discovery code when using SQLiteDataReader.GetValue().</li>
   125    152         <li>Fixed Connection.Open() bug when dealing with :memory: databases.</li>
   126    153         <li>Fixed SQLiteCommand.ExecuteScalar() to return a properly-typed value.</li>
   127    154         <li>Added support for SQLiteParameter.ResetDbType().</li>
   128    155         <li>Added test cases for rigid and flexible type testing.</li>

Changes to test/Program.cs.

    13     13       static void Main(string[] args)
    14     14       {
    15     15         DbProviderFactory fact;
    16     16         fact = DbProviderFactories.GetFactory("System.Data.SQLite");
    17     17   
    18     18         System.IO.File.Delete("test.db3");
    19     19   
    20         -      using (SQLiteConnection cnn = new SQLiteConnection())
           20  +      //SqlConnection cnn2 = new SqlConnection("Data Source=(local);Initial Catalog=iDiscover;Integrated Security=True");
           21  +      //cnn2.Open();
           22  +      //cnn2.BeginTransaction();
           23  +      //cnn2.Close();
           24  +
           25  +      //cnn2 = new SqlConnection("Data Source=(local);Initial Catalog=iDiscover;Integrated Security=True");
           26  +      //cnn2.Open();
           27  +      //cnn2.BeginTransaction();
           28  +      //cnn2.Close();
           29  +
           30  +      SQLiteConnection cnn = new SQLiteConnection();
    21     31         {
    22         -        cnn.ConnectionString = "Data Source=test.db3";
           32  +        cnn.ConnectionString = "Data Source=test.db3;Pooling=False;Password=yVXL39etehPX";
    23     33           cnn.Open();
           34  +
           35  +        //using (DbCommand cmd = cnn.CreateCommand())
           36  +        //{
           37  +        //  cmd.CommandText = "CREATE TABLE Foo(ID integer primary key, myvalue varchar(50))";
           38  +        //  cmd.ExecuteNonQuery();
           39  +
           40  +        //  cmd.CommandText = "CREATE TABLE Foo2(ID integer primary key, myvalue2)";
           41  +        //  cmd.ExecuteNonQuery();
           42  +
           43  +        //  cmd.CommandText = "create view myview as select a.id, a.myvalue, b.myvalue2 from foo as a inner join foo2 as b on a.id = b.id";
           44  +        //  cmd.ExecuteNonQuery();
           45  +
           46  +        //  cmd.CommandText = "select * from myview";
           47  +        //  using (DbDataReader reader = cmd.ExecuteReader())
           48  +        //  {
           49  +        //    DataTable tbl = reader.GetSchemaTable();
           50  +
           51  +        //    Type t = reader.GetFieldType(0);
           52  +        //    t = reader.GetFieldType(1);
           53  +        //    t = reader.GetFieldType(2);
           54  +        //  }
           55  +        //}
           56  +
           57  +        //cnn.BeginTransaction();
           58  +        //cnn.Close();
           59  +
           60  +        //cnn = new SQLiteConnection("Data Source=test.db3;Pooling=True");
           61  +        //cnn.Open();
           62  +        //cnn.BeginTransaction();
    24     63   
    25     64           TestCases.Run(fact, cnn);
    26     65         }
    27     66   
    28     67         Console.ReadKey();
    29     68       }
    30     69   

Changes to test/TestCases.cs.

   328    328         }
   329    329       }
   330    330   
   331    331       internal static void FullTextTest(DbConnection cnn)
   332    332       {
   333    333         using (DbCommand cmd = cnn.CreateCommand())
   334    334         {
   335         -        cmd.CommandText = "CREATE VIRTUAL TABLE FullText USING FTS2(name, ingredients);";
          335  +        cmd.CommandText = "CREATE VIRTUAL TABLE FullText USING FTS3(name, ingredients);";
   336    336           cmd.ExecuteNonQuery();
   337    337   
   338    338           string[] names = { "broccoli stew", "pumpkin stew", "broccoli pie", "pumpkin pie" };
   339    339           string[] ingredients = { "broccoli peppers cheese tomatoes", "pumpkin onions garlic celery", "broccoli cheese onions flour", "pumpkin sugar flour butter" };
   340    340           int n;
   341    341   
   342    342           cmd.CommandText = "insert into FullText (name, ingredients) values (@name, @ingredient);";

Changes to testce/Program.cs.

    25     25         {
    26     26         }
    27     27   
    28     28         using (cnn = new SQLiteConnection())
    29     29         {
    30     30           TestCases tests = new TestCases();
    31     31   
    32         -        cnn.ConnectionString = "Data Source=test.db3";
           32  +        cnn.ConnectionString = "Data Source=test.db3;Password=yVXL39etehPX";
    33     33           cnn.Open();
    34     34           tests.Run(cnn);
    35     35   
    36     36           System.Windows.Forms.Application.Run(tests.frm);
    37     37         }
    38     38       }
    39     39     }
    40     40   }

Changes to testce/TestCases.cs.

   292    292         }
   293    293       }
   294    294   
   295    295       internal static void FullTextTest(DbConnection cnn)
   296    296       {
   297    297         using (DbCommand cmd = cnn.CreateCommand())
   298    298         {
   299         -        cmd.CommandText = "CREATE VIRTUAL TABLE FullText USING FTS2(name, ingredients);";
          299  +        cmd.CommandText = "CREATE VIRTUAL TABLE FullText USING FTS1(name, ingredients);";
   300    300           cmd.ExecuteNonQuery();
   301    301   
   302    302           string[] names = { "broccoli stew", "pumpkin stew", "broccoli pie", "pumpkin pie" };
   303    303           string[] ingredients = { "broccoli peppers cheese tomatoes", "pumpkin onions garlic celery", "broccoli cheese onions flour", "pumpkin sugar flour butter" };
   304    304           int n;
   305    305   
   306    306           cmd.CommandText = "insert into FullText (name, ingredients) values (@name, @ingredient);";

Changes to testce/testce.csproj.

    51     51       <Reference Include="mscorlib" />
    52     52       <Reference Include="System">
    53     53         <Private>False</Private>
    54     54       </Reference>
    55     55       <Reference Include="System.Data">
    56     56         <Private>False</Private>
    57     57       </Reference>
    58         -    <Reference Include="System.Data.SQLite, Version=1.0.36.0, Culture=neutral, PublicKeyToken=1fdb50b1b62b4c84, processorArchitecture=x86">
    59         -      <SpecificVersion>False</SpecificVersion>
    60         -    </Reference>
           58  +    <Reference Include="System.Data.SQLite, Version=1.0.47.0, Culture=neutral, PublicKeyToken=1fdb50b1b62b4c84, processorArchitecture=x86" />
    61     59       <Reference Include="System.Drawing">
    62     60         <Private>False</Private>
    63     61       </Reference>
    64     62       <Reference Include="System.Windows.Forms">
    65     63         <Private>False</Private>
    66     64       </Reference>
    67     65       <Reference Include="System.Xml">

Changes to tools/install/InstallDesigner.cs.

    14     14     using System.Text;
    15     15     using System.Windows.Forms;
    16     16     using Microsoft.Win32;
    17     17     using System.IO;
    18     18     using System.GACManagedAccess;
    19     19     using System.Xml;
    20     20     using System.Diagnostics;
           21  +  using System.Collections.Generic;
    21     22   
    22     23     public partial class InstallDesigner : Form
    23     24     {
    24     25       private static Guid standardDataProviderGuid = new Guid("{0EBAAB6E-CA80-4b4a-8DDF-CBE6BF058C70}");
    25     26       private static Guid standardDataSourcesGuid = new Guid("{0EBAAB6E-CA80-4b4a-8DDF-CBE6BF058C71}");
    26     27       private static Guid standardCFDataSourcesGuid = new Guid("{0EBAAB6E-CA80-4b4a-8DDF-CBE6BF058C72}");
    27     28       private static Guid oledbDataProviderGuid = new Guid("{7F041D59-D76A-44ed-9AA2-FBF6B0548B80}");
    28     29       private static Guid oledbAltDataProviderGuid = new Guid("{7F041D59-D76A-44ed-9AA2-FBF6B0548B81}");
    29     30       private static Guid jetDataSourcesGuid = new Guid("{466CE797-67A4-4495-B75C-A3FD282E7FC3}");
    30     31       private static Guid jetAltDataSourcesGuid = new Guid("{466CE797-67A4-4495-B75C-A3FD282E7FC4}");
    31     32       private static string[] compactFrameworks = new string[] { "PocketPC", "SmartPhone", "WindowsCE" };
    32     33   
    33     34       internal bool _remove = false;
    34         -    private string _regRoot = "8.0";
           35  +    //private string _regRoot = "8.0";
    35     36       private System.Reflection.Assembly _assm = null;
    36     37       private bool _ignoreChecks = true;
    37     38       private string _assmLocation;
           39  +
           40  +    private Dictionary<string, string> _regRoots = new Dictionary<string,string>();
    38     41   
    39     42       string SQLiteLocation
    40     43       {
    41     44         get
    42     45         {
    43     46           System.Reflection.Assembly assm = SQLite;
    44     47           return _assmLocation;
................................................................................
    92     95           _assm = value;
    93     96         }
    94     97       }
    95     98   
    96     99       public InstallDesigner()
    97    100       {
    98    101         string[] args = Environment.GetCommandLineArgs();
          102  +
          103  +      _regRoots.Add("8.0", "2005");
          104  +      _regRoots.Add("9.0", "2008");
    99    105   
   100    106         for (int n = 0; n < args.Length; n++)
   101    107         {
   102    108           if (String.Compare(args[n], "/regroot", true) == 0 ||
   103    109             String.Compare(args[n], "-regroot", true) == 0)
   104    110           {
   105         -          _regRoot = args[n + 1];
          111  +          _regRoots.Add(args[n + 1], args[n + 1]);
   106    112             break;
   107    113           }
   108    114           else if (String.Compare(args[n], "/remove", true) == 0 ||
   109    115             String.Compare(args[n], "-remove", true) == 0)
   110    116           {
   111    117             _remove = true;
   112    118           }
   113    119         }
   114    120   
   115    121         InitializeComponent();
   116    122   
   117    123         RegistryKey key;
   118    124   
   119         -      using (key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft"))
          125  +      foreach (KeyValuePair<string, string> pair in _regRoots)
   120    126         {
   121         -        AddItem(key, "VisualStudio", "Visual Studio (full editions)", standardDataProviderGuid, null);
   122         -        AddItem(key, "VWDExpress", "Visual Web Developer Express Edition", standardDataProviderGuid, null);
          127  +        using (key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft"))
          128  +        {
          129  +          AddItem(key, pair.Key, "VisualStudio", String.Format("Visual Studio {0} (full editions)", pair.Value), standardDataProviderGuid, null);
          130  +          AddItem(key, pair.Key, "VWDExpress", String.Format("Visual Web Developer Express {0} Edition", pair.Value), standardDataProviderGuid, null);
   123    131   
   124         -        warningPanel.Visible = (AddItem(key, "VCSExpress", "Visual C# Express Edition *", oledbDataProviderGuid, oledbAltDataProviderGuid)
   125         -         | AddItem(key, "VCExpress", "Visual C++ Express Edition *", oledbDataProviderGuid, oledbAltDataProviderGuid)
   126         -         | AddItem(key, "VBExpress", "Visual Basic Express Edition *", oledbDataProviderGuid, oledbAltDataProviderGuid)
   127         -         | AddItem(key, "VJSExpress", "Visual J# Express Edition *", oledbDataProviderGuid, oledbAltDataProviderGuid));
          132  +          warningPanel.Visible = (AddItem(key, pair.Key, "VCSExpress", String.Format("Visual C# Express {0} Edition *", pair.Value), oledbDataProviderGuid, oledbAltDataProviderGuid)
          133  +           | AddItem(key, pair.Key, "VCExpress", String.Format("Visual C++ Express {0} Edition *", pair.Value), oledbDataProviderGuid, oledbAltDataProviderGuid)
          134  +           | AddItem(key, pair.Key, "VBExpress", String.Format("Visual Basic Express {0} Edition *", pair.Value), oledbDataProviderGuid, oledbAltDataProviderGuid)
          135  +           | AddItem(key, pair.Key, "VJSExpress", String.Format("Visual J# Express {0} Edition *", pair.Value), oledbDataProviderGuid, oledbAltDataProviderGuid));
          136  +        }
          137  +        GlobalAddRemove(pair.Key);
   128    138         }
   129    139   
   130         -      GlobalAddRemove();
   131         -
   132    140         _ignoreChecks = false;
   133    141       }
   134    142   
   135         -    private bool AddItem(RegistryKey parent, string subkeyname, string itemName, Guid lookFor, object isChecked)
          143  +    private bool AddItem(RegistryKey parent, string version, string subkeyname, string itemName, Guid lookFor, object isChecked)
   136    144       {
   137    145         RegistryKey subkey;
   138    146   
   139    147         try
   140    148         {
   141         -        using (subkey = parent.OpenSubKey(String.Format("{0}\\{1}", subkeyname, _regRoot)))
          149  +        using (subkey = parent.OpenSubKey(String.Format("{0}\\{1}", subkeyname, version)))
   142    150           {
   143    151             ListViewItem item = new ListViewItem(itemName);
   144    152   
   145         -          item.Tag = subkeyname;
          153  +          item.Tag = new string[] { subkeyname, version };
   146    154   
   147    155             using (RegistryKey subsubkey = subkey.OpenSubKey("DataProviders"))
   148    156             {
   149    157               if (subsubkey == null)
   150    158                 throw new ArgumentException("Edition not installed");
   151    159             }
   152    160   
................................................................................
   183    191         this.Close();
   184    192       }
   185    193   
   186    194       private void installList_ItemChecked(object sender, ItemCheckedEventArgs e)
   187    195       {
   188    196         if (_ignoreChecks) return;
   189    197   
          198  +      string[] arr = (string[])e.Item.Tag;
          199  +
   190    200         DoInstallUninstall(e.Item);
   191    201   
   192         -      GlobalAddRemove();
          202  +      GlobalAddRemove(arr[1]);
   193    203       }
   194    204   
   195    205       private void DoInstallUninstall(ListViewItem Item)
   196    206       {
          207  +      string[] arr = (string[])Item.Tag;
   197    208         if (Item.Checked == false)
   198    209         {
   199    210           if (Item.Text.IndexOf('*') > -1)
   200         -          RestoreJet((string)Item.Tag);
          211  +          RestoreJet(arr[0], arr[1]);
   201    212           else
   202         -          Uninstall((string)Item.Tag, standardDataProviderGuid, standardDataSourcesGuid);
          213  +          Uninstall(arr[0], arr[1], standardDataProviderGuid, standardDataSourcesGuid);
   203    214         }
   204    215         else
   205    216         {
   206    217           if (Item.Text.IndexOf('*') > -1)
   207         -          ReplaceJet((string)Item.Tag);
          218  +          ReplaceJet(arr[0], arr[1]);
   208    219           else
   209         -          Install((string)Item.Tag, standardDataProviderGuid, standardDataSourcesGuid);
          220  +          Install(arr[0], arr[1], standardDataProviderGuid, standardDataSourcesGuid);
   210    221         }
   211    222       }
   212    223   
   213         -    private void GlobalAddRemove()
          224  +    private void GlobalAddRemove(string version)
   214    225       {
   215    226         bool install = false;
   216    227   //      bool installed;
   217    228   
   218    229         //// Check to see if SQLite is installed in the GAC
   219    230         //try
   220    231         //{
................................................................................
   448    459           }
   449    460         }
   450    461         catch
   451    462         {
   452    463           throw;
   453    464         }
   454    465   
   455         -      FixXmlLibPaths(install);
          466  +      FixXmlLibPaths(install, version);
   456    467       }
   457    468   
   458         -    private void ReplaceJet(string keyname)
          469  +    private void ReplaceJet(string keyname, string version)
   459    470       {
   460         -      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, _regRoot), true))
          471  +      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, version), true))
   461    472         {
   462    473           using (RegistryKey source = key.OpenSubKey(oledbDataProviderGuid.ToString("B")))
   463    474           {
   464    475             using (RegistryKey dest = key.CreateSubKey(oledbAltDataProviderGuid.ToString("B")))
   465    476             {
   466    477               if (source == null) return;
   467    478               CopyKey(source, dest);
   468    479             }
   469    480           }
   470    481           key.DeleteSubKeyTree(oledbDataProviderGuid.ToString("B"));
   471    482         }
   472    483   
   473         -      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataSources", keyname, _regRoot), true))
          484  +      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataSources", keyname, version), true))
   474    485         {
   475    486           using (RegistryKey source = key.OpenSubKey(jetDataSourcesGuid.ToString("B")))
   476    487           {
   477    488             using (RegistryKey dest = key.CreateSubKey(jetAltDataSourcesGuid.ToString("B")))
   478    489             {
   479    490               if (source == null) return;
   480    491               CopyKey(source, dest);
   481    492             }
   482    493           }
   483    494           key.DeleteSubKeyTree(jetDataSourcesGuid.ToString("B"));
   484    495         }
   485    496   
   486         -      Install(keyname, oledbDataProviderGuid, jetDataSourcesGuid);
          497  +      Install(keyname, version, oledbDataProviderGuid, jetDataSourcesGuid);
   487    498       }
   488    499   
   489         -    private void RestoreJet(string keyname)
          500  +    private void RestoreJet(string keyname, string version)
   490    501       {
   491         -      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, _regRoot), true))
          502  +      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, version), true))
   492    503         {
   493    504           using (RegistryKey source = key.OpenSubKey(oledbAltDataProviderGuid.ToString("B")))
   494    505           {
   495    506             if (source == null) return;
   496    507           }
   497    508         }
   498    509   
   499         -      Uninstall(keyname, oledbDataProviderGuid, jetDataSourcesGuid);
          510  +      Uninstall(keyname, version, oledbDataProviderGuid, jetDataSourcesGuid);
   500    511   
   501         -      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, _regRoot), true))
          512  +      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, version), true))
   502    513         {
   503    514           using (RegistryKey source = key.OpenSubKey(oledbAltDataProviderGuid.ToString("B")))
   504    515           {
   505    516             if (source != null)
   506    517             {
   507    518               using (RegistryKey dest = key.CreateSubKey(oledbDataProviderGuid.ToString("B")))
   508    519               {
................................................................................
   509    520                 CopyKey(source, dest);
   510    521               }
   511    522               key.DeleteSubKeyTree(oledbAltDataProviderGuid.ToString("B"));
   512    523             }
   513    524           }
   514    525         }
   515    526   
   516         -      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataSources", keyname, _regRoot), true))
          527  +      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataSources", keyname, version), true))
   517    528         {
   518    529           using (RegistryKey source = key.OpenSubKey(jetAltDataSourcesGuid.ToString("B")))
   519    530           {
   520    531             if (source != null)
   521    532             {
   522    533               using (RegistryKey dest = key.CreateSubKey(jetDataSourcesGuid.ToString("B")))
   523    534               {
................................................................................
   525    536               }
   526    537               key.DeleteSubKeyTree(jetAltDataSourcesGuid.ToString("B"));
   527    538             }
   528    539           }
   529    540         }
   530    541       }
   531    542   
   532         -    private void Install(string keyname, Guid provider, Guid source)
          543  +    private void Install(string keyname, string version, Guid provider, Guid source)
   533    544       {
   534    545         bool usePackage = (keyname == "VisualStudio");
   535    546   
   536         -      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, _regRoot), true))
          547  +      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, version), true))
   537    548         {
   538    549           using (RegistryKey subkey = key.CreateSubKey(provider.ToString("B"), RegistryKeyPermissionCheck.ReadWriteSubTree))
   539    550           {
   540    551             subkey.SetValue(null, ".NET Framework Data Provider for SQLite");
   541    552             subkey.SetValue("InvariantName", "System.Data.SQLite");
   542    553             subkey.SetValue("Technology", "{77AB9A9D-78B9-4ba7-91AC-873F5338F1D2}");
   543    554             subkey.SetValue("CodeBase", Path.GetFullPath("SQLite.Designer.DLL"));
................................................................................
   566    577                 if (!usePackage)
   567    578                   subsubsubkey.SetValue(null, "SQLite.Designer.SQLiteDataConnectionSupport");
   568    579               }
   569    580             }
   570    581           }
   571    582         }
   572    583   
   573         -      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataSources", keyname, _regRoot), true))
          584  +      using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataSources", keyname, version), true))
   574    585         {
   575    586           using (RegistryKey subkey = key.CreateSubKey(source.ToString("B"), RegistryKeyPermissionCheck.ReadWriteSubTree))
   576    587           {
   577    588             subkey.SetValue(null, "SQLite Database File");
   578    589             using (RegistryKey subsubkey = subkey.CreateSubKey("SupportingProviders", RegistryKeyPermissionCheck.ReadWriteSubTree))
   579    590             {
   580    591               subsubkey.CreateSubKey(provider.ToString("B")).Close();
................................................................................
   614    625               }
   615    626             }
   616    627           }
   617    628         }
   618    629   
   619    630         if (usePackage)
   620    631         {
   621         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Packages", keyname, _regRoot), true))
          632  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Packages", keyname, version), true))
   622    633           {
   623    634             using (RegistryKey subkey = key.CreateSubKey("{DCBE6C8D-0E57-4099-A183-98FF74C64D9C}", RegistryKeyPermissionCheck.ReadWriteSubTree))
   624    635             {
   625    636               subkey.SetValue(null, "SQLite Designer Package");
   626    637               subkey.SetValue("Class", "SQLite.Designer.SQLitePackage");
   627    638               subkey.SetValue("CodeBase", Path.GetFullPath("SQLite.Designer.DLL"));
   628    639               subkey.SetValue("ID", 400);
................................................................................
   630    641               subkey.SetValue("CompanyName", "Black Castle Software, LLC");
   631    642               subkey.SetValue("MinEdition", "standard");
   632    643               subkey.SetValue("ProductName", "SQLite Data Provider");
   633    644               subkey.SetValue("ProductVersion", "1.0");
   634    645             }
   635    646           }
   636    647   
   637         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Menus", keyname, _regRoot), true))
          648  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Menus", keyname, version), true))
   638    649           {
   639    650             key.SetValue("{DCBE6C8D-0E57-4099-A183-98FF74C64D9C}", ", 1000, 1");
   640    651           }
   641    652   
   642         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Services", keyname, _regRoot), true))
          653  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Services", keyname, version), true))
   643    654           {
   644    655             using (RegistryKey subkey = key.CreateSubKey("{DCBE6C8D-0E57-4099-A183-98FF74C64D9D}", RegistryKeyPermissionCheck.ReadWriteSubTree))
   645    656             {
   646    657               subkey.SetValue(null, "{DCBE6C8D-0E57-4099-A183-98FF74C64D9C}");
   647    658               subkey.SetValue("Name", "SQLite Provider Object Factory");
   648    659             }
   649    660           }
   650    661         }
   651    662       }
   652    663   
   653         -    private XmlDocument GetConfig(string keyname, out string xmlFileName)
          664  +    private XmlDocument GetConfig(string keyname, string version, out string xmlFileName)
   654    665       {
   655    666         try
   656    667         {
   657         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}", keyname, _regRoot), true))
          668  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}", keyname, version), true))
   658    669           {
   659    670             xmlFileName = (string)key.GetValue("InstallDir");
   660    671             if (String.Compare(keyname, "VisualStudio", true) == 0)
   661    672               xmlFileName += "devenv.exe.config";
   662    673             else
   663    674               xmlFileName += keyname + ".exe.config";
   664    675           }
................................................................................
   672    683         catch
   673    684         {
   674    685           xmlFileName = null;
   675    686         }
   676    687         return null;
   677    688       }
   678    689   
   679         -    private void Uninstall(string keyname, Guid provider, Guid source)
          690  +    private void Uninstall(string keyname, string version, Guid provider, Guid source)
   680    691       {
   681    692         try
   682    693         {
   683         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, _regRoot), true))
          694  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataProviders", keyname, version), true))
   684    695           {
   685    696             if (key != null) key.DeleteSubKeyTree(provider.ToString("B"));
   686    697           }
   687         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataSources", keyname, _regRoot), true))
          698  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\DataSources", keyname, version), true))
   688    699           {
   689    700             if (key != null) key.DeleteSubKeyTree(source.ToString("B"));
   690    701           }
   691    702   
   692         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Packages", keyname, _regRoot), true))
          703  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Packages", keyname, version), true))
   693    704           {
   694    705             if (key != null) key.DeleteSubKeyTree("{DCBE6C8D-0E57-4099-A183-98FF74C64D9C}");
   695    706           }
   696    707   
   697         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Services", keyname, _regRoot), true))
          708  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Services", keyname, version), true))
   698    709           {
   699    710             if (key != null) key.DeleteSubKeyTree("{DCBE6C8D-0E57-4099-A183-98FF74C64D9D}");
   700    711           }
   701    712   
   702         -        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Menus", keyname, _regRoot), true))
          713  +        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\{0}\\{1}\\Menus", keyname, version), true))
   703    714           {
   704    715             key.DeleteValue("{DCBE6C8D-0E57-4099-A183-98FF74C64D9C}");
   705    716           }
   706    717   
   707    718           //using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", true))
   708    719           //{
   709    720           //  string libpath = (string)key.GetValue("LIB");
................................................................................
   715    726         }
   716    727         catch
   717    728         {
   718    729         }
   719    730   
   720    731         // Remove factory support from the development environment config file
   721    732         string xmlFileName;
   722         -      XmlDocument xmlDoc = GetConfig(keyname, out xmlFileName);
          733  +      XmlDocument xmlDoc = GetConfig(keyname, version, out xmlFileName);
   723    734   
   724    735         if (xmlDoc == null) return;
   725    736   
   726    737         XmlNode xmlNode = xmlDoc.SelectSingleNode("configuration/system.data/DbProviderFactories/add[@invariant=\"System.Data.SQLite\"]");
   727    738         if (xmlNode != null)
   728    739           xmlNode.ParentNode.RemoveChild(xmlNode);
   729    740   
................................................................................
   754    765         string[] values = keySource.GetValueNames();
   755    766         for (int n = 0; n < values.Length; n++)
   756    767         {
   757    768           keyDest.SetValue(values[n], keySource.GetValue(values[n]), keySource.GetValueKind(values[n]));
   758    769         }
   759    770       }
   760    771   
   761         -    private void FixXmlLibPaths(bool install)
          772  +    private void FixXmlLibPaths(bool install, string version)
   762    773       {
   763    774         string installDir = null;
   764    775         RegistryKey key = null;
   765    776   
   766    777         try
   767    778         {
   768         -        key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\VisualStudio\\8.0");
          779  +        key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\VisualStudio\\{0}", version));
   769    780           if (key != null)
   770    781           {
   771    782             try
   772    783             {
   773    784               installDir = (string)key.GetValue("InstallDir");
   774    785             }
   775    786             catch
................................................................................
   783    794                 key = null;
   784    795               }
   785    796             }
   786    797           }
   787    798   
   788    799           if (key == null)
   789    800           {
   790         -          key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\VCExpress\\8.0");
          801  +          key = Registry.LocalMachine.OpenSubKey(String.Format("Software\\Microsoft\\VCExpress\\{0}", version));
   791    802             if (key == null) return;
   792    803           }
   793    804   
   794    805           try
   795    806           {
   796    807             installDir = (string)key.GetValue("InstallDir");
   797    808           }

Changes to tools/install/Resources/System.Data.SQLite.dll.

cannot compute difference between binary files

Changes to tools/mergebin/mergebin.cpp.

     7      7   
     8      8   #include "stdafx.h"
     9      9   #include "MetaData.h"
    10     10   #include "MetaDataTables.h"
    11     11   #include "TableData.h"
    12     12   
    13     13   void DumpCLRInfo(LPCTSTR pszFile);
    14         -void MergeModules(LPCTSTR pszAssembly, LPCTSTR pszNative, LPCTSTR pszSection);
           14  +void MergeModules(LPCTSTR pszAssembly, LPCTSTR pszNative, LPCTSTR pszSection, DWORD dwAdjust);
    15     15   void DumpCLRPragma(LPCTSTR pszAssembly, LPCTSTR pszSection);
    16     16   
    17     17   typedef struct EXTRA_STUFF
    18     18   {
    19     19     DWORD dwNativeEntryPoint;
    20     20   } EXTRA_STUFF, *LPEXTRA_STUFF;
    21     21   
................................................................................
    29     29   /I:assembly            Returns the number of bytes required\n \
    30     30                          to consume the assembly\n \
    31     31   /S:sectionname         The name of the section in the nativedll\n \
    32     32                          to insert the CLR data\n \
    33     33   /P:assembly            Outputs the C++ pragma code that can be used\n \
    34     34                          as additional input to a C++ app to reserve\n \
    35     35                          a section block large enough for the managed code.\n \
    36         -\n \
           36  +/A:#                   adjust .data segment virtual size to the specified\n \
           37  +                       amount for Windows CE fixing up.\n \
           38  +                       \n \
    37     39   The native DLL must have an unused section in it, into which the\n \
    38     40   .NET assembly will be inserted.  You can do this with the following code:\n \
    39     41     #pragma data_seg(\".clr\")\n \
    40     42     #pragma comment(linker, \"/SECTION:.clr,ER\")\n \
    41     43      char __ph[92316] = {0}; // 92316 is the number of bytes to reserve\n \
    42     44     #pragma data_seg()\n \
    43     45   You would then specify /SECTION:.CLR in the command-line for the location to\n \
................................................................................
    52     54       return 0;
    53     55     }
    54     56   
    55     57     LPTSTR pszAssembly = NULL;
    56     58     LPTSTR pszNative = NULL;
    57     59     LPTSTR pszSection = NULL;
    58     60     BOOL bDoPragma = FALSE;
           61  +  DWORD dwAdjust = 0;
    59     62   
    60     63     for (int n = 1; n < argc; n++)
    61     64     {
    62     65       if (argv[n][0] != '-' && argv[n][0] != '/')
    63     66       {
    64     67         if (pszAssembly == NULL)
    65     68           pszAssembly = argv[n];
................................................................................
   101    104         pszSection = &argv[n][3];
   102    105         if (argv[n][2] != ':' || lstrlen(pszSection) == 0)
   103    106         {
   104    107           _tprintf(_T("/S requires a section name\n"));
   105    108           return 0;
   106    109         }
   107    110         break;
          111  +    case 'A':
          112  +    case 'a':
          113  +      if (argv[n][2] != ':')
          114  +      {
          115  +        _tprintf(_T("A parameter requires a numeric value\n"));
          116  +        return 0;
          117  +      }
          118  +      dwAdjust = _ttol(&argv[n][3]);
          119  +      break;
   108    120       }
   109    121     }
   110    122   
   111    123     if (pszAssembly && pszNative && pszSection && !bDoPragma)
   112         -    MergeModules(pszAssembly, pszNative, pszSection);
          124  +    MergeModules(pszAssembly, pszNative, pszSection, dwAdjust);
   113    125   
   114    126     if (pszAssembly && bDoPragma)
   115    127       DumpCLRPragma(pszAssembly, pszSection);
   116    128   
   117    129     return 0;
   118    130   }
   119    131   
................................................................................
   200    212       _tprintf(_T("// Unable to retrieve .NET assembly information for file %s\n"), pszAssembly);
   201    213       return;
   202    214     }
   203    215   
   204    216     _tprintf(_T("// This code was automatically generated from assembly\n\
   205    217   // %s\n\n\
   206    218   #include <windef.h>\n\n\
   207         -#pragma data_seg(\"%s\")\n\
          219  +#pragma data_seg(push,clrseg,\"%s\")\n\
   208    220   #pragma comment(linker, \"/SECTION:%s,ER\")\n\
   209    221     char __ph[%d] = {0}; // The number of bytes to reserve\n\
   210         -#pragma data_seg()\n\n\
          222  +#pragma data_seg(pop,clrseg)\n\n\
   211    223   typedef BOOL (WINAPI *DLLMAIN)(HANDLE, DWORD, LPVOID);\n\
   212    224   typedef struct EXTRA_STUFF\n\
   213    225   {\n\
   214    226     DWORD dwNativeEntryPoint;\n\
   215    227   } EXTRA_STUFF, *LPEXTRA_STUFF;\n\n\
   216    228   __declspec(dllexport) BOOL WINAPI _CorDllMainStub(HANDLE hModule, DWORD dwReason, LPVOID pvReserved)\n\
   217    229   {\n\
................................................................................
   295    307         }
   296    308       }
   297    309     }
   298    310     return 0;
   299    311   }
   300    312   
   301    313   // Merges a pure .NET assembly with a native DLL, inserting it into the specified section
   302         -void MergeModules(LPCTSTR pszAssembly, LPCTSTR pszNative, LPCTSTR pszSection)
          314  +void MergeModules(LPCTSTR pszAssembly, LPCTSTR pszNative, LPCTSTR pszSection, DWORD dwAdjust)
   303    315   {
   304    316     CPEFile peFile;
   305    317     CPEFile peDest;
   306    318     HRESULT hr;
   307    319     DWORD dwMinRVA;
   308    320     DWORD dwMaxRVA;
   309    321     DWORD dwDestRVA;
................................................................................
   482    494       if (pNT->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI && (pCor->Flags & 0x08))
   483    495       {
   484    496         PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(pNT);
   485    497         for (UINT i=0; i < pNT->FileHeader.NumberOfSections; i++, section++)
   486    498         {
   487    499           if (section->SizeOfRawData < section->Misc.VirtualSize)
   488    500           {
   489         -          _tprintf(_T("\nWARNING: %s section has a RawData size of %X and a VirtualSize of %X, strong named image may not run on Windows CE\n"), section->Name, section->SizeOfRawData, section->Misc.VirtualSize);
          501  +          if (_tcscmp((LPCSTR)section->Name, _T(".data")) == 0 && dwAdjust > 0)
          502  +          {
          503  +            _tprintf(_T("\nWARNING: %s section has a RawData size of %d, less than its VirtualSize of %d, adjusting VirtualSize to %d\n"), section->Name, section->SizeOfRawData, section->Misc.VirtualSize, dwAdjust);
          504  +            section->Misc.VirtualSize = dwAdjust;
          505  +          }
          506  +          else
          507  +          {
          508  +            _tprintf(_T("\nWARNING: %s section has a RawData size of %d and a VirtualSize of %d, strong named image may not run on Windows CE\n"), section->Name, section->SizeOfRawData, section->Misc.VirtualSize);
          509  +          }
   490    510           }
   491    511         }
   492    512       }
   493    513     }
   494    514   
   495    515     if (pCor->Flags & 0x08)
   496    516       _tprintf(_T("\nWARNING: %s must be re-signed before it can be used!\n"), pszNative);
   497    517   
   498    518     _tprintf(_T("Success!\n"));
   499    519   }

Changes to tools/mergebin/stdafx.h.

     7      7   
     8      8   
     9      9   #define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
    10     10   #define _WIN32_WINNT 0x0400
    11     11   
    12     12   #include <windows.h>
    13     13   #include <stdio.h>
           14  +#include <stdlib.h>
    14     15   #include <tchar.h>
    15         -
    16     16   // TODO: reference additional headers your program requires here

Changes to tools/setup/exe/setup/setup.rc.

    53     53   
    54     54   /////////////////////////////////////////////////////////////////////////////
    55     55   //
    56     56   // Version
    57     57   //
    58     58   
    59     59   VS_VERSION_INFO VERSIONINFO
    60         - FILEVERSION 1,0,46,0
           60  + FILEVERSION 1,0,47,0
    61     61    PRODUCTVERSION 1,0,0,0
    62     62    FILEFLAGSMASK 0x17L
    63     63   #ifdef _DEBUG
    64     64    FILEFLAGS 0x1L
    65     65   #else
    66     66    FILEFLAGS 0x0L
    67     67   #endif
................................................................................
    71     71   BEGIN
    72     72       BLOCK "StringFileInfo"
    73     73       BEGIN
    74     74           BLOCK "040904b0"
    75     75           BEGIN
    76     76               VALUE "Comments", "http://sqlite.phxsoftware.com"
    77     77               VALUE "FileDescription", "SQLite ADO.NET 2.0 Setup"
    78         -            VALUE "FileVersion", "1.0.45.1"
           78  +            VALUE "FileVersion", "1.0.47.0"
    79     79               VALUE "InternalName", "setup"
    80     80               VALUE "LegalCopyright", "Released to the public domain"
    81     81               VALUE "OriginalFilename", "setup.exe"
    82     82               VALUE "ProductName", "System.Data.SQLite"
    83     83               VALUE "ProductVersion", "1.0"
    84     84           END
    85     85       END

Changes to tools/setup/sqlite_setup.suo.

cannot compute difference between binary files

Changes to tools/setup/sqlite_setup.vdproj.

   618    618               "IsDependency" = "11:FALSE"
   619    619               "IsolateTo" = "8:"
   620    620               }
   621    621               "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2C7EDFF06B61482393D94E3A63D90113"
   622    622               {
   623    623               "AssemblyRegister" = "3:1"
   624    624               "AssemblyIsInGAC" = "11:FALSE"
   625         -            "AssemblyAsmDisplayName" = "8:test, Version=1.0.0.35203, Culture=neutral, processorArchitecture=x86"
          625  +            "AssemblyAsmDisplayName" = "8:test, Version=1.0.0.14669, Culture=neutral, processorArchitecture=x86"
   626    626                   "ScatterAssemblies"
   627    627                   {
   628    628                       "_2C7EDFF06B61482393D94E3A63D90113"
   629    629                       {
   630    630                       "Name" = "8:test.exe"
   631    631                       "Attributes" = "3:512"
   632    632                       }
................................................................................
   751    751               "IsDependency" = "11:FALSE"
   752    752               "IsolateTo" = "8:"
   753    753               }
   754    754               "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_40DFF08BA903482D807E715A041CA8B1"
   755    755               {
   756    756               "AssemblyRegister" = "3:1"
   757    757               "AssemblyIsInGAC" = "11:FALSE"
   758         -            "AssemblyAsmDisplayName" = "8:install, Version=1.0.0.36491, Culture=neutral, processorArchitecture=x86"
          758  +            "AssemblyAsmDisplayName" = "8:install, Version=1.0.0.14767, Culture=neutral, processorArchitecture=x86"
   759    759                   "ScatterAssemblies"
   760    760                   {
   761    761                       "_40DFF08BA903482D807E715A041CA8B1"
   762    762                       {
   763    763                       "Name" = "8:install.exe"
   764    764                       "Attributes" = "3:512"
   765    765                       }
................................................................................
   782    782               "IsDependency" = "11:FALSE"
   783    783               "IsolateTo" = "8:"
   784    784               }
   785    785               "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_40F352185F3B41A485F42BFC64BF9162"
   786    786               {
   787    787               "AssemblyRegister" = "3:1"
   788    788               "AssemblyIsInGAC" = "11:FALSE"
   789         -            "AssemblyAsmDisplayName" = "8:testce, Version=1.0.0.36383, Culture=neutral, processorArchitecture=MSIL"
          789  +            "AssemblyAsmDisplayName" = "8:testce, Version=1.0.0.14603, Culture=neutral, processorArchitecture=MSIL"
   790    790                   "ScatterAssemblies"
   791    791                   {
   792    792                       "_40F352185F3B41A485F42BFC64BF9162"
   793    793                       {
   794    794                       "Name" = "8:testce.exe"
   795    795                       "Attributes" = "3:512"
   796    796                       }
................................................................................
   935    935               "IsDependency" = "11:FALSE"
   936    936               "IsolateTo" = "8:"
   937    937               }
   938    938               "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A18DBDB7776215EAD9A52C96F8CA1E91"
   939    939               {
   940    940               "AssemblyRegister" = "3:1"
   941    941               "AssemblyIsInGAC" = "11:FALSE"
   942         -            "AssemblyAsmDisplayName" = "8:System.Data.SQLite, Version=1.0.46.0, Culture=neutral, PublicKeyToken=1fdb50b1b62b4c84, processorArchitecture=x86"
          942  +            "AssemblyAsmDisplayName" = "8:System.Data.SQLite, Version=1.0.47.0, Culture=neutral, PublicKeyToken=1fdb50b1b62b4c84, processorArchitecture=x86"
   943    943                   "ScatterAssemblies"
   944    944                   {
   945    945                       "_A18DBDB7776215EAD9A52C96F8CA1E91"
   946    946                       {
   947    947                       "Name" = "8:System.Data.SQLite.DLL"
   948    948                       "Attributes" = "3:512"
   949    949                       }
................................................................................
  1252   1252               "IsDependency" = "11:TRUE"
  1253   1253               "IsolateTo" = "8:"
  1254   1254               }
  1255   1255               "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F320FBAE871DA320178BEEA242900CC7"
  1256   1256               {
  1257   1257               "AssemblyRegister" = "3:1"
  1258   1258               "AssemblyIsInGAC" = "11:FALSE"
  1259         -            "AssemblyAsmDisplayName" = "8:System.Data.SQLite, Version=1.0.46.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86"
         1259  +            "AssemblyAsmDisplayName" = "8:System.Data.SQLite, Version=1.0.47.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86"
  1260   1260                   "ScatterAssemblies"
  1261   1261                   {
  1262   1262                       "_F320FBAE871DA320178BEEA242900CC7"
  1263   1263                       {
  1264   1264                       "Name" = "8:System.Data.SQLite.DLL"
  1265   1265                       "Attributes" = "3:512"
  1266   1266                       }
................................................................................
  1411   1411           {
  1412   1412           "LangId" = "3:1033"
  1413   1413           }
  1414   1414           "Product"
  1415   1415           {
  1416   1416           "Name" = "8:Microsoft Visual Studio"
  1417   1417           "ProductName" = "8:SQLite ADO.NET 2.0 Provider"
  1418         -        "ProductCode" = "8:{94A4B462-C696-4CBC-ADAF-805BA6D5638A}"
  1419         -        "PackageCode" = "8:{9FF262B9-1455-4B97-B219-A0052B20CD0F}"
         1418  +        "ProductCode" = "8:{69A1A99B-CB19-42C0-B286-FC0FA687E977}"
         1419  +        "PackageCode" = "8:{E2C4DC3D-26AD-4A49-B8DF-D2A3AB696D35}"
  1420   1420           "UpgradeCode" = "8:{78329A82-AFB1-453B-AF00-D46AC911DA89}"
  1421   1421           "RestartWWWService" = "11:FALSE"
  1422   1422           "RemovePreviousVersions" = "11:TRUE"
  1423   1423           "DetectNewerInstalledVersion" = "11:TRUE"
  1424   1424           "InstallAllUsers" = "11:TRUE"
  1425         -        "ProductVersion" = "8:1.046.0"
         1425  +        "ProductVersion" = "8:1.047.0"
  1426   1426           "Manufacturer" = "8:Phoenix Software Solutions, LLC"
  1427   1427           "ARPHELPTELEPHONE" = "8:"
  1428   1428           "ARPHELPLINK" = "8:http://sqlite.phxsoftware.com"
  1429   1429           "Title" = "8:SQLite ADO.NET 2.0 Provider"
  1430   1430           "Subject" = "8:"
  1431   1431           "ARPCONTACT" = "8:Phoenix Software Solutions, LLC"
  1432   1432           "Keywords" = "8:"