ADO.NET 2.0 SQLite Data Provider
Version 1.0.36.0 October 16, 2006
Using SQLite 3.3.8
Written by Robert Simpson (robert@blackcastlesoft.com)
Released to the public domain, use at your own risk!
Official provider website: http://sqlite.phxsoftware.com
The latest version can be downloaded
here
Features:
-
Written from scratch on VS2005 specifically for ADO.NET 2.0, implementing all the
base classes and features recently introduced in the framework, including automatic
transaction enlistment.
- Supports the Full
and Compact .NET Framework, as well as native C/C++ development. 100% binary
compatible with the original sqlite3.dll.
-
On the Compact Framework, it is faster than the newly-introduced Sql Server
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.
- Encrypted database support. Encrypted databases are fully encrypted and
support both binary and cleartext password types.
-
Visual Studio 2005 Design-Time Support, works with all versions of VS2005, including
all Express Editions. You can add a SQLite
database to the Servers list, design queries with the Query Designer,
drag-and-drop tables onto a Typed DataSet, etc.
-
Single file redistributable. The core sqlite3 codebase and the ADO.NET wrapper
are combined into one multi-module assembly.
-
Binaries included for Itanium, x64, x86 and ARM processors.
-
DbProviderFactory support.
-
Full support for ATTACH'ed databases. Exposed as Catalogs
in the schema. When cloning a connection, all attached databases are
automatically re-attached to the new connection.
-
DbConnection.GetSchema(...) support includes ReservedWords, MetaDataCollections, DataSourceInformation,
DataTypes, Columns, Tables, Views, ViewColumns, Catalogs, Indexes,
IndexColumns and ForeignKeys
.
-
Enhanced DbDataReader.GetSchemaTable() functionality returns catalog, namespace
and detailed schema information even for complex queries.
-
Named and unnamed parameters.
-
Full UTF-8 and UTF-16 support, each with optimized pipelines into the native
database core.
-
Multiple simultaneous DataReaders (one DataReader per Command however).
-
Full support for user-defined scalar and aggregate functions, encapsulated into
an easy-to-use base class in which only a couple of overrides are necessary to
implement new SQL functions.
-
Full support for user-defined collating sequences, every bit as simple to
implement as user-defined functions and uses the same base class.
-
Full source for the entire engine and wrapper. No copyrights.
Public Domain. 100% free for commercial and non-commercial use.
Design-Time Support (new as of 1.0.14)
In Windows Explorer, navigate to the SQLite.NET\bin\Designer
folder and execute the INSTALL.EXE
file. The program will
automatically detect what version(s) of Visual Studio 2005 are installed and allow
you to selectively install and uninstall the designer for each edition.
DbFactory Support (Non-Compact Framework)
In order to use the SQLiteFactory and have the SQLite data provider enumerated
in the DbProviderFactories methods, you must add the following segment into your application's app.config file:
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
</configuration>
See the help documentation for further details on implementing both version-specific (GAC enabled) and version independent DBProviderFactories support.
Compiling for the Compact Framework
Just change the target platform from Win32 to Compact Framework and
recompile. The Compact Framework has no support for enumerating
attributes in an assembly, therefore all user-defined collating sequences and
functions must be explicitly registered. See the testce
sample application for an example of how to explicitly register user-defined
collating sequences and functions.
Distributing The SQLite Engine and ADO.NET Assembly
Only the System.Data.SQLite.DLL file needs to be distributed with your
application(s). This DLL contains both the managed wrapper and the native
SQLite3 codebase.
Development Notes Regarding the SQLite 3 Source Code
The SQLite3 source code is compiled directly from the SQLite.org release
sources. All builds of sqlite after 3.2.8 have included support for Windows CE. Additionally,
just one minor modification is made to pager.c, that modification is made automatically by the fixsource.vbs file
when the VS2005 solution is compiled.
Version History
1.0.36.0 - October 16, 2006
- Code merge with SQLite 3.3.8, including support for full-text search via the FTS1
extension.
- Fixed a bug retrieving data types when UseUtf16Encoding is true. Side-effect of further merging the common code between the two base classes.
- Fixed a bug with System.Transactions whereby a connection closed/disposed within
a transaction scope is rolled back and cannot be committed.
- Implemented a workaround for a Compact Framework issue regarding strong-named
assemblies containing a PE section with a raw size less than the virtual size.
1.0.35.1 - September 12, 2006
- Fixed the TYPES keyword to work when UseUTF16Encoding is true.
- Fix another bug revealed in 1.0.35.0 regarding infinite loops when the 2nd or subsequent statements of a semi-colon separated command cannot be parsed.
- Updated the help documentation.
1.0.35.0 - September 10, 2006
- Fixed an infinite loop bug in SQLiteCommand caused when multiple semi-colon separated
statements in a single command are executed via datareader and one of the statements
contains a syntax error preventing it from being prepared.
- Added the TYPES preparser keyword to be placed before a SELECT statement to
aid the wrapper in converting expressions in a subsequent select clause into more
robust types. Documentation yet to be integrated, but available on the forums.
- Added a new connectionstring parameter "BinaryGUID=true/false" (default is "true").
When true, guid types are stored in the database as binary blobs to save space.
Binary has been the default format since 1.0.32.0 but this parameter eases backward
compatibility.
1.0.34.0 - September 4, 2006
- Fixed a bug in SQLiteParameterCollection.RemoveAt(namedparam)
- Fixed a bug in SQLiteDataReader introduced in 1.0.30 that broke DateTimes using the Ticks option in the connection string.
- Fixed a bug in the recent changes to guid behavior wherein using a datareader's
indexer to fetch a guid from a column containing both binary and text guids would
sometimes return a byte array instead of a guid.
- Enacted a workaround involving typed datasets in Compact Framework projects in
which it took an excessive amount of time to open a form and generated a lot of
temporary files in the user's Local Settings\Application Data\Microsoft\VisualStudio\8.0\Assembly
References folder.
1.0.33.0 - August 21, 2006
- Code merge with SQLite 3.3.7
- Fixed a bug in SQLiteConnection that caused it to "forget" about commands bound
to it and occasionally throw an error when a database is closed and opened repeatedly.
1.0.32.0 - August 6, 2006
- Added AllowPartiallyTrustedCallers attribute to the assembly
- Added the missing "nchar" type
- Added support for binary Guid's. Guids are now stored as binary by default
when using parameterized queries. Text guids are still fully supported.
- Fixed a TransactionScope() error that caused the transaction not to be completed.
- Enhanced parameter names so that if they are added to the Parameters collection
without their prefix character (@ : or $) they are still properly mapped.
1.0.31.0 - July 16, 2006
- Re-applied the view parsing bugfix in 1.0.29.0 that was accidentally reverted
out of the 30 build.
- Fixed SQLiteCommand.ExecuteScalar() to return null instead of DbNull.Value
when no rows were returned.
- Design-time installer now installs the package-based designer on full Visual Studio
versions. Express editions continue to use the packageless designer.
- In Visual Studio (not Express), you can now right-click a SQLite connection in
the Server Explorer and vacuum the database and change the encryption password.
1.0.30.1 - July 2, 2006
- Code merge with SQLite 3.3.6
- Added support for the |DataDirectory| keyword in the Data Source filename string.
- Added hook notification support to SQLiteConnection. Specifically, there
are three new events on the SQLiteConnection object which are raised when an update/insert/delete
occurs and when transactions are committed and rolled back.
- Changed SQLiteTransaction to default to BEGIN IMMEDIATE instead of just BEGIN,
which solves a multithreaded race condition.
- Changed SQLiteDataReader to better support SQLite's typelessness. The data
reader no longer caches column affinity, but re-evaluates it for each column/row.
- Fixed a bug in Prepare() which caused an intermittant fault due to the code accessing
the memory of an unpinned variable.
- Fixed a multithreaded lock-retry bug in in SQLiteConnection.Open() and in
SQLiteTransaction, which failed to use a command timeout before giving up.
1.0.29.0 - May 16, 2006
- Fixed a bug in the Views schema information which caused multi-line view definition statements not to be parsed
- Fixed a parsing bug in SQLiteDataReader.GetSchemaTable() to account for numeric(x,y) datatypes with specified precision and scale
- Fixed a bug in SQLiteConnection.Open() which tried to automatically enlist in an ambient transaction but had not yet set the state of the database to Opened, thereby causing a transaction fault
- Changed SQLiteException to inherit from DbException on the full framework
1.0.28.0 - April 14, 2006
- Code merge with SQLite 3.3.5
- You can now specify a relative path in the Compact Framework's "Data Source" by
prefixing the file with ".\". i.e. "Data Source=.\\mydb.db3"
- Several more changes and enhancements to schemas for better compatibility.
- Fixed several bugs with the 64-bit builds of the provider. The x64 binary
is now optimized.
- Design-time installer now tries to install the 64-bit builds into the GAC along
with the 32-bit build.
- Fixed a bug in the SQLiteDataReader.GetSchemaTable() function when used with tables
containing apostrophes.
- Fixed an XSD-related bug whereby the XSD utility was unable to locate the provider
and could not generate typed datasets.
- Added NTEXT and STRING datatypes to the list of recognized keywords (used for
schema retrieval).
- Due to the XSD bug and other potential problems related to external build utilities,
changes to the installation of the designer have had to be made. The installer
used to write the DbProviderFactories XML into the devenv.exe.config file and its
express cousins, but now has to write instead to the machine.config.
- Installer writes to both the 32-bit machine.config and the 64-bit machine.config
if it exists.
1.0.27.1 - February 28, 2006
- Fixed a bug when doing data binding in Compact Framework projects that prevented
you from assigning a typed dataset to a bindingsource. It turns out, the CF
version of the SQLite provider needs to be flagged as retargetable so it'll work
in the design-time desktop environment. No changes were made to the desktop
build, but the revision was bumped on all libraries anyway in order to keep them
sync'd.
1.0.27.0 - February 27, 2006
- Many optimizations and a few more minor adjustments to schemas and schema retrieval
performance.
- Lots of design-time attributes added to the code. The DbDataAdapter, DbCommand,
and DbConnection objects now have greatly enhanced design-time capabilities when
added to the toolbox and dropped on a form.
- Lots of Server Explorer enhancements.
- Binaries are now distributed in a setup program for easier administration and
configuration of the provider.
1.0.26.2 - February 15, 2006
- Yet another bugfix to index schemas, which was incorrectly marking most indexes
as primary key indexes.
- Fixed GetSchema() to accept a null string array.
- Fixed a misspelled export in the core C library that prevented databases opened
with UTF16Encoding from getting schema information and would likely cause an error
if attempted.
1.0.26.1 - February 14, 2006
- Fixed even more minor schema bugs having to do with indexes.
- Added two missing pieces in the SQLite designer which were preventing it from
being used from within VS Express editions.
- Several bugfixes to the design-time installer program, including supporting
64-bit environments.
1.0.26.0 - February 11, 2006
- Code merge with SQLite 3.3.4
- Fixed an encryption bug when changing the password of databases over 1gb in
size.
- Fixed various designer issues related to construction of named parameters.
- Retooled the GetSchema() method of SQLiteDataReader to use the new 3.3.4 API functions,
and made several enhancements and fixes to schemas.
- Implemented the SourceColumnNullMapping property of SQLiteParameter to fix
a DbCommandBuilder code generation bug.
- Removed the runtime dependency on MSVCR80.DLL. File size is somewhat
larger for the varying desktop versions.
- Created an install program to manage installation and uninstallation of the
SQLite design-time support.
- Designer support now works for all Visual Studio editions, including all Express
Editions.
- Design-time installer will now remove (if present) the machine.config SQLite entries
in favor of installing the xml code into the devenv.exe.config file (or any of the
variations for express editions). The officially-accepted behavior of using
DbProviderFactories is to add the code to your app.config file, and the machine.config
file should not be touched.
1.0.25.0 - January 31, 2006
- Code merge with SQLite 3.3.3
- Added automatic distributed transaction enlistment and implemented the DbConnection.EnlistTransaction
method for manual enlistment.
- Nested transactions are now supported.
- Rearranged the timing of SetPassword(), which now must be called before the database
is opened instead of afterwards. Optionally, the password can be supplied
in the ConnectionString.
- Fixed a bug in SQLiteFunction that caused a failure when an empty resultset was
returned and a custom user aggregate function was used in the query.
- The designer has had another round of cleanup applied, in preparation for moving
to a VS package.
- Added SQLiteMetaDataCollectionNames class.
1.0.24.6 beta - January 23, 2006
- This beta is built from sqlite.org's 3.3.2 beta.
- Eliminated the static linking of mscoree from all binaries. Native projects
can now use the library without any dependencies on the .NET framework, while managed
projects continue to be able to use the library normally.
1.0.24.5 beta - January 20, 2006
- This beta is built from sqlite.org's 3.3.1 alpha and contains development-in-progress code. Therefore no guarantees
can be made regarding its suitability for production use.
- You no longer need to distribute 2 files on the CompactFramework.
You can delete SQLite.Interop.DLL entirely. I wrote a custom tool
called "mergebin" (available in the source zip file) which combines the two libraries
and gets around a glaring defect in the VS2005 linker for ARM processors which doesn't
allow you to link netmodules.
- x64 and ia64 builds now use the same strong name as the x86 build.
This means breaking backward compatibility, but it was necessary in order to allow
you to drop any of those 3 builds onto a PC and have your .NET program run properly.
Prior to this, you'd get an error if you built your program using the x86 build,
and then installed the x64 version on a target machine and tried to run your program
against it.
- The entire source project has been gone over top to bottom. A debug build
no longer combines the binaries into a single module, which was preventing proper
debugging.
1.0.24.4 beta - January 16, 2006
- This beta is built from sqlite.org's 3.3.1 alpha and contains development-in-progress code. Therefore no guarantees
can be made regarding its suitability for production use.
- Fixed a bug in the UTF-16 handling code for preparing statements due to a behavioral
change in SQLite 3.3.0.
- Added pager.c code necessary to cleanup after an encrypted file is closed.
- Fixed an encryption bug that caused a fault when an encrypted file was rolled
back.
- Modified the testcase code to take advantage of optimizations regarding the use
of a DbCommandBuilder. DataAdapter insert speed increased dramatically as
a result.
1.0.24.3 beta - January 10, 2006
- This beta is built from sqlite.org's 3.3.0 alpha and contains development-in-progress code. Therefore no guarantees
can be made regarding its suitability for production use.
- Added support for database encryption at the pager level. Databases
are encrypted using a 128-bit RC4 stream algorithm. To open an existing encrypted
database, you may now specify a "Password={password}" text in the ConnectionString,
or you may call the SQLiteConnection.SetPassword() function to set the password
on an open connection. To encrypt existing non-encrypted databases or to change
the password on an encrypted database, you must use the SQLiteConnection.ChangePassword()
function. If you use SetPassword() instead of specifying a password in the
connection string, or call ChangePassword() you may use a binary byte array or a
text string as the password.
- Rewrote the locking implementation for the Compact Framework. It is now
more robust and incorporates into the SQLite codebase more efficiently than the
previous CE adaptation.
- Moved some of the embedded schema XML data into a resource file to ease code readability.
- Automated the fixup of the original sqlite codebase's source prior to compiling,
to ease merging with sqlite.org's source.
- Fixed a memory leak in SQLiteCommand due to it not removing an internal reference
to itself in SQLiteConnection.
1.0.24.2 - December 30, 2005
- Fixed the SQLiteDataReader.HasRows property to return the proper value.
- Implemented the inadvertently neglected RecordsAffected property on SQLiteDataReader.
- SQLiteFunction static constructor was changed to pre-filter classes with only the
SQLiteFunctionAttribute. The code was throwing an exception when certain
assemblies were referenced in a project.
- Fixed the SQLiteDataAdapter OnRowUpdated event, which was using the wrong variable
to find the attached event handler and subsequently not raising the event.
- Small optimizations and fixes to SQLiteDataReader.NextResult().
1.0.24.1 - December 19, 2005
- Update core SQLite engine to 3.2.8
1.0.24 - December 9, 2005
- Fixed the Catalogs schema bug that caused attached databases not to be re-attached to a cloned connection
- Enhanced transactions to allow for a deferred or immediate writelock. SQLiteConnection.BeginTransaction()
now has an additional overload to support it
- Commands are now prepared as they are executed instead of beforehand. This
fixes a bug whereby a multi-statement command that alters the database and subsequently
references the altered data would fail during Prepare().
- Tightened up the SQLiteDataReader to prevent reading columns before calling
the first Read() and to prevent reading columns after the last Read().
- A more descriptive error is thrown if there aren't enough parameters in the command
to satisfy the parameters required by the statement(s).
1.0.23 - November 21, 2005
- Named parameters may now begin with @ to ease portability of
the provider. SQLite's named parameters are ordinarily prefixed with a :
or $. The designer will still use the $
prefix however, since its more compatible with the default SQLite engine.
- Added several alternate ISO8601 date/time formats to SQLiteConvert.cs to increase
compatibility.
- Relaxed coersion restrictions to work better with SQLite's inherent typelessness.
1.0.22 - November 11, 2005
- Fixed some globalization issues which resulted in incorrect case-insensitive comparisons
- Fixed a bug in the routine that finds all user-defined functions in a loaded assembly.
It would throw an exception if any of the types in the assembly could not be loaded.
The exception is now caught and handled appropriately.
1.0.21 - November 4, 2005
- Fixed a designer bug when creating typed datasets with parameterized queries.
- The above fix then exposed another bug in the datareader's ability to query schema
information on parameterized commands, which was also fixed.
- Compiled against the RTM version of VS2005.
- Rewrote the design-time install script to use the XML DOM objects when writing
to the machine.config and to automatically register the DLL in the GAC.
- Made changes to the app.config descriptions and help file to improve version-independent
factory support.
1.0.20 - October 19, 2005
-
Fixed a shortcut in SQLiteBase.GetValue which was insufficient for
international environments. The shortcut was removed and the "proper"
procedure put in.
1.0.19 - October 5, 2005
-
Code merge with SQLite 3.2.7
-
Fixed bugs in the CE port code (os_wince.c) which were brought to
light by recent changes in the SQLite engine.
-
Recompiled and modified to be compatible with the September VS2005 Release
Candidate.
Beta 2 users should continue to use 1.0.18.1
1.0.18.1 - September 19, 2005
-
Code merge with SQLite 3.2.6
1.0.18 - September 1, 2005
-
Added type-specific method calls when using the various SQLite classes that
would've normally returned a a generic Db base class, which aligns the code
better with the Microsoft-supplied data providers.
1.0.17 - August 26, 2005
-
Code merge with SQLite 3.2.5
-
Added Itanium and x64 build settings to the project (needs testing)
-
Bugfixes and enhancements to several schema types
-
Additional design-time support to include index and foreign key
enumerations. Requires re-registering the designer using
INSTALL.CMD. The new designer code now allows the VS query designer and
typed datasets to automatically link up foreign keys, use indexes, and
automatically generate relationships from the schema.
-
Additional static methods on SQLiteConnection to create a database file,
encrypt a file using the Encrypted File System (EFS) on NTFS (requires NT 2K or
above) and NTFS file compression
1.0.16 - August 24, 2005
-
Code merge with SQLite 3.2.4 with the large delete bugfix in CVS (which will
become 3.2.5 soon)
-
Added new GetSchema() types: IndexColumns, ViewColumns, ForeignKeys
1.0.15 - August 22, 2005
-
Code merge with SQLite 3.2.3
-
Minor updates for better design-time experience. More design-time code to
follow in subsequent releases.
1.0.14 - August 16, 2005
-
Fixed a bug in the SQLiteDataAdapter due to insufficient implementation of the
class. The RowUpdating and RowUpdated events are now properly
implemented, but unfortunately inserting and updating data in a DataTable or
DataSet is now much slower. This is the proper design however, so the
changes are here to stay.
-
Lots of schema changes to support Visual Studio's Data Designer architecture.
- Added
Designer support for the provider. It's not 100%, but you can design
queries, add typed datasets and perform quite a number of tasks all within
Visual Studio now.
1.0.13 - August 8, 2005
-
Fixed a named parameter bug in the base SQLite_UTF16 class, which of course
only showed up when a database connection was opened using the
UseUTF16Encoding=True parameter.
-
Fixed a performance issue in SQLite_UTF16 involving string marshaling.
1.0.12 - August 5, 2005
-
Full support for the Compact Framework. Each build (Debug/Release) now
has a platform, either Win32 or Compact Framework. The correct
projects are built accordingly. See the Distributing
SQLite
section for information on what files need to be distributed for each
platform.
-
Modified SQLite3.Reset() and Step() functions to transparently handle timeouts
while waiting on the database to become available (typically when a writer is
waiting on a reader to finish, or a reader is waiting on a writer to finish).
-
Lots of code cleanup as suggested by the Code Analyzer (FxCop).
-
Lots of updates to the helpfile (as you can see).
-
Statements were already prepared lazily in a SQLiteCommand, but now
its even more lazy. Statements are now only prepared if the statements
haven't been previously prepared and a Prepare() function is called (and the
command is associated with a connection) or just prior to the command being
executed.
1.0.11 - August 1, 2005
-
For everything except the Compact Framework, System.Data.SQLite.DLL is
now the only DLL required to use this provider! The
assembly is now a multi-module assembly, containing both the native SQLite3
codebase and the C# classes built on top of it. The Compact Framework
version (when completed) will not be able to support this feature, so backwards
compatibility with the Compact Framework has been preserved for the future.
-
Fixed a bug in SQLiteCommand.ExecuteScalar() that caused it to stop executing
commands once it obtained the first column of the first row-returning
resultset. Any remaining statements after the row-returning statement was
ignored.
1.0.10 - June 10, 2005
-
Fixed a bug in the SQLite3.cs Prepare() function that created a statement even
when the SQLite engine returned a NULL pointer. Typically this occurs when
multiple statements are processed and there are trailing comments at the end of
the statement.
-
Fixed a bug in SQLiteStatement.cs that retrieved parameter names for a
parameterized query. SQLite's parameters are 1-based, and the function
was starting at 0. This was fine when all parameters were unnamed, but
for named parameters it caused the parameters to be out of whack.
1.0.09a - May 25, 2005
-
Fixed a broken helpfile and corrected some obsolete help remarks in
SQLiteFunction.cs
-
Added a version resource to the SQLite.Interop.DLL.
1.0.09 - May 24, 2005
-
Code merge with the latest 3.21 version of SQLite.
-
Removed obsolete methods and properties for Whidbey Beta 2
1.0.08 Refresh - Mar 24, 2005
-
Code merge with the latest 3.20 version of SQLite.
-
Recompiled the help file to fix a build error in it.
1.0.08 - Mar 11, 2005
-
Added additional #if statements to support the old beta 1 edition of VS2005.
-
Code merged the SQLite 3.14 source.
1.0.07 - Mar 5, 2005
-
Made more optimizations to frequently-called functions, resulting in
significant performance gains in all tests.
-
Recompiled the binaries using the latest VS2005 February CTP, resulting in yet
more significant speed gains. The 100k insert test used to take 3.5
seconds and the insertwithidentity took almost 8 seconds. With the above
two changes, those tests are now executing in 1.9 and 4.9 seconds respectively.
1.0.06 - Mar 1, 2005
-
Speed-ups to SQLiteDataReader. It was interop'ing unnecessarily every
time it tried to fetch a field due to a logic error.
-
Changed/Added some code to SQLiteConvert's internal DbType, Type and
TypeAffinity functions.
-
Fixed the SQLiteDataReader to obey the flags set in the optional
CommandBehavior flag from SQLiteCommand.ExecuteReader().
-
Changed the default page size to 1024 to reflect the defaults of SQLite.
Ignores the "Page Size" connection string option for memory databases, as tests
revealed that changing it resulted in memory corruption errors.
-
Performance enhancements to the SQLiteCommand and SQLiteStatement classes which
reduced the 100,000 row insert execution time as well as the various Function
execution times significantly.
1.0.05 - Feb 25, 2005
-
Fixed the SQLite3 C# class step/reset functions to accomodate schema changes
that invalidate a prepared statement. Statements are recompiled
transparently.
-
Moved all native DLL declarations to an UnsafeNativeMethods class.
-
Split several classes into their own modules for readability.
-
Renamed many internal variables, reviewed access to variables marked as
internal and altered their protection levels accordingly.
-
Due to the presence of the altered sqlite3 codebase and so many added interop
functions, I decided to rename the sqlite3 C project and the DLL to
SQLite.Interop.DLL. This is the same core sqlite3 codebase but designed
specifically for this ADO.NET provider. This eliminates any possibility
of someone dropping another build of sqlite3.dll into the system and rendering
the provider inoperable. In the future if the folks at sqlite.org finally
introduce a method of retrieving column usage for an arbitrary prepared
statement, I'll retool this library to be a lightweight function call wrapper
around the core binary distribution.
-
Added [SuppressUnmanagedCodeSecurity] attribute to the UnsafeNativeMethods
class which brings VS2005 November CTP execution speeds inline with the
December CTP.
-
Added a bin
directory to the project root where pre-compiled binaries can be found.
-
Added a doc
directory where preliminary documentation on the class library can be found.
-
Documented a lot more of the classes internally.
1.0.04 - Feb 24, 2005
-
Removed the SQLiteContext class and revamped the way UserFunctions work to
simplify the imlementation.
-
Fixed a counting bug in the TestCases class, specifically in the function tests
where I wasn't resetting the counter and it was consequently reporting
intrinsic and raw select calls as being much much faster than they actually
were. The numbers are now much closer to what I expected for performance,
with .NET user-functions still being the slowest, but only by a small margin.
-
Small performance tweaks to SQLiteDataReader.
-
Added PageSize to the SQLiteConnectionStringBuilder and subsequently to the
SQLiteConnection
-
Added a PRAGMA encoding=XXX execution statement to the SQLiteConnection after
opening a connection.
1.0.03 - Feb 23, 2005
-
Fixed up SQLiteCommandBuilder to correct implementation errors, which resulted
in an enormous performance boost in the InsertMany test. 10,000 row
insert that executed in 1500ms now executes in 500ms.
-
Fixed several errors in the SQLite3_UTF16 class. ToString() was working
incorrectly and the Open() method failed to register user defined functions and
collations.
-
Fixed a bug in SQLiteCommand.ClearCommands() whereby only the first statement
was being properly cleaned up.
-
Fixed a bug in SQLiteDataReader whereby calling NextResult() would not properly
reset the previously-executed command in the sequence.
-
Added an InsertManyWithIdentityFetch test, which appends a select clause to
populate the ID of the last inserted row into the InsertCommand, demonstrating
ADO.NET's ability to auto-fetch identity columns on insert.
1.0.02 - Feb 21, 2005
-
Tweaks to the xxx_interop functions that return char *'s, so they also return
the length. Saves an interop call to get the UTF-8 string length during
conversion to a .NET string.
-
Reworked the whole interop.c thing into interop.h and reduced the code required
to merge the main sqlite3 codebase.
-
Added support for user-defined collations.