代码 SQLite 3.51:jsonb_each()/jsonb_tree() 返回 JSONB,carray/percentile 编进 amalgamation

2026-10-09 21:06:42

SQLite 3.51:jsonb_each()/jsonb_tree() 返回 JSONB,carray/percentile 编进 amalgamation

SQLite 3.51.0 发布于 2025-11-04,随后 3.51.1、3.51.2、3.51.3 分别修掉优化回归和 WAL-reset 数据损坏。变更日志:3.51.0、3.51.3。

3.51.0:宏与 JSON

sqlite3.h 新增三个宏:

  • SQLITE_SCM_BRANCH:分支名。
  • SQLITE_SCM_TAGS:check-in 上空格分隔的标签。
  • SQLITE_SCM_DATETIME:check-in 的 ISO-8601 日期/时间。

新增两个 JSON 函数 jsonb_each() 和 jsonb_tree()。它们与 json_each()、json_tree() 行为相同,区别是当 type 为 'array' 或 'object' 时,value 列返回 JSONB。

carray 与 percentile 编进 amalgamation

carray 和 percentile 扩展现在编进 amalgamation,但默认关闭,必须在编译期开启:

-DSQLITE_ENABLE_CARRAY
-DSQLITE_ENABLE_PERCENTILE

两个选项可以单独使用,也可以同时使用。

TCL 与 CLI

TCL 接口:

  • eval 命令新增 -asdict 标志。
  • 用户定义函数可以 break,返回 SQL NULL。

CLI:

  • .timer 精度到微秒。
  • box/column 格式化支持双宽字符。
  • .imposter 命令提供只读 imposter 表,可与 VACUUM 一起工作,且不需要 --unsafe-testing。
  • CLI 和 .open 命令新增 --ifexists 选项。
  • .width 限制为不超过 30000。

性能

  • 提交读事务占用更少 CPU 周期。
  • 更早检测不返回行的连接。
  • 如果标量子查询的结果不会改变整体表达式,则避免求值。
  • 窗口函数使用 BETWEEN :x FOLLOWING AND :y FOLLOWING 且 :y 较大时更快。

PRAGMA、API 与 session

新增 PRAGMA wal_checkpoint=NOOP,以及 sqlite3_wal_checkpoint_v2() 的 SQLITE_CHECKPOINT_NOOP 参数。

新增 sqlite3_set_errmsg() API,供扩展使用。

新增 sqlite3_db_status64() API,类似 sqlite3_db_status(),但返回 64 位结果。

sqlite3_db_status() 和 sqlite3_db_status64() 新增 SQLITE_DBSTATUS_TEMPBUF_SPILL 选项。

session 扩展新增 sqlite3changeset_apply_v3()。

printf、FTS5、STRICT、WASM 与 POSIX 锁

printf()/format():当 + 标志省略、# 标志存在,且所有显示数字都是 '0' 时,负浮点数省略前导 -,避免显示 -0.00,改为显示 0.00。例如输出 0.00 而不是 -0.00。

FTS5 错误消息改进。

STRICT 对计算列强制类型。

JavaScript/WASM 现在支持 64-bit WASM。canonical builds 仍是 32-bit,但 make builds 是 64-bit。

改进对数据库损坏的抵抗能力:应用使用 close() 破坏 POSIX advisory locks 时,SQLite 能更好地应对。

3.51.1 / 3.51.2 / 3.51.3 修复

3.51.1(2025-11-28):

  • 修复嵌套 EXISTS 查询因 item 6b 优化产生的错误结果。
  • 修复 fts5vocab 虚拟表的潜在 bug,该 bug 由新优化暴露。

3.51.2(2026-01-09):

  • 修复新的 broken-posix-lock 检测逻辑中的 obscure deadlock(item 17)。
  • 修复 EXISTS-to-JOIN 优化(item 6b)的多个问题。

3.51.3(2026-03-13):

  • 修复 WAL-reset 数据库损坏 bug。
  • 其他小 bug 修复。

来源:https://www.sqlite.org/releaselog/3_51_0.html 和 https://www.sqlite.org/releaselog/3_51_3.html。

复制全文 生成海报 SQLite 数据库 C 版本发布

推荐文章

程序员茄子在线接单