* CHECK constraints are now enforced.
* The IF [NOT] EXISTS syntax of MySQL is now recognized on
CREATE/DROP TABLE/INDEX statements.
* DESC indices really are descending now. The DESC keyword
on index definitions used to be ignored.
* The database file format has changed slightly to more
compactly represent boolean values and to support DESC
indices. Version 3.3.0 will read and write all prior
version 3 databases. But new databases created by
version 3.3.0 will not be readable by older versions
of SQLite. If this is a problem for your application,
compile SQLite using
and then version 3.3.0 will create new databases in
the legacy format understood by all prior versions of
SQLite. DESC indices only work in the new format.
* SQLite now distinguishes between REAL and INTEGER columns
and attempts to make appropriate conversions.
* The OS-interface layer has been modified for greater
flexibility and control of custom ports and implementations.
* SQLite now responses better to out-of-memory errors. The
library will recover and reset itself automatically. There
is no longer a need to call sqlite3_global_recover(). The
new sqlite3_enable_memory_management() API can be used to put
SQLite into a mode where it will automatically try to reduce
its database cache size when it comes under memory pressure.
* The database cache and parsed schema information can now
optionally be shared between two or more database connections.
This can be used to reduce I/O and to improve concurrency.
On a database using a shared cache, you can specify
READ UNCOMMITTED isolation as an option (the default is
SERIALIZABLE). With READ UNCOMMITTED, a reader will not
block or be blocked by a writer and you will never get
an SQLITE_BUSY error on a read.