Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.34.1 On 2021-01-20

Prior changes from version 3.34.0 (2020-12-01):

1. Added the sqlite3_txn_state() interface for reporting on the current transaction state of the database connection.
2. Enhance recursive common table expressions to support two or more recursive terms as is done by SQL Server, since this helps make queries against graphs easier to write and faster to execute.
3. Improved error messages on CHECK constraint failures.
4. CLI enhancements:
   1. The .read dot-command now accepts a pipeline in addition to a filename.
   2. Added options --data-only and --nosys to the .dump dot-command.
   3. Added the --nosys option to the .schema dot-command.
   4. Table name quoting works correctly for the .import dot-command.
   5. The generate_series(START,END,STEP) table-valued function extension is now built into the CLI.
   6. The .databases dot-command now shows the status of each database file as determined by sqlite3_db_readonly() and sqlite3_txn_state().
   7. Added the --tabs command-line option that sets .mode tabs.
   8. The --init option reports an error if the file named as its argument cannot be opened. The --init option also now honors the --bail option.
5. Query planner improvements:
   1. Improved estimates for the cost of running a DISTINCT operator.
   2. When doing an UPDATE or DELETE using a multi-column index where only a few of the earlier columns of the index are useful for the index lookup, postpone doing the main table seek until after all WHERE clause constraints have been evaluated, in case those constraints can be covered by unused later terms of the index, thus avoiding unnecessary main table seeks.
   3. The new OP_SeekScan opcode is used to improve performance of multi-column index look-ups when later columns are constrained by an IN operator.
6. The BEGIN IMMEDIATE and BEGIN EXCLUSIVE commands now work even if one or more attached database files are read-only.
7. Enhanced FTS5 to support trigram indexes.
8. Improved performance of WAL mode locking primitives in cases where there are hundreds of connections all accessing the same database file at once.
9. Enhanced the carray() table-valued function to include a single-argument form that is bound using the auxiliary sqlite3_carray_bind() interface.
10. The substr() SQL function can now also be called "substring()" for compatibility with SQL Server.
11. The syntax diagrams are now implemented as Pikchr scripts and rendered as SVG for improved legibility and ease of maintenance.

Changes in this specific patch release, version 3.34.1 (2021-01-20):

1. Fix a potential use-after-free bug when processing a a subquery with both a correlated WHERE clause and a "HAVING 0" clause and where the parent query is an aggregate.
2. Fix documentation typos
3. Fix minor problems in extensions.

   Hashes:

4. SQLITE_SOURCE_ID: 2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
5. SHA3-256 for sqlite3.c: 799a7be90651fc7296113b641a70b028c142d767b25af1d0a78f93dcf1a2bf20

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.