 
Small. Fast. Reliable.
Choose any three.
 
SQLite Release 3.21.0 On 2017-10-24
-  Take advantage of the atomic-write capabilities in the 
     F2FS filesystem when available, for
     greatly reduced transaction overhead.  This currently requires the
     SQLITE_ENABLE_BATCH_ATOMIC_WRITE compile-time option.
-  Allow ATTACH and DETACH commands to work inside of a transaction.
-  Allow WITHOUT ROWID virtual tables to be writable if the PRIMARY KEY
     contains exactly one column.
-  The "fsync()" that occurs after the header is written in a WAL reset
     now uses the sync settings for checkpoints.  This means it will use a
     "fullfsync" on macs if PRAGMA checkpoint_fullfsync set on.
-  The sqlite3_sourceid() function tries to detect if the source code has
     been modified from what is checked into version control and if there are
     modifications, the last four characters of the version hash are shown as
     "alt1" or "alt2".  The objective is to detect accidental and/or careless
     edits.  A forger can subvert this feature.
-  Improved de-quoting of column names for CREATE TABLE AS statements with
     an aggregate query on the right-hand side.
-  Fewer "stat()" system calls issued by the unix VFS.
-  Enhanced the LIKE optimization so that it works with an ESCAPE clause.
-  Enhanced PRAGMA integrity_check and PRAGMA quick_check to detect obscure
     row corruption that they were formerly missing.  Also update both pragmas
     so that they return error text rather than SQLITE_CORRUPT when encountering
     corruption in records.
-  The query planner now prefers to implement FROM-clause subqueries using
     co-routines rather using the query flattener optimization.  Support for
     the use of co-routines for subqueries may no longer be disabled.
-  Pass information about !=, IS, IS NOT, NOT NULL, and IS NULL constraints
     into the xBestIndex method of virtual tables.
-  Enhanced the CSV virtual table so that it accepts the last row of
     input if the final new-line character is missing.
-  Remove the rarely-used "scratch" memory allocator.  Replace it with the
     SQLITE_CONFIG_SMALL_MALLOC configuration setting that gives SQLite
     a hint that large memory allocations should be avoided when possible.
-  Added the
     swarm virtual table
     to the existing union virtual table extension.
-  Added the 
     sqlite_dbpage virtual table
     for providing direct access to pages
     of the database file.  The source code is built into the amalgamation and
     is activated using the -DSQLITE_ENABLE_DBPAGE_VTAB compile-time option.
-  Add a new type of fts5vocab virtual table - "instance" - that provides
     direct access to an FTS5 full-text index at the lowest possible level.
-  Remove a call to rand_s() in the Windows VFS since it was causing problems
     in Firefox on some older laptops.
-  The src/shell.c source code
     to the command-line shell is no longer under version control.  That file
     is now generated as part of the build process.
-  Miscellaneous microoptimizations reduce CPU usage by about 2.1%.
-  Bug fixes:
-  Fix a faulty assert() statement discovered by OSSFuzz.
     Ticket cb91bf4290c211d
-  Fix an obscure memory leak in sqlite3_result_pointer().
     Ticket 7486aa54b968e9b
-  Avoid a possible use-after-free error by deferring schema resets until
     after the query planner has finished running.
     Ticket be436a7f4587ce5
-  Only use indexes-on-expressions to optimize ORDER BY or GROUP BY if
     the COLLATE is correct.
     Ticket e20dd54ab0e4383
-  Fix an assertion fault that was coming up when the expression in an
     index-on-expressions is really a constant.
     Ticket aa98619ad08ddca
-  Fix an assertion fault that could occur following
     PRAGMA reverse_unordered_selects.
     Ticket cb91bf4290c211d
-  Fix a segfault that can occur for queries that use table-valued functions
     in an IN or EXISTS subquery.
     Ticket b899b6042f97f5
-  Fix a potential integer overflow problem when compiling a particular
     horrendous common table expression.  This was another problem discovered
     by OSSFuzz.  Check-in 6ee8cb6ae5.
-  Fix a potential out-of-bound read when querying a corrupt database file,
     a problem detected by Natalie Silvanovich of Google Project Zero.
     Check-in 04925dee41a21f.
 Hashes:
 
- SQLITE_SOURCE_ID: "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827"
- SHA3-256 for sqlite3.c: 84c181c0283d0320f488357fc8aab51898370c157601459ebee49d779036fe03
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.