SQLite 3.53.2 发布:修复漏洞、新增特性,多方面优化升级
SQLite:世界上使用最多的数据库引擎
SQLite 是一个 C 语言库,实现了一个小型、快速、独立、高可靠性、全功能的 SQL 数据库引擎,也是世界上使用最多的数据库引擎。其源代码属于公共领域,每个人都可以免费使用,用于任何目的。
SQLite 3.53.2 发布,更新内容丰富
SQLite 3.53.2 现已发布,具体更新内容如下:
1. 修复漏洞
修复 [WAL 重置数据库损坏漏洞](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fwal.html%23walresetbug)。
2. 添加查询结果格式化程序 (QRF) 库
添加[查询结果格式化程序 (QRF)](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsrc%2Ffile%2Fext%2Fqrf) 库,以便在等距字体屏幕上格式化 SQL 查询结果,使其易于阅读。
向 [TCL 接口](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Ftclsqlite.html)添加 [format 方法](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Ftclsqlite.html%23format),以便可以从 TCL 访问 QRF。QRF 用于 [CLI](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fcli.html) 中的结果格式化,从而提高显示功能。
3. SQL 语言新增特性
增强 [ALTER TABLE 语句](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Flang_altertable.html),允许添加和删除 NOT NULL 和 CHECK 约束。
[REINDEX EXPRESSIONS](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Flang_reindex.html) 语句用于重建表达式索引(可用于修复[过期的表达式索引](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fstaleexpridx.html))。
[TEMP](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Flang_createtrigger.html%23temptrig) [triggers](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Flang_createtrigger.html%23temptrig) 主体现在可以修改和 / 或查询主模式中的表。
增强 [VACUUM INTO](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Flang_vacuum.html%23vacuuminto),以便如果使用 URI 文件名作为目标,并且该文件名具有 reserve=N 查询参数(N 介于 0 和 255 之间),则生成的数据库副本的保留量设置为 N。
4. 新增 SQL 函数
[json_array_insert()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fjson1.html%23jarrayins);[jsonb_array_insert()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fjson1.html%23jarrayins)。
5. CLI 的改进
[对 .mode 命令](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fclimode.html)进行了重大改进。
由于新增了 QRF 扩展,结果格式得到了改进。例如,在表格输出模式下,数值现在默认右对齐。
交互式 CLI 会话的默认输出模式现在使用 QRF 格式,以 Unicode 方框字符构成的方框形式显示查询结果,从而提高可读性。批量 CLI 会话为了兼容性,仍使用旧版输出格式。
[dot-commands](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fcli.html%23dotcmd) 末尾的裸分号(未加引号)会被忽略(可能存在不兼容问题)。
修复 .testcase 和 .check 命令,使其能够正常工作,并在源代码树中包含的标准 SQLite 测试套件的脚本中使用这些命令。
命令行参数中与 *.sql 或 *.txt 匹配且为非空文件名的参数将被读取并解释为 SQL 语句和 / 或 [dot-commands](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fcli.html%23dotcmd) 的脚本。
现在 ".timer" 命令的参数可以是 "once",即仅在下一个 SQL 语句上运行计时器。
".progress"dot-command 新增的 "--timeout S" 选项会使 SQL 语句在 S 秒后中断。
".indexes" 命令已更改,现在 PATTERN 参数匹配索引名称,而不是被索引表的名称(从而使 PATTERN 参数真正发挥作用)。此外,".indexes" 命令还添加了几个新选项。
6. 新的 C-language interfaces
[sqlite3_str_truncate()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fstr_append.html);[sqlite3_str_free()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fstr_finish.html);[sqlite3_carray_bind_v2()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fcarray_bind.html)。
向 [sqlite3_prepare_v3()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fprepare.html) 添加 [SQLITE_PREPARE_FROM_DDL](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fc_prepare_dont_log.html%23sqlitepreparefromddl) 选项,允许[虚拟表](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fvtab.html)实现安全地准备从数据库模式派生的 SQL 语句。
添加了 [SQLITE_UTF8_ZT](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fc_any.html%23sqliteutf8zt) 常量,可将其用作 [sqlite3_result_text64()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fresult_blob.html) 或 [sqlite3_bind_text64()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fbind_blob.html) 的编码参数, 以指示该值为 UTF-8 编码并以零结尾。
[SQLITE_LIMIT_PARSER_DEPTH](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fc_limit_attached.html%23sqlitelimitparserdepth) 选项已添加到 [sqlite3_limit()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Flimit.html) 中。
[SQLITE_DBCONFIG_FP_DIGITS](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fc_dbconfig_defensive.html%23sqlitedbconfigfpdigits) 选项已添加到 [sqlite3_db_config() ](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fdb_config.html)中。
7. 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 语句。
8. 向会话扩展添加新接口
向[会话扩展](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsessionintro.html)添加新接口 ,允许应用程序将更改逐个添加到 sqlite3_changegroup 对象中:
[sqlite3changegroup_change_begin()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsession%2Fsqlite3changegroup_change_begin.html);[sqlite3changegroup_change_blob()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsession%2Fsqlite3changegroup_change_blob.html);[sqlite3changegroup_change_double()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsession%2Fsqlite3changegroup_change_double.html);[sqlite3changegroup_change_int64()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsession%2Fsqlite3changegroup_change_int64.html);[sqlite3changegroup_change_null()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsession%2Fsqlite3changegroup_change_null.html);[sqlite3changegroup_change_text()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsession%2Fsqlite3changegroup_change_text.html);[sqlite3changegroup_change_finish()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsession%2Fsqlite3changegroup_change_finish.html);[sqlite3changegroup_config()](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fsession%2Fsqlite3changegroup_config.html)。
9. 改进浮点数↔文本转换
重新实现以提高性能。
现在默认四舍五入[到 17 位有效数字](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Ffloatingpoint.html%23*fpdigits),而不是像之前所有版本那样保留 15 位。如果需要,可以使用 [sqlite3_db_config](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fdb_config.html) ( [SQLITE_DBCONFIG_FP_DIGITS](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fc3ref%2Fc_dbconfig_defensive.html%23sqlitedbconfigfpdigits) ) API(上文第 6g 项)更改此设置。
10. 添加 self-healing 功能
添加了 [self-healing](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fstaleexpridx.html%23selfheal) 功能,以解决[过期表达式索引](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Fstaleexpridx.html)问题。
11. 向 sqlite3_rsync 添加选项
向[ sqlite3_rsync](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsqlite.org%2Frsync.html) 添加 "-p|--port" 选项。
12. 停止对 Windows RT 的支持
停止对 [Windows RT ](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWindows_RT)的支持。
13. JavaScript/WASM
新增 "opfs-wl" VFS,其功能与 "opfs" VFS 相同,但使用 Web Locks 进行锁定,因此比 "opfs" 自定义协议能提供更公平的 lock sharing。"opfs-wl" 需要使用 `Atomics.waitAsync()`,因此比 "opfs" 要求更高的浏览器版本。
14. 修复 3.53.0 版本问题
修复了用户报告的 3.53.0 版本中存在的问题。 详情可参阅 [check-in timeline](https://sqlite.org/src/timeline?from=version-3.53.0&to=version-3.53.2&to2=branch-3.53&y=ci)。
更多详情可查看 :。提醒大家关注 SQLite 3.53.2 的这些更新,以便更好地使用该数据库引擎。
