Exciting SQLite Improvements Since 2020
We are Airsequel, a platform that hosts SQLite databases and automatically generates a GraphQL API, a spreadsheet UI, an SQL workbench, and a dashboard builder for each database. While working extensively with SQLite, we discovered that many of its great features were added only recently.
Despite its widespread usage, there is a common misconception that SQLite is a stagnant or outdated technology. Often overshadowed by newer and flashier database management systems, many overlook the continued innovation and evolution of SQLite. Granted, SQLite has been around for more than 20 years, but this just shows what a robust and valuable database it is. And as you can see in following chart, the development velocity hasnโt slowed down a bit:
(Check out my blog post for a tutorial on how to create this bar chart.)
So let's take a look at some of the exciting improvements and refinements that SQLite has seen since 2020. This list focuses on changes related to the supported SQL instructions and the CLI.
- Version 3.31 (2020-01-22)
- Added support for generated columns.
- Added the
#-N
array notation for JSON function path arguments. - New flags
SQLITE_INNOCUOUS
andSQLITE_DIRECTONLY
for application-defined SQL functions. - Added the uuid.c extension for processing UUIDs.
- Version 3.32 (2020-05-22)
- Added the
iif() SQL function
. - Added options to the
.import
command:--csv
,--ascii
,--skip
.
- Added the
- Version 3.33 (2020-08-14)
- Support for
UPDATE FROM
. - Increase the maximum size of database files to 281 TB.
- Added the decimal extension
to the CLI for doing arbitrary-precision decimal arithmetic. - Added four new output modes:
box
,json
,markdown
, andtable
- Support for
- Version 3.34 (2020-12-01)
- Added options
--data-only
and--nosys
to the.dump
dot-command. - Added the
generate_series(START,END,STEP)
function to the CLI. - Added the
--tabs
command-line option that sets.mode tabs
.
- Added options
- Version 3.35 (2021-03-12)
- Added built-in SQL math functions().
- Support for
ALTER TABLE DROP COLUMN
. - Support
RETURNING
clause onDELETE
,INSERT
, andUPDATE
statements. MATERIALIZED
andNOT MATERIALIZED
hints for common table expressions (CTEs).
- Version 3.36 (2021-06-18)
REGEXP
extension is now included in CLI
- Version 3.37 (2021-11-27)
STRICT
tables- Added
PRAGMA table_list
statement .connection
command, allowing the CLI to keep multiple database connections open.- CLI option
--safe
disables dot-commands and SQL statements that might cause side-effects.
- Version 3.38 (2022-02-22)
- Full JSON support via built-in functions
->
and->>
operators
- Added the unixepoch() function.
- Added the auto modifier and the julianday modifier.
- Full JSON support via built-in functions
- Version 3.39 (2022-06-25)
- Support for
RIGHT
andFULL OUTER JOIN
.
- Support for
- Version 3.40 (2022-11-16)
- Support for compiling SQLite to WASM and running it in web browsers.
- Added the recovery extension to recover content from corrupt databases.
- Version 3.41 (2023-02-21)
Added function
unhex()
Added
base64()
andbase85()
functions in the CLIEnhancements to
PRAGMA integrity_check
There were also tons of improvements made to the query planner to enhance performance and robustness. However, these improvements are beyond the scope of this post.
For a full list of all changes, please check out the official release history page.
This list should make it clear that SQLite is still as relevant as ever. Personally, it's now my database of choice for most projects. While it may not have all the bells and whistles of, for example, Postgres, the truth is that I mostly don't need them anyway. The ease of deployment, the ability to copy, move, and edit it like any other file, and the high performance more than make up for it.