SQLite 3.53.0:WAL-reset 损坏 bug 修复,CLI 表格改用 Unicode 框线
信源:SQLite Release History、3.53.0 发布说明
版本节奏:3.53.0 于 2026-04-09 发布;3.53.2(2026-06-03)、3.53.4(2026-07-24)为同系列维护版。3.54.0 计划 2026-10-15。
修复:WAL-reset 导致的数据库损坏
3.53.0 修掉了一个 WAL-reset 引发数据库损坏的 bug。对长期跑 WAL 模式、又依赖 checkpoint 收缩 wal 文件的服务来说,这一条可以直接对应到升级动机。
QRF:查询结果的等宽屏格式化
新增 Query Result Formatter(QRF)库,目标是在等宽字体屏幕上把查询结果排成人能直接读的样式。TCL 接口新增 format 方法;CLI 的结果格式化改由 QRF 承担。
SQL 语言层新增
ALTER TABLE增强:支持增加和移除NOT NULL与CHECK约束。REINDEX EXPRESSIONS:重建表达式索引,用于修复失效的表达式索引。TEMP触发器的 body 现在可以修改或查询mainschema 中的表。VACUUM INTO增强:如果目标使用 URI 文件名并带reserve=N(N 取值 0–255),副本的 reserve 量设为 N。
新增函数:json_array_insert()、jsonb_array_insert()。
CLI 改造
.mode命令大改。- 结果格式化改进,数值默认右对齐。
- 交互式 CLI 默认输出模式改用 QRF,用 Unicode 框线画表格;批处理 CLI 仍用旧格式以保持兼容。
- 位于 dot-command 末尾的裸(未加引号的)分号被静默忽略——潜在不兼容点,脚本里靠分号分隔的写法要检查。
- 修复
.testcase和.check命令。 - 匹配
*.sql或*.txt且为非空文件名的命令行参数,会被读作 SQL 脚本 / dot-commands。 .timer参数可为"once"。.progress新增--timeout S。.indexes的PATTERN现在匹配索引名,而非被索引的表名——这是语义变更,同样属于不兼容点。
C 接口
新增 sqlite3_str_truncate()、sqlite3_str_free()、sqlite3_carray_bind_v2()。sqlite3_prepare_v3() 新增 SQLITE_PREPARE_FROM_DDL 选项;新增 SQLITE_UTF8_ZT 常量。sqlite3_limit() 新增 SQLITE_LIMIT_PARSER_DEPTH,sqlite3_db_config() 新增 SQLITE_DBCONFIG_FP_DIGITS。
查询规划器
EXCEPT/INTERSECT/UNION相关改动:改用 index 而非哈希表。- 星型 schema 的多表 join 顺序选择改进。
- 增强 EXISTS-to-JOIN 优化。
- 增强 omit-noop-join 优化。
GROUP BY e1 ORDER BY e2(e1/e2 仅 ASC/DESC 不同)可用单个索引完成优化。- 虚拟表对
DISTINCT的优化。
其他改动
- session 扩展新增逐个加改动的接口(
sqlite3changegroup_change等)。 - 浮点↔文本转换:实现重构提速;默认四舍五入到 17 位有效数字(此前所有版本为 15 位),可用
SQLITE_DBCONFIG_FP_DIGITS调整。需要跨版本比对文本输出的场景注意这一变化。 - 新增 self-healing index 特性,处理失效表达式索引的问题。
sqlite3_rsync新增-p|--port选项。- 停止支持 Windows RT。
3.54.0(计划 2026-10-15)draft 要点
- 停止支持 Windows XP 及更早版本(含 CE),要求 Vista+。
- 新增可选
diskused()扩展与.diskuseddot-command,取代sqlite3_analyzer。 - CLI 列头默认总显示;提示符可用
SQLITE_PS1/SQLITE_PS2;尊重NO_COLOR。 printf()/format()新增%J/%j。- 日期时间函数新增
"weekday -N"和"end of"修饰符。 sqlite3_limit()新增SQLITE_LIMIT_SCHEMA。
从 3.53 的两个版本号语义变更(dot-command 裸分号、.indexes 的 PATTERN)看,升级前值得先跑一遍现有 CLI 脚本;二进制嵌入场景则重点确认 WAL 修复与浮点输出位数变化是否影响既有断言。