sqlite 是一个 C 语言库,实现了一个小型、快速、独立、高可靠性、全功能的 sql 数据库引擎。sqlite 是世界上使用最多的数据库引擎。sqlite 的源代码属于公共领域,每个人都可以免费使用,用于任何目的。
Query planner改进:
在包含 GROUP BY 子句的聚合查询中使用索引表达式。
Query planner 提高了对索引何时是覆盖索引的认识,并相应地调整了预测的运行时间。
Query planner 更积极地使用 co-routines 而不是具体化子查询和视图。
针对内置表值函数 json_tree() 和 json_each() 的查询现在通常会将“ORDER BY rowid”视为 no-op。
增强 Query planner 使用索引表达式的能力, 即使表达式已被常量传播优化修改。(参见 0a539c7。)
添加 base64 和 base85 应用程序定义的函数作为扩展,并将该扩展包含在 CLI 中。
添加 sqlite3_stmt_scanstatus_v2() 接口。(此接口仅在使用 sqlITE_ENABLE_STMT_SCANSTATUS 编译 sqlite 时可用。)
使用 sqlite3_deserialize() 创建的内存数据库现在将其文件名报告为空字符串,而不是“x”。
对 CLI 的更改:
添加新的 base64() 和 base85() sql 函数
使用 sqlITE_ENABLE_STMT_SCANSTATUS 编译时,使用新的 sqlite3_stmt_scanstatus_v2() 接口增强 EXPLAIN QUERY PLAN 输出。
“.scanstats est”命令在配置文件中提供 query planner 估计。
继续提示指示输入当前是否在字符串文字、标识符文字、注释、触发器定义等内部。
对于 CLI 构建,现在默认禁用双引号字符串错误功能。遗留用例可以在运行时使用“ dbconfig dqs_dml on ”和“ .dbconfig dqs_ddl on”命令重新启用错误功能。
增强 PRAGMA integrity_check 命令,以便它检测表中的文本字符串何时与索引中的相同字符串等效但不逐字节相同。
增强 carray 表值函数,使其能够绑定 BLOB 对象数组。
添加了 sqlite3_is_interrupted() 接口。
对 sqlite3_prepare() 和类似函数的长时间调用现在会调用进度处理程序回调,并对 sqlite3_interrupt() 做出反应。
sqlite3_vtab_in_first() 和 sqlite3_vtab_in_next() 函数得到增强,以便它们可靠地检测是否在未使用 sqlite3_vtab_in() 为多值 IN 处理选择的参数上调用它们。在这种情况下,它们返回 sqlITE_ERROR 而不是 sqlITE_MISUSE。
解析器现在会忽略 IN 运算符右侧子查询周围的多余括号,因此 sqlite 现在在这方面与 Postgresql 的工作方式相同。以前,sqlite 将子查询视为带有隐含“LIMIT 1”的表达式。
向 sqlite3_file_control() API添加了 sqlITE_FCNTL_RESET_CACHE 选项。
Makefile 改进:
新的 makefile target“sqlite3r.c”构建了一个包含恢复扩展的合并。
新的 makefile targets 是“devtest”和“releasetest”,分别用于在执行 check-in 之前运行快速开发测试和执行完整的发布测试。
其他性能增强。
更多详情可查看:https://www.sqlite.org/releaselog/3_41_0.html