Released on 18 Jun 2007
Project description.

SQLite is an in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. The code for SQLite is in the public domain and is thus free for use for any purpose, commercial or private. SQLite is the most widely deployed database in the world with more applications than we can count, including several high-profile projects.

SQLite is an embedded SQL database engine. Unlike most other SQL databases, SQLite does not have a separate server process. SQLite reads and writes directly to ordinary disk files. A complete SQL database with multiple tables, indices, triggers, and views, is contained in a single disk file. The database file format is cross-platform - you can freely copy a database between 32-bit and 64-bit systems or between big-endian and little-endian architectures. These features make SQLite a popular choice as an Application File Format.

SQLite 3.4.0 Changelog
  • Fix a bug that can lead to database corruption if an SQLITE_BUSY error occurs in the middle of an explicit transaction and that transaction is later committed. Ticket #2409. See the CorruptionFollowingBusyError wiki page for details.
  • Fix a bug that can lead to database corruption if autovacuum mode is on and a malloc() failure follows a CREATE TABLE or CREATE INDEX statement which itself follows a cache overflow inside a transaction. See ticket #2418.
  • Added explicit upper bounds on the sizes and quantities of things SQLite can process. This change might cause compatibility problems for applications that use SQLite in the extreme, which is why the current release is 3.4.0 instead of 3.3.18.
  • Added support for Incremental BLOB I/O.
  • Added the sqlite3_bind_zeroblob() API and the zeroblob() SQL function.
  • Added support for Incremental Vacuum.
  • Added the SQLITE_MIXED_ENDIAN_64BIT_FLOAT compile-time option to support ARM7 processors with goofy endianness.
  • Removed all instances of sprintf() and strcpy() from the core library.
  • Added support for International Components for Unicode (ICU) to the full-text search extensions.
  • In the Windows OS driver, reacquire a SHARED lock if an attempt to acquire an EXCLUSIVE lock fails. Ticket #2354
  • Fix the REPLACE() function so that it returns NULL if the second argument is an empty string. Ticket #2324.
  • Document the hazards of type conversions in sqlite3_column_blob() and related APIs. Fix unnecessary type conversions. Ticket #2321.
  • Internationalization of the TRIM() function. Ticket #2323
  • Use memmove() instead of memcpy() when moving between memory regions that might overlap. Ticket #2334
  • Fix an optimizer bug involving subqueries in a compound SELECT that has both an ORDER BY and a LIMIT clause. Ticket #2339.
  • Make sure the sqlite3_snprintf() interface does not zero-terminate the buffer if the buffer size is less than 1. Ticket #2341
  • Fix the built-in printf logic so that it prints "NaN" not "Inf" for floating-point NaNs. Ticket #2345
  • When converting BLOB to TEXT, use the text encoding of the main database. Ticket #2349
  • Keep the full precision of integers (if possible) when casting to NUMERIC. Ticket #2364
  • Fix a bug in the handling of UTF16 codepoint 0xE000
  • Consider explicit collate clauses when matching WHERE constraints to indices in the query optimizer. Ticket #2391
  • Fix the query optimizer to correctly handle constant expressions in the ON clause of a LEFT JOIN. Ticket #2403
  • Fix the query optimizer to handle rowid comparisons to NULL correctly. Ticket #2404
  • Fix many potential segfaults that could be caused by malicious SQL statements.