* 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
-DSQLITE_DEFAULT_FILE_FORMAT=1
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.