Small. Fast. Reliable.
Choose any three.
SQLite Release 3.27.2 On 2019-02-25
Changes in version 3.27.0 (2019-02-07):
- Added the VACUUM INTO command
- Issue an SQLITE_WARNING message on the error log if a
double-quoted string literal is used.
- The sqlite3_normalized_sql() interface works on any prepared statement
created using sqlite3_prepare_v2() or sqlite3_prepare_v3(). It is no
longer necessary to use sqlite3_prepare_v3() with SQLITE_PREPARE_NORMALIZE
in order to use sqlite3_normalized_sql().
- Added the remove_diacritics=2 option to FTS3 and FTS5.
- Added the SQLITE_PREPARE_NO_VTAB option to sqlite3_prepare_v3().
Use that option to prevent circular references to shadow tables from
causing resource leaks.
- Enhancements to the sqlite3_deserialize() interface:
- Add the SQLITE_FCNTL_SIZE_LIMIT file-control for
setting an upper bound on the size of the in-memory database created
by sqlite3_deserialize. The default upper bound is 1GiB, or whatever
alternative value is specified by
- Honor the SQLITE_DESERIALIZE_READONLY flag, which was previously described
in the documentation, but was previously a no-op.
- Enhance the "deserialize" command of the TCL Interface to give it
new "--maxsize N" and "--readonly BOOLEAN" options.
- Enhancements to the CLI, mostly to support testing and debugging
of the SQLite library itself:
- Add support for ".open --hexdb". The
program used to generate the text for the "hexdb" is added to the
- Add support for the "--maxsize N" option on ".open --deserialize".
- Add the "--memtrace" command-line option, to show all memory allocations
- Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
bytecode program listing with indentation and
PRAGMA vdbe_trace all in one step.
- Add the ".progress" command for accessing
the sqlite3_progress_handler() interface.
- Add the "--async" option to the ".backup" command.
- Add options "--expanded", "--normalized", "--plain", "--profile", "--row",
"--stmt", and "--close" to the ".trace" command.
- Increased robustness against malicious SQL that is run against a
maliciously corrupted database.
- Do not use a partial index to do a table scan on an IN operator.
- Fix the query flattener so that it works on queries that contain
subqueries that use window functions.
- Ensure that ALTER TABLE modifies table and column names embedded in WITH
clauses that are part of views and triggers.
- Fix a parser bug that prevented the use of parentheses around table-valued
- Fix a problem with the OR optimization on indexes on expressions.
- Fix a problem with the
LEFT JOIN strength reduction optimization in which the optimization
was being applied inappropriately due to an IS NOT NULL operator.
- Fix the REPLACE command so that it is no longer able to sneak a
NULL value into a NOT NULL column even if the NOT NULL column has a default
value of NULL.
- Fix a problem with the use of window functions used within
- Fix the ALTER TABLE RENAME COLUMN command so that it works for tables
that have redundant UNIQUE constraints.
- Fix a bug that caused zeroblob values to be truncated when inserted into
a table that uses an expression index.
Additional changes in version 3.27.1 (2019-02-08):
- Fix a bug in the query optimizer: an adverse interaction between
the OR optimization and the optimization that tries to use values
read directly from an expression index instead of recomputing the
Additional changes in version 3.27.2 (2019-02-25):
- Fix a bug in the IN operator that was introduced by an
attempted optimization in version 3.27.0. Ticket
- Fix a bug causing a crash when a window function is misused. Ticket
- Fix various documentation typos
- SQLITE_SOURCE_ID: bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
- SHA3-256 for sqlite3.c: 1dbae33bff261f979d0042338f72c9e734b11a80720fb32498bae9150cc576e7
A complete list of SQLite releases
in a single page and a chronology are both also available.
A detailed history of every
check-in is available at
SQLite version control site.