SQLite 是一个 C 语言库,实现了一个小型、快速、独立、高可靠性、全功能的 SQL 数据库引擎。SQLite 是世界上使用最多的数据库引擎。SQLite 的源代码属于公共领域,每个人都可以免费使用,用于任何目的。
SQLite 3.47.0 现已发布,更新内容如下:
- 允许在 RAISE function 的第二个参数中使用任意表达式。
- 如果 RHS of the ->> operator 为负数,则从右侧计数访问数组元素。
- 修复很少使用的 unix-dotfile VFS 中回滚热日志文件的问题。
- 即使 FTS5 表使用未注册的非标准 tokenizer,现在也可以删除。
- 修复 group_concat() 聚合函数,使其在收到一个空字符串输入值时返回一个空字符串,而不是 NULL。
- 增强 generate_series() 表值函数,使其能够识别并使用其输出值的约束。
- 预更新 hooks 现在可以识别由 ALTER TABLE ADD COLUMN 添加的列何时具有非空默认值。
- 性能优化:
- 改进了与IN 运算符相关的子查询的重用,尤其是当 IN 运算符由于谓词下推而出现重复时。
- 对 IN 运算符右侧的子查询使用 Bloom 过滤器,以提高性能。
- 确保诸如“ SELECT func(a) FROM tab GROUP BY 1”之类的查询每行仅调用一次 func() 函数。
- 不会尝试在已知为非选择性的列上创建自动索引,因为该列已在已分析的其他索引中使用。
- 对查询计划器进行调整,以便它能为具有大量维度表的星型查询生成更好的计划。
- 添加“order-by-subquery”优化,如果所需的顺序是通过子查询中的 ORDER BY 子句自然获得的,则尝试禁用外部查询中的排序操作。
- 只要查询规划器能证明表达式的 subtype 永远不会被使用,“indexed-subtype-expr”优化就会力求使用作为索引一部分的表达式,而不是根据表值重新计算表达式。
- 进行各种编码调整以加快运行速度。
- SQLite 相关命令行程序的增强:
- 添加实验性的 sqlite3_rsync 程序。
- 向 CLI 添加扩展函数 median()、percentile()、percentile_cont() 和 percentile_disc()。
- 将 .www dot-command 添加到CLI。
- sqlite3_analyzer 实用程序现在可为 WITHOUT ROWID 提供细分统计信息。
- 如果第二个参数不存在,sqldiff 实用程序将避免创建空数据库。
- 增强 sqlite_dbpage 表值函数,使得可以使用 INSERT 来增加或减少数据库文件的大小。
- SQLite 不再使用“long double”数据类型,因为 long double 的硬件支持越来越少,并且 long double 给某些编译器工具链带来了挑战。取而代之的是,SQLite 在需要扩展精度时使用 Dekker 算法。
- SQLite 的 TCL 接口支持 TCL9。
- JavaScript/WASM:
- 修复 JavaScript“opfs”VFS 中导致损坏的错误。
- 纠正“opfs”VFS 的"mode=ro" handling。
- 解决几个特定于浏览器的 OPFS quirks。
- FTS5 Changes:
- 添加 fts5_tokenizer_v2 API 和 locale=1 选项。
- 添加 contentless_unindexed=1 选项,用于创建无内容的 fts5 表,将任何 UNINDEXED 列的值持久存储在数据库中。
- 即使 FTS5 表使用的 custom tokenizer 实现不可用,也允许将其删除。
更多详情可查看:https://sqlite.org/changes.html