SQLite 是一个 C 语言库,实现了一个小型、快速、独立、高可靠性、全功能的 SQL 数据库引擎。SQLite 是世界上使用最多的数据库引擎。SQLite 的源代码属于公共领域,每个人都可以免费使用,用于任何目的。
SQLite 3.53.0 现已发布,更新内容如下:
- 修复 WAL 重置数据库损坏漏洞。
- 添加 Query Result Formatter (QRF) 库,以便在等距字体屏幕上格式化 SQL 查询结果,使其易于阅读。
- 向 TCL 接口添加 format 方法,以便可以从 TCL 访问 QRF。
- QRF 用于 CLI 中的结果格式化,从而提高显示功能。
- SQL 语言新增特性:
- 增强 ALTER TABLE 语句,允许添加和删除 NOT NULL 和 CHECK 约束。
- REINDEX EXPRESSIONS 语句用于重建表达式索引。(可用于修复过期的表达式索引。)
- TEMP triggers 主体现在可以修改和/或查询主模式中的表。
- 增强 VACUUM INTO,以便如果使用 URI 文件名作为目标,并且该文件名具有 reserve=N 查询参数(N 介于 0 和 255 之间),则生成的数据库副本的保留量设置为 N。
- 新增 SQL 函数:
- json_array_insert()
- jsonb_array_insert()
- CLI 的改进:
- 对 .mode 命令进行了重大改进。
- 由于新增了 QRF 扩展,结果格式得到了改进。例如,在表格输出模式下,数值现在默认右对齐。
- 交互式 CLI 会话的默认输出模式现在使用 QRF 格式,以 Unicode 方框字符构成的方框形式显示查询结果,从而提高可读性。批量 CLI 会话为了兼容性,仍使用旧版输出格式。
- dot-commands 末尾的裸分号(未加引号)会被忽略。← 可能存在不兼容问题!
- 修复 .testcase 和 .check 命令,使其能够正常工作,并在源代码树中包含的标准 SQLite 测试套件的脚本中使用这些命令。
- 命令行参数中与 *.sql 或 *.txt 匹配且为非空文件名的参数将被读取并解释为 SQL 语句和/或 dot-commands 的脚本。
- 现在“.timer”命令的参数可以是“once”,即仅在下一个 SQL 语句上运行计时器。
- “.progress”dot-command 新增的“--timeout S”选项会使 SQL 语句在 S 秒后中断。
- “.indexes”命令已更改,现在 PATTERN 参数匹配索引名称,而不是被索引表的名称(从而使 PATTERN 参数真正发挥作用)。此外,“.indexes”命令还添加了几个新选项。
- 新的 C-language interfaces:
- sqlite3_str_truncate()
- sqlite3_str_free()
- sqlite3_carray_bind_v2()
- 向sqlite3_prepare_v3()添加SQLITE_PREPARE_FROM_DDL选项,允许虚拟表实现安全地准备从数据库模式派生的 SQL 语句。
- 添加了 SQLITE_UTF8_ZT 常量,可将其用作 sqlite3_result_text64() 或 sqlite3_bind_text64() 的编码参数, 以指示该值为 UTF-8 编码并以零结尾。
- SQLITE_LIMIT_PARSER_DEPTH选项已添加到sqlite3_limit()中。
- SQLITE_DBCONFIG_FP_DIGITS选项已添加到sqlite3_db_config() 中。
- Query planner 改进:
- 对于 EXCEPT、INTERSECT 和 UNION,始终使用排序合并算法,因为这几乎总是比使用哈希表更快。
- 改进 star schema 下大型多路连接的连接顺序选择。
- 增强 EXISTS-to-JOIN 优化,使得插入的 JOIN 项不必位于最内层循环中,只要 EXISTS-to-JOIN 循环的所有依赖项都在外层循环中即可。
- 增强 omit-noop-join 优化,使其能够省略不影响输出的连接链。
- 允许使用“GROUP BY e1 ORDER BY e2”的查询,其中 e1 和 e2 除了 ASC/DESC 排序顺序不同之外完全相同,可以使用单个索引进行优化。
- 允许虚拟表在查询结果集与 ORDER BY 子句不完全匹配的情况下优化 DISTINCT 语句。
- 向会话扩展添加新接口 ,允许应用程序将更改逐个添加到 sqlite3_changegroup 对象中:
- sqlite3changegroup_change_begin()
- sqlite3changegroup_change_blob()
- sqlite3changegroup_change_double()
- sqlite3changegroup_change_int64()
- sqlite3changegroup_change_null()
- sqlite3changegroup_change_text()
- sqlite3changegroup_change_finish()
- sqlite3changegroup_config()
- 改进浮点数↔文本转换。
- 重新实现以提高性能。
- 现在默认四舍五入到 17 位有效数字,而不是像之前所有版本那样保留 15 位。如果需要,可以使用 sqlite3_db_config ( SQLITE_DBCONFIG_FP_DIGITS ) API(上文第 6g 项)更改此设置。
- 添加了 self-healing 功能,以解决过期表达式索引问题。
- 向 sqlite3_rsync 添加“-p*--port”选项。
- 停止对 Windows RT 的支持。
- JavaScript/WASM
- 新增“opfs-wl”VFS,其功能与“opfs”VFS 相同,但使用 Web Locks 进行锁定,因此比“opfs”自定义协议能提供更公平的 lock sharing。“opfs-wl”需要使用
Atomics.waitAsync(),因此比 “opfs” 要求更高的浏览器版本。
更多详情可查看:https://sqlite.org/releaselog/3_53_0.html