发布历史
此页面提供了对 SQLite 更改的高级摘要。有关详细信息,请参阅位于 http://www.sqlite.org/src/timeline和 http://www.sqlite.org/src/timeline?t=release的 Fossil 签入日志。请参阅年表,这是一份简明的发布列表。
2022-07-21 (3.39.2)
- 修复查询规划器中与在存在 LEFT JOIN 的情况下重新排列 FROM 子句项的顺序相关的性能回归。
- 修复 CVE-2022-35737、Chromium 错误 1343348 和 1345947、
论坛帖子 3607259d3c以及内部测试发现的其他小问题。
哈希:
- SQLITE_SOURCE_ID:2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603
- sqlite3.c 的 SHA3-256:bffbaafa94706f0ed234f183af3eb46e6485e7e2c75983173ded76e0da805f11
2022-07-13 (3.39.1)
- 修复使用包含复合 SELECT 的视图的查询的不正确结果,其中只有一个分支包含 RIGHT JOIN,并且视图不是包含该视图的查询的第一个 FROM 子句术语。 论坛帖子 174afeae5734d42d。
- 修复一些无害的编译器警告。
- 修复了ALTER TABLE RENAME的一个长期存在的问题,该问题只有在sqlite3_limit ( SQLITE_LIMIT_SQL_LENGTH ) 设置为非常小的值时才会出现。
- 修复FTS3中一个长期存在的问题,该问题只有在使用SQLITE_ENABLE_FTS3_PARENTHESIS编译时选项编译时才会出现。
- 修复构建,以便在同时提供 SQLITE_DEBUG和 SQLITE_OMIT_WINDOWFUNC编译时选项时工作。
- 修复REGEXP扩展的初始前缀优化,即使前缀包含需要 3 字节 UTF8 编码的字符,它也能正常工作。
- 增强sqlite_stmt虚拟表,以便它缓冲所有输出。
哈希:
- SQLITE_SOURCE_ID:2022-07-13 19:41:41 7c16541a0efb3985578181171c9f2bb3fdc4bad6a2ec85c6e31ab96f3eff201f
- sqlite3.c 的 SHA3-256:6d13fcf1c31133da541d1eb8a83552d746f39b81a0657bd4077fed0221749511
2022-06-25 (3.39.0)
- 添加(早该)对RIGHT 和 FULL OUTER JOIN的支持。
- 添加新的二进制比较运算符IS NOT DISTINCT FROM和IS DISTINCT FROM ,它们分别等效于 IS 和 IS NOT,以与 PostgreSQL 和 SQL 标准兼容。
- 从sqlite3_vtab_distinct()接口添加一个新的返回代码(值“3”) ,指示同时具有 DISTINCT 和 ORDER BY 子句的查询。
- 添加了sqlite3_db_name()接口。
- unix 操作系统接口解析数据库文件名中的所有符号链接,以便在打开文件之前为数据库创建规范名称。
- 推迟实体化视图,直到实际需要实体化,从而避免在实体化从未被使用时进行不必要的工作。
- 现在允许在任何聚合查询中使用SELECT 语句的HAVING 子句,甚至是没有GROUP BY 子句的查询。
- 许多微优化共同将 CPU 周期减少了大约 2.3%。
哈希:
- SQLITE_SOURCE_ID:2022-06-25 14:57:57 14e166f40dbfa6e055543f8301525f2ca2e96a02a57269818b9e69e162e98918
- sqlite3.c 的 SHA3-256:d9c439cacad5e4992d0d25989cfd27a4c4f59a3183c97873bc03f0ad1aa78b7a
2022-05-06 (3.38.5)
- 修复3.38.4 版本
CLI中的错误。
哈希:
- SQLITE_SOURCE_ID:2022-05-06 15:25:27 78d9c993d404cdfaa7fdd2973fa1052e3da9f66215cff9c5540ebe55c407d9fe
- sqlite3.c 的 SHA3-256:b05ef42ed234009b4b3dfb36c5f5ccf6d728da80f25ee560291269cf6cfe635f
2022-05-04 (3.38.4)
- 修复3.38.0版本新增的Bloom filter下拉优化字节码问题,当下拉优化遇到NULL键时,字节码错误导致字节码引擎进入死循环。 论坛帖子 2482b32700384a0f。
- 其他小补丁。详情请见
时间线。
哈希:
- SQLITE_SOURCE_ID:2022-05-04 15:45:55 d402f49871152670a62f4f28cacb15d814f2c1644e9347ad7d258e562978e45e
- sqlite3.c 的 SHA3-256:e6a50effb021858c200e885664611ed3c5e949413ff2dca452ac7ee336b9de1d
2022-04-27 (3.38.3)
- 修复了查询规划器在优化自动索引和 Bloom 过滤器构造时过于积极,使用不适当的 ON 子句术语来限制自动索引或 Bloom 过滤器的大小,并导致输出中丢失行的情况。 论坛帖子 0d3200f4f3bcd3a3。
- 其他小补丁。详情请见
时间线。
哈希:
- SQLITE_SOURCE_ID:2022-04-27 12:03:15 9547e2c38a1c6f751a77d4d796894dec4dc5d8f5d79b1cd39e1ffc50df7b3be4
- sqlite3.c 的 SHA3-256:d4d66feffad66ea82073fbb97ae9c84e3615887ebc5168226ccee28d82424517
2022-03-26 (3.38.2)
- 使用新的 Bloom 过滤器优化修复用户发现的问题,该问题在使用 WHERE 子句约束执行 LEFT JOIN 时可能会导致错误答案,该 WHERE 子句约束表示 LEFT JOIN 右表上的列之一为 NULL。请参阅 论坛主题 031e262a89b6a9d2。
- 其他小补丁。详情请见
时间线。
哈希:
- SQLITE_SOURCE_ID:2022-03-26 13:51:10 d33c709cc0af66bc5b6dc6216eba9f1f0b40960b9ae83694c986fbf4c1d6f08f
- sqlite3.c 的 SHA3-256:0fbac6b6999f894184899431fb77b9792324c61246b2a010d736694ccaa6d613
2022-03-12 (3.38.1)
- 修复了新的 Bloom 过滤器优化可能导致一些模糊查询得到错误答案的问题。
- 修复日期和时间函数的本地时间修饰符,使其保留小数秒。
- 修复sqlite_offset SQL 函数,使其即使在极端情况下也能正常工作,例如当参数是虚拟列或视图的列时。
- 修复虚拟表上的行值 IN 运算符约束,以便即使虚拟表实现依赖字节码来过滤不满足约束的行,它们也能正常工作。
- 对 assert() 语句、测试用例和文档的其他小修复。有关详细信息,请参阅源代码时间线
。
哈希:
- SQLITE_SOURCE_ID:2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc
- sqlite3.c 的 SHA3-256:262ba071e960a8a0a6ce39307ae30244a2b0dc9fe1c4c09d0e1070d4353cd92c
2022-02-22 (3.38.0)
- 添加了 -> 和 ->> 运算符,以便更轻松地处理 JSON。新的运算符与 MySQL 和 PostgreSQL 兼容。
- JSON 函数现在是内置函数。不再需要使用-DSQLITE_ENABLE_JSON1编译时选项来启用 JSON 支持。JSON 默认开启。使用新的-DSQLITE_OMIT_JSON编译时选项 禁用 JSON 接口。
- 日期和时间功能的增强:
- 添加了unixepoch() 函数。
- 添加了auto 修饰符和julianday 修饰符。
- 将printf() SQL 函数重命名为format()以获得更好的兼容性。原始 printf() 名称保留为向后兼容的别名。
- 添加了sqlite3_error_offset()接口,有时可以帮助将 SQL 错误定位到输入 SQL 文本中的特定字符,以便应用程序可以提供更好的错误消息。
- 增强了虚拟表的接口,如下所示:
- 添加了sqlite3_vtab_distinct()接口。
- 添加了sqlite3_vtab_rhs_value()接口。
- 添加了新的运算符类型SQLITE_INDEX_CONSTRAINT_LIMIT 和SQLITE_INDEX_CONSTRAINT_OFFSET。
- 添加了sqlite3_vtab_in()接口(及相关接口),使虚拟表能够一次处理所有IN 运算符约束,而不是分别处理 IN 运算符右侧的每个值。
- CLI增强功能:
- 列输出模式得到增强,可以正确处理文本中嵌入的制表符和换行符。
- 向柱状输出模式添加了“--wrap N”、“--wordwrap on”和“--quote”等选项。
- 添加了.mode qbox别名。
- .import 命令自动消除列名 的歧义。
- 使用新的sqlite3_error_offset()接口提供更好的错误消息。
- 查询规划器增强功能:
- 使用布隆过滤器加速大型分析查询。
- 使用平衡的合并树评估具有 ORDER BY 子句的 UNION 或 UNION ALL 复合 SELECT 语句。
- ALTER TABLE语句更改为静默忽略
sqlite_schema 表中在PRAGMA writable_schema=ON时不解析的条目。
哈希:
- SQLITE_SOURCE_ID:2022-02-22 18:58:40 40fa792d359f84c3b9e9d6623743e1a59826274e221df1bde8f47086968a1bab
- sqlite3.c 的 SHA3-256:a69af0a88d59271a2dd3c846a3e93cbd29e7c499864f6c0462a3b4160bee1762
2022-01-06 (3.37.2)
- 修复版本 3.35.0 (2021-03-12) 中 引入的错误, 如果在PRAGMA temp_store=MEMORY模式下回滚SAVEPOINT并进行其他更改,然后提交外部事务, 该错误可能会导致数据库损坏。入住 73c2b50211d3ae26
- 修复了 ON DELETE CASCADE 和 ON UPDATE CASCADE 的一个长期存在的问题,其中用于实现级联更改的字节码缓存在本地 DDL 更改后未被重置。 入住 5232c9777fe4fb13。
- 不应影响生产构建的其他小修复。
哈希:
- SQLITE_SOURCE_ID:2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5d17a0
- sqlite3.c 的 SHA3-256:1bb01c382295cba85ec4685cedc52a7477cdae71cc37f1ad0f48719a17af1e1e
2021-12-30 (3.37.1)
- 修复了3.35.0 版UPSERT增强功能引入的错误,该错误可能会导致为某些晦涩但有效的 SQL 生成不正确的字节码,并可能导致 NULL 指针取消引用。
- 修复读取损坏的数据库文件时 可能在FTS5中发生的 OOB 读取。
- 改进了CLI中 --safe 选项的稳健性。
- 对 assert() 语句和测试用例的其他小修复。
哈希:
- SQLITE_SOURCE_ID:2021-12-30 15:30:28 378629bf2ea546f73eee84063c5358439a12f7300e433f18c9e1bddd948dea62
- sqlite3.c 的 SHA3-256:915afb3f29c2d217ea0c283326a9df7d505e6c73b40236f0b33ded91f812d174
2021-11-27 (3.37.0)
- STRICT 表为喜欢这种东西的开发人员提供了一种规范的数据类型管理方式。
- 添加包含 CHECK 约束的列或包含NOT NULL 约束的生成列时,ALTER TABLE ADD COLUMN现在会根据数据库中预先存在的行检查新约束,并且只有在没有违反约束的情况下才会继续。
- 添加了PRAGMA table_list语句。
- CLI增强功能:
- 添加.connection命令,允许 CLI 同时保持多个数据库连接打开。
- 添加--safe 命令行选项,禁用 点命令和 SQL 语句,这些语句和 SQL 语句可能会导致超出命令行上指定的单个数据库文件的副作用。
- 读取跨越多行的 SQL 语句时的性能改进。
- 添加了sqlite3_autovacuum_pages()接口。
- sqlite3_deserialize()没有也从来没有为 TEMP 数据库工作过。该限制现已在文档中注明。
- 如果删除子查询和视图的 ORDER BY 子句不会改变查询的语义,查询规划器现在会省略这些子句。
- generate_series表值函数扩展已修改,现在需要第一个参数(“START”)。这样做是为了演示如何编写具有所需参数的表值函数。使用 -DZERO_ARGUMENT_GENERATE_SERIES 编译时选项可以使用遗留行为。
- 添加了新的sqlite3_changes64()和sqlite3_total_changes64()接口。
- 向sqlite3_open_v2()添加了SQLITE_OPEN_EXRESCODE标志选项。
- 使用更少的内存来保存数据库模式。
哈希:
- SQLITE_SOURCE_ID:2021-11-27 14:13:22 bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a
- sqlite3.c 的 SHA3-256:a202a950ab401cda052e81259e96d6e64ad91faaaaf5690d769f64c2ab962f27
2021-06-18 (3.36.0)
- 改进EXPLAIN QUERY PLAN输出,使其更易于理解。
- 令牌开头的字节顺序标记被跳过,就好像它们是空白一样。
- 任何尝试访问VIEW 或子查询的rowid都会引发错误。以前,VIEW 的 rowid 是不确定的,通常为 NULL。-DSQLITE_ALLOW_ROWID_IN_VIEW 编译时选项可用于恢复需要它的应用程序的遗留行为。
- sqlite3_deserialize()和sqlite3_serialize()接口现在默认启用。不再需要 -DSQLITE_ENABLE_DESERIALIZE 编译时选项。相反,有一个新的-DSQLITE_OMIT_DESERIALIZE 编译时选项可以忽略这些接口。
- “memdb”VFS 现在允许同一进程中的多个数据库连接共享同一个内存数据库,只要数据库名称以“/”开头即可。
- 取消 EXISTS-to-IN 优化( SQLite 3.35.0 更改日志中的第 8b 项),因为它被发现更经常地减慢查询而不是加速查询。
- 改进常量传播优化,使其适用于非连接查询。
- REGEXP 扩展现在包含在CLI构建中。
哈希:
- SQLITE_SOURCE_ID:2021-06-18 18:36:39 5c9a6c06871cb9fe42814af9c039eb6da5427a6ec28f187af7ebfb62eafa66e5
- sqlite3.c 的 SHA3-256:2a8e87aaa414ac2d45ace8eb74e710935423607a8de0fafcb36bbde5b952d157
2021-04-19 (3.35.5)
- 修复新的 ALTER TABLE DROP COLUMN 功能中可能损坏数据库文件的缺陷。
- 修复可能导致查询结果不正确的模糊查询优化器问题。
哈希:
- SQLITE_SOURCE_ID:2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886
- sqlite3.c 的 SHA3-256:e42291343e8f03940e57fffcf1631e7921013b94419c2f943e816d3edf4e1bbe
2021-04-02 (3.35.4)
- 修复上面第 8b 项确定的查询规划器优化中的缺陷。票 de7db14784a08053。
- 修复新RETURNING语法中的一个缺陷。机票 132994c8b1063bfb。
- 修复新的RETURNING功能,以便在 RETURNING 子句中的某个术语引用未知表时引发错误,而不是默默地忽略该错误。
- 修复与聚合函数处理关联的断言,该断言被下推优化错误触发。
哈希:
- SQLITE_SOURCE_ID:2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
- sqlite3.c 的 SHA3-256:528b8a26bf5ffd4c7b4647b5b799f86e8fb1a075f715b87a414e94fba3d09dbe
2021-03-26 (3.35.3)
- 增强字节码引擎的 OP_OpenDup 操作码,即使被复制的游标本身来自 OP_OpenDup,它也能正常工作。修复 工单 bb8a9fd4a9b7fce5。由于最近的 MATERIALIZED 提示增强,此问题才被发现。
- 在具体化相关公用表表达式时,请针对每个用例单独执行此操作,因为这是正确性所必需的。这修复了由 MATERIALIZED 提示增强功能引入的问题。
- 修复 unix VFS的文件名规范器中的问题。
- 修复CLI中的“框”输出模式,使其适用于返回一行或多行零列的语句(例如PRAGMA incremental_vacuum)。 论坛帖子 afbbcb5b72。
- 改进了由错误的公用表表达式生成的错误消息。 论坛帖子 aa5a0431c99e。
- 修复一些不正确的 assert() 语句。
- 修复SELECT 语句语法图,以便正确显示 FROM 子句语法。 论坛帖子 9ed02582fe。
- 修复 EBCDIC 字符分类器,使其将换行符理解为空格。 论坛帖子 58540ce22dcd。
- 在(不受支持的)wholenumber 虚拟表扩展的实现中改进了xBestIndex方法,
以便它可以更好地说服查询规划器避免尝试具体化具有无限行数的表。
论坛帖子 b52a020ce4。
哈希:
- SQLITE_SOURCE_ID:2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a
- sqlite3.c 的 SHA3-256:91ca6c0a30ebfdba4420bb35f4fd9149d13e45fc853d86ad7527db363e282683
2021-03-17 (3.35.2)
- 修复了 版本 3.35.0 中引入 的appendvfs.c扩展中的问题。
- 确保没有参数的日期/时间函数(生成依赖于当前时间的响应)被视为 非确定性函数。机票 2c6c8689fb5f3d2f
- 修复了sqldiff实用程序中与虚拟表定义中的异常空白字符有关的问题。
- 限制 3.35.0 版本中 8c 项描述的新 UNION ALL 优化,使其不会尝试创建太多新的子查询。有关详细信息,请参阅论坛主题 140a67d3d2
。
哈希:
- SQLITE_SOURCE_ID:2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827
- sqlite3.c 的 SHA3-256:e8edc7b1512a2e050d548d0840bec6eef83cc297af1426c34c0ee8720f378a11
2021-03-15 (3.35.1)
- 修复新的 DROP COLUMN 功能中的一个错误,该功能用于索引定义中引用的索引列。
- 改进CLI中.dump命令的内置文档。
哈希:
- SQLITE_SOURCE_ID:2021-03-15 16:53:57 aea12399bf1fdc76af43499d4624c3afa17c3e6c2459b71c195804bb98def66a
- sqlite3.c 的 SHA3-256:fc79e27fd030226c07691b7d7c23aa81c8d46bc3bef5af39060e1507c82b0523
2021-03-12 (3.35.0)
- 添加了内置 SQL 数学函数 ()。(需要 -DSQLITE_ENABLE_MATH_FUNCTIONS编译时选项。)
- 添加了对ALTER TABLE DROP COLUMN的支持。
- 推广UPSERT:
- 允许按顺序评估多个 ON CONFLICT 子句,
- 最后的 ON CONFLICT 子句可以省略冲突目标,但仍使用 DO UPDATE。
- 添加对DELETE、INSERT和 UPDATE语句 的RETURNING子句的支持。
- 在包含非常大的 TEXT 或 BLOB 值的数据库上运行VACUUM时使用较少的内存。不再需要一次将整个 TEXT 或 BLOB 保存在内存中。
- 在指定公用表表达式时添加对MATERIALIZED和NOT MATERIALIZED提示的支持。默认行为以前是 NOT MATERIALIZED,但现在对于多次使用的 CTE 更改为 MATERIALIZED。
- SQLITE_DBCONFIG_ENABLE_TRIGGER和SQLITE_DBCONFIG_ENABLE_VIEW设置已修改,以便 它们仅控制主数据库架构或附加数据库架构中的触发器和视图,而不是 TEMP 架构中的触发器和视图。始终允许使用 TEMP 触发器和视图。
- 查询规划器/优化器改进:
- 增强最小/最大优化,使其更好地与 IN 运算符和先前版本的 OP_SeekScan 优化配合使用。
- 尝试在 WHERE 子句中处理 EXISTS 运算符,就好像它们是 IN 运算符一样,在这种情况下这是一个有效的转换并且似乎可以提高性能。
- 即使父查询是一个连接,也 允许 UNION ALL 子查询被展平。
- 如果合适,在 WHERE 子句中的 IS NOT NULL 表达式上使用索引,即使禁用了 STAT4。
- “x IS NULL”或“x IS NOT NULL”形式的表达式可能会简单地转换为 FALSE 或 TRUE,如果“x”是一个具有“NOT NULL”约束且不涉及外部连接的列。
- 如果 UPDATE 不修改与外键关联的任何列,请避免检查 UPDATE 语句上的外键约束。
- 允许将 WHERE 项下推到包含窗口函数的子查询中,只要 WHERE 项完全由常量和在子查询中所有窗口函数的 PARTITION BY 子句中找到的表达式副本组成。
- CLI增强功能:
- 增强“.stats”命令以接受新参数“stmt”和“vmstep”,从而分别显示准备语句统计信息和仅显示虚拟机步数。
- 添加“.filectrl data_version”命令。
- 增强“.once”和“.output”命令,以便如果目标参数以“|”开头 (表明输出被重定向到一个管道)那么这个参数不需要被引用。
- Bug修复:
- 在处理带有相关 WHERE 子句和“HAVING 0”子句的语法不正确的 SELECT 语句时,修复潜在的 NULL 指针取消引用。(也在 3.34.1 补丁版本中修复。)
- 修复3.33.0 版本IN-operator 优化 中可能导致错误答案的错误。
- 如果模式以“%”结尾并且存在“ESCAPE '_'”子句,则 修复LIKE 运算符的错误答案。
哈希:
- SQLITE_SOURCE_ID:2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
- sqlite3.c 的 SHA3-256:73a740d881735bef9de7f7bce8c9e6b9e57fe3e77fa7d76a6e8fc5c262fbaedf
2021-01-20 (3.34.1)
- 修复了在处理具有相关 WHERE 子句和“HAVING 0”子句且父查询是聚合的子查询时潜在的释放后使用错误。
- 修复文档拼写错误
- 修复扩展中的小问题。
哈希:
- SQLITE_SOURCE_ID:2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
- sqlite3.c 的 SHA3-256:799a7be90651fc7296113b641a70b028c142d767b25af1d0a78f93dcf1a2bf20
2020-12-01 (3.34.0)
- 添加了sqlite3_txn_state()接口,用于报告数据库连接的当前事务状态。
- 增强递归公用表表达式以支持两个或更多递归项,就像 SQL Server 所做的那样,因为这有助于使 针对图形的查询更容易编写和更快地执行。
- 改进了CHECK 约束失败的错误消息。
- CLI增强功能:
- .read点命令现在除了文件名外还接受管道 。
- 向.dump点命令 添加了选项 --data-only 和 --nosys 。
- 向.schema点命令添加了 --nosys 选项。
- 对于.import点命令 ,表名引用可以正常工作。
- generate_series(START , END,STEP)表值函数扩展现已内置到 CLI 中。
- .databases点命令现在显示每个数据库文件的状态,由sqlite3_db_readonly()和 sqlite3_txn_state()确定。
- 添加了设置 .mode tabs的 --tabs 命令行选项 。
- 如果无法打开以其参数命名的文件,则 --init 选项会报告错误。--init 选项现在也支持 --bail 选项。
- 查询规划器改进:
- 改进了对运行 DISTINCT 运算符的成本的估计。
- 当使用多列索引执行 UPDATE 或 DELETE 时,其中只有少数索引的较早列对索引查找有用,推迟执行主表查找,直到所有 WHERE 子句约束都已被评估,以防这些约束可以被索引的未使用的后续项覆盖,从而避免不必要的主表查找。
- 新的 OP_SeekScan 操作码用于在后面的列受 IN 运算符约束时提高多列索引查找的性能。
- BEGIN IMMEDIATE和BEGIN EXCLUSIVE命令现在可以工作,即使一个或多个附加的数据库文件是只读的。
- 增强的 FTS5支持三元组索引。
- 在有数百个连接同时访问同一个数据库文件的情况下, 改进了WAL 模式锁定原语的性能。
- 增强了carray() 表值函数以包括使用辅助sqlite3_carray_bind()接口 绑定的单参数形式。
- 为了与 SQL Server 兼容, substr() SQL 函数现在也可以称为“substring()”。
- 语法图现在作为
Pikchr脚本实现并呈现为 SVG,以提高易读性和易维护性。
哈希:
- SQLITE_SOURCE_ID:2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b
- sqlite3.c 的 SHA3-256:fbd895b0655a337b2cd657675f314188a4e9fe614444cc63dfeb3f066f674514
2020-08-14 (3.33.0)
- 支持遵循 PostgreSQL 语法 的UPDATE FROM 。
- 将数据库文件的最大大小增加到 281 TB。
- 扩展了PRAGMA integrity_check语句,以便可以选择将其限制为仅验证单个表及其索引,而不是整个数据库文件。
- 添加了用于执行任意精度十进制算术 的小数扩展。
- 用于处理 IEEE 754 binary64 数字 的ieee754 扩展的增强。
- CLI增强功能:
- 查询规划器改进:
- 添加为使用INDEXED BY的查询查找全索引扫描查询计划的功能 ,这在以前会因“无查询解决方案”而失败。
- 更好地检测缺失、不完整和/或不可靠的sqlite_stat1 数据,并在存在错误信息的情况下生成良好的查询计划。
- 改进了查询的性能,例如“SELECT min(x) FROM t WHERE y IN (?,?,?)”,假设索引在 t(x,y) 上。
- 在WAL 模式下,如果写入器崩溃并使shm 文件处于不一致状态,即使有活动的读取事务,后续事务现在也能够恢复 shm 文件。在此增强之前,shm 文件恢复那种情况会导致SQLITE_PROTOCOL错误。
哈希:
- SQLITE_SOURCE_ID:2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f
- sqlite3.c 的 SHA3-256:d00b7fffa6d33af2303430eaf394321da2960604d25a4471c7af566344f2abf9
2020-06-18 (3.32.3)
- 各种小错误修复,包括票证
8f157e8010b22af0、9fb26d37cefaba40、
e367f31901ea8700、
b706351ce2ecf59a、
7c6d876f84e6e7e2和
c8d3b9f0a750a529的
修复。
哈希:
- SQLITE_SOURCE_ID:2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd
- sqlite3.c 的 SHA3-256:b62b77ee1c561a69a71bb557694aaa5141f1714c1ff6cc1ba8aa8733c92d4f52
2020-06-04 (3.32.2)
- 修复了字节码引擎中一个长期存在的错误,该错误可能导致
COMMIT命令报告成功,而实际上它未能提交。票
810dc8038872e212
哈希:
- SQLITE_SOURCE_ID:2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c
- sqlite3.c 的 SHA3-256:f17a2a57f7eebc72d405f3b640b4a49bcd02364a9c36e04feeb145eccafa3f8d
2020-05-25 (3.32.1)
- 修复两个长期存在的错误,这些错误允许恶意 SQL 语句使运行 SQLite 的进程崩溃。这些错误是在 3.32.0 发布后大约 24 小时由第三方公布的,但并非特定于 3.32.0 版本。
- 其他较小的编译器警告修复等。
哈希:
- SQLITE_SOURCE_ID:2020-05-25 16:19:56 0c1fcf4711a2e66c813aed38cf41cd3e2123ee8eb6db98118086764c4ba83350
- sqlite3.c 的 SHA3-256:f695ae21abf045e4ee77980a67ab2c6e03275009e593ee860a2eabf840482372
2020-05-22 (3.32.0)
- 添加了对使用 PRAGMA analysis_limit命令 的近似分析的支持。
- 添加了字节码虚拟表。
- 将校验和 VFS shim添加到源代码树中包含的一组运行时可加载扩展。
- 添加了iif() SQL 函数。
- INSERT 和 UPDATE 语句现在总是 在计算CHECK 约束之前应用列关联。从理论上讲,此错误修复可能会导致具有非正统 CHECK 约束的遗留数据库出现问题,要求 INSERT 的输入类型与声明的列类型不同。有关详细信息,请参阅票 86ba67afafded936 。
- 添加了sqlite3_create_filename()、sqlite3_free_filename()和sqlite3_database_file_object() 接口以更好地支持VFS shim实现。
- 将参数 数量的默认上限从 999 增加到 32766。
- 添加了UINT 整理序列的代码作为可选的 可加载扩展。
- CLI的增强功能:
- LIKE运算符的ESCAPE子句现在覆盖通配符,因此行为与 PostgreSQL 的行为相匹配。
- SQLITE_SOURCE_ID:2020-05-22 17:46:16 5998789c9c744bce92e4cff7636bba800a75574243d6977e1fc8281e360f8d5a
- sqlite3.c 的 SHA3-256:33ed868b21b62ce1d0352ed88bdbd9880a42f29046497a222df6459fc32a356f
2020-01-27 (3.31.1)
- 恢复仅供内部使用的 SQLite 数据结构的数据布局。使用 SQLite 的应用程序不应该引用内部 SQLite 数据结构,但有些应用程序无论如何都会引用,并且在 3.30.0 中对一个这样的数据结构的更改破坏了一个流行且广泛部署的应用程序。恢复 SQLite 中的更改,至少是暂时的,让行为不当的应用程序开发人员有时间修复他们的代码。
- 修复 sqlite3ext.h 头文件中的拼写错误,该拼写错误阻止了
sqlite3_stmt_isexplain()和sqlite3_value_frombind()接口从运行时可加载扩展中调用。
哈希:
- SQLITE_SOURCE_ID:2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
- sqlite3.c 的 SHA3-256:de465c64f09529429a38cbdf637acce4dfda6897f93e3db3594009e0fed56d27
2020-01-22 (3.31.0)
- 添加对生成列的支持。
- 添加sqlite3_hard_heap_limit64()接口和对应的 PRAGMA hard_heap_limit命令。
- 增强function_list pragma以显示每个函数的参数数量、函数类型(标量、聚合、窗口)和函数属性标志SQLITE_DETERMINISTIC、SQLITE_DIRECTONLY、 SQLITE_INNOCUOUS和/或SQLITE_SUBTYPE。
- 将聚合模式功能添加到 DBSTAT 虚拟表。
- 将SQLITE_OPEN_NOFOLLOW选项添加到sqlite3_open_v2()以防止 SQLite 打开符号链接。
- 为JSON 函数路径参数添加了“#-N”数组表示法。
- 添加了SQLITE_DBCONFIG_TRUSTED_SCHEMA连接设置,它也可以通过新的trusted_schema pragma和在编译时使用-DSQLITE_TRUSTED_SCHEMA编译时选项进行控制。
- 添加了 API sqlite3_filename_database()、sqlite3_filename_journal()和 sqlite3_filename_wal(),它们对专门的扩展很有用。
- 添加sqlite3_uri_key()接口。
- 升级了sqlite3_uri_parameter()函数,以便除了数据库文件名之外,它还可以使用回滚日志或 WAL 文件名。
- 提供使用新属性SQLITE_INNOCUOUS或SQLITE_DIRECTONLY标记应用程序定义的 SQL 函数的能力。
- 向sqlite3_vtab_config()添加新动词,以便虚拟表的xConnect方法可以将虚拟表声明为 SQLITE_VTAB_INNOCUOUS或SQLITE_VTAB_DIRECTONLY。
- 对sqlite3_interrupt()的响应更快。
- 添加了uuid.c扩展模块,实现了处理 RFC-4122 UUID 的功能。
- 后备内存分配器得到增强,以支持两个独立的内存池,每个池中分配的大小不同。这允许后备覆盖更多内存分配,同时将每个连接的堆内存使用量从 120KB 减少到 48KB。
- legacy_file_format pragma已停用。现在是空操作。取而代之的是,提供了sqlite3_db_config()的SQLITE_DBCONFIG_LEGACY_FILE_FORMAT选项。legacy_file_format pragma 被停用,因为(1)它很少有用,并且(2)它与具有生成列和降序索引的表的模式中的VACUUM不兼容。门票6484e6ce678fffab
哈希:
- SQLITE_SOURCE_ID:2020-01-22 18:38:59 f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824
- sqlite3.c 的 SHA3-256:a5fca0b9f8cbf80ac89b97193378c719d4af4b7d647729d8df9c0c0fca7b1388
2019-10-10 (3.30.1)
- 修复查询扁平化器中的错误,该错误可能会导致在聚合函数上使用新 FILTER 子句的嵌套查询出现段错误。机票1079ad19993d13fa
- Cherrypick 修复了自 3.30.0 版本以来发现的其他模糊问题
哈希:
- SQLITE_SOURCE_ID:2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
- sqlite3.c 的 SHA3-256:f96fafe4c110ed7d77fc70a7d690e5edd1e64fefb84b3b5969a722d885de1f2d
2019-10-04 (3.30.0)
- 添加对聚合函数的 FILTER 子句的支持。
- 在ORDER BY子句 中添加对NULLS FIRST和NULLS LAST语法的支持。
- 增强了index_info和index_xinfo编译指示以提供有关WITHOUT ROWID 表的磁盘表示形式的信息。
- 添加sqlite3_drop_modules()接口,允许应用程序禁用不需要的自动加载虚拟表。
- 改进CLI中的.recover 点命令,以便它从损坏的数据库文件中恢复更多内容。
- 增强RBU扩展以支持表达式索引。
- 更改模式解析器,以便在sqlite_master 表的任何类型、名称和 tbl_name 列 已损坏且数据库连接未处于 writable_schema模式时出错。
- PRAGMA function_list、PRAGMA module_list 和 PRAGMA pragma_list命令现在默认在所有构建中启用。使用-DSQLITE_OMIT_INTROSPECTION_PRAGMAS禁用它们 。
- 为sqlite3_db_config()添加SQLITE_DBCONFIG_ENABLE_VIEW选项。
- 添加了TCL 接口 配置方法,以便能够禁用SQLITE_DBCONFIG_ENABLE_VIEW以及控制来自 TCL 的其他 sqlite3_db_config()选项。
- 为应用程序定义的 SQL 函数添加了SQLITE_DIRECTONLY标志, 以防止在触发器和视图中使用这些函数。
- 旧版SQLITE_ENABLE_STAT3编译时选项现在是空操作。
哈希:
- SQLITE_SOURCE_ID:2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
- sqlite3.c 的 SHA3-256:f04393dd47205a4ee2b98ff737dc51a3fdbcc14c055b88d58f5b27d0672158f5
2019-07-10 (3.29.0)
- 将SQLITE_DBCONFIG_DQS_DML和SQLITE_DBCONFIG_DQS_DDL 操作添加到sqlite3_db_config()以激活和停用双引号字符串文字错误功能。两者都默认为“打开”以实现遗留兼容性,但鼓励开发人员将它们“关闭”,也许使用-DSQLITE_DQS=0编译时选项。
- -DSQLITE_DQS=0现在是推荐的编译时选项。
- 查询规划器的改进:
- 当一个或另一个操作数为常量时,改进了 AND 和 OR 运算符的优化。
- 当左侧列具有数字亲和力时, 对LIKE 优化的增强。
- 添加了“ sqlite_dbdata ”虚拟表,用于从 SQLite 数据库中提取原始低级内容,即使是损坏的数据库。
- 舍入行为的改进,使使用round()函数舍入二进制数的结果更接近习惯于用十进制思考的人的实际期望。
- CLI的增强功能:
- 添加“.recover”命令,该命令尝试从损坏的数据库文件中恢复尽可能多的内容。
- 添加对测试有用的“.filectrl”命令。
- 将长期存在的“.testctrl”命令添加到“.help”菜单。
- 添加了“.dbconfig”命令
哈希:
- SQLITE_SOURCE_ID:2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6
- sqlite3.c 的 SHA3-256:d9a5daf7697a827f4b2638276ce639fa04e8e8bb5fd3a6b683cfad10f1c81b12
2019-04-16 (3.28.0)
- 增强的窗口功能:
- 添加对EXCLUDE 子句的支持。
- 添加对窗口链接的支持。
- 添加对GROUPS 框架的支持。
- 在 RANGE帧中添加对“ <expr> PRECEDING ”和“ <expr> FOLLOWING ”边界的支持。
- 添加了新的sqlite3_stmt_isexplain(S)接口,用于确定准备好的语句是否为EXPLAIN。
- 增强的VACUUM INTO使其适用于只读数据库。
- 新的查询优化:
- 当 ESCAPE 关键字存在且PRAGMA case_sensitive_like开启时,为案例启用LIKE 优化。
- 在由部分索引驱动的查询中,避免对部分索引的 WHERE 子句中指定的约束进行不必要的测试,因为我们知道该约束必须始终为真。
- TCL 接口的增强功能:
- 向函数方法添加了 -returntype 选项。
- 添加了新的bind_fallback 方法。
- CLI的增强功能:
- 添加了对绑定参数和.parameter 命令的支持。
- 修复readfile()函数,使其在读取空文件时返回空 BLOB 而不是抛出内存不足错误。
- 修复writefile()函数,以便当它沿着新文件的路径创建新目录时,它会为它们提供 umask 权限,而不是与文件相同的权限。
- 更改.archive 命令中的--update 选项,使其跳过存档中已存在且未更改的文件。添加新的 --insert 选项,其工作方式类似于 --update 过去的工作方式。
- 添加了fossildelta.c 扩展,可以创建、应用和解构 RBU 扩展 使用的Fossil DVCS 文件增量格式。
- 为sqlite3_db_config()接口添加了SQLITE_DBCONFIG_WRITABLE_SCHEMA动词,它在不使用 SQL 解析器的情况下 与PRAGMA writable_schema 的工作相同。
- 添加了sqlite3_value_frombind() API,用于确定 SQL 函数的参数是否来自绑定参数。
- fts3_tokenizer()的安全性和兼容性增强:
- fts3_tokenizer()函数总是返回 NULL ,除非使用sqlite3_db_config ( SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER ) 设置启用了遗留应用程序定义的 FTS3 分词器接口,或者除非 fts3_tokenizer() 的第一个参数是绑定参数。
- 如果第二个参数是绑定参数,即使没有sqlite3_db_config ( SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER ) 设置, fts3_tokenizer()的双参数版本也接受指向分词器方法对象的指针
- 改进了对损坏的数据库文件的鲁棒性。
- 其他性能增强
- 建立了官方 SQLite 源代码树的 Git 镜像。SQLite 的规范来源使用
Fossil DVCS维护,网址为https://sqlite.org/src。Git 镜像可以在https://github.com/sqlite/sqlite看到。
哈希:
- SQLITE_SOURCE_ID:2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
- sqlite3.c 的 SHA3-256:411efca996b65448d9798eb203d6ebe9627b7161a646f5d00911e2902a57b2e9
2019-02-25 (3.27.2)
- 修复了 3.27.0 版中尝试优化引入的 IN 运算符中的错误。门票 df46dfb631f75694
- 修复误用窗口函数导致崩溃的错误。机票 4feb3159c6bc3f7e33959。
- 修复各种文档拼写错误
哈希:
- SQLITE_SOURCE_ID:bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
- sqlite3.c 的 SHA3-256:1dbae33bff261f979d0042338f72c9e734b11a80720fb32498bae9150cc576e7
2019-02-08 (3.27.1)
- 修复查询优化器中的错误:OR 优化与尝试使用直接从表达式索引读取的值而不是重新计算表达式的优化之间的不利交互。机票4e8e4857d32d401f
哈希:
- SQLITE_SOURCE_ID:2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
- sqlite3.c 的 SHA3-256:11c14992660d5ac713ea8bea48dc5e6123f26bc8d3075fe5585d1a217d090233
2019-02-07 (3.27.0)
- 添加了VACUUM INTO命令
- 如果使用 双引号字符串文字,则在错误日志中发出 SQLITE_WARNING 消息。
- sqlite3_normalized_sql()接口适用于使用sqlite3_prepare_v2()或sqlite3_prepare_v3()创建的任何准备好的语句。不再需要将sqlite3_prepare_v3()与SQLITE_PREPARE_NORMALIZE 一起使用才能使用sqlite3_normalized_sql()。
- 向FTS3和FTS5添加了 remove_diacritics=2 选项。
- 向sqlite3_prepare_v3()添加了SQLITE_PREPARE_NO_VTAB选项。使用该选项可以防止对影子表的循环引用导致资源泄漏。
- 对sqlite3_deserialize()接口
的增强:
- 添加SQLITE_FCNTL_SIZE_LIMIT 文件控制,用于设置由 sqlite3_deserialize 创建的内存数据库大小的上限。默认上限为 1GiB,或者由 sqlite3_config ( SQLITE_CONFIG_MEMDB_MAXSIZE ) 和/或SQLITE_MEMDB_DEFAULT_MAXSIZE指定的任何替代值。
- 尊重SQLITE_DESERIALIZE_READONLY标志,该标志之前在文档中有所描述,但之前是空操作。
- 增强TCL 接口的“反序列化”命令,为其提供新的“--maxsize N”和“--readonly BOOLEAN”选项。
- 对CLI的增强,主要是为了支持 SQLite 库本身的测试和调试:
- 添加对“.open --hexdb”的支持。用于生成“hexdb”文本的“ dbtotxt ”实用程序已添加到源代码树中。
- 在“.open --deserialize”上添加对“--maxsize N”选项的支持。
- 添加“--memtrace”命令行选项,以显示所有内存分配和释放。
- 在使用 SQLITE_DEBUG 的构建中添加“.eqp trace”选项,以一步启用带有缩进和 PRAGMA vdbe_trace的字节码程序列表。
- 添加用于访问sqlite3_progress_handler()接口 的“.progress”命令。
- 将“--async”选项添加到“.backup”命令。
- 添加选项“--expanded”、“--normalized”、“--plain”、“--profile”、“--row”、“--stmt”和“--close”到“.trace”命令。
- 增强了针对恶意损坏的数据库运行的恶意 SQL 的稳健性。
Bug修复:
- 不要使用部分索引对 IN 运算符进行表扫描。机票1d958d90596593a774。
- 修复查询扁平化器,使其适用于包含使用窗口函数的子查询的查询。机票709fcd17810f65f717
- 确保 ALTER TABLE 修改嵌入在作为视图和触发器一部分的 WITH 子句中的表名和列名。
- 修复了阻止在表值函数周围使用括号的解析器错误。
- 修复表达式索引的OR 优化问题。机票d96eba87698a428c1d。
- 修复了 LEFT JOIN 强度降低优化的问题,其中由于 IS NOT NULL 运算符而导致优化应用不当。机票5948e09b8c415bc45d。
- 修复REPLACE命令,使其不再能够将 NULL 值潜入 NOT NULL 列,即使 NOT NULL 列的默认值为 NULL。门票e6f1f2e34dceeb1ed6
- 修复在 相关子查询中使用的窗口函数的使用问题。票d0866b26f83e9c55e3
- 修复ALTER TABLE RENAME COLUMN命令,使其适用于具有冗余 UNIQUE 约束的表。机票bc8d94f0fbd633fd9a
- 修复了一个错误,该错误导致zeroblob值在插入到使用表达式索引的表中时被截断。门票bb4bdb9f7f654b0bb9
哈希:
- SQLITE_SOURCE_ID:“2019-02-07 17:02:52 97744701c3bd414e6c9d7182639d8c2ce7cf124c4fce625071ae65658ac61713”
- sqlite3.c 的 SHA3-256:ca011a10ee8515b33e5643444b98ee3d74dc45d3ac766c3700320def52bc6aba
2018-12-01 (3.26.0)
- 优化:在对具有表达式索引的表执行UPDATE时,如果它们不引用正在更新的表的任何列,则不要更新表达式索引。
- 允许虚拟表实现的xBestIndex()方法返回 SQLITE_CONSTRAINT以指示建议的查询计划不可用,不应进一步考虑。
- 添加了SQLITE_DBCONFIG_DEFENSIVE选项,该选项禁用使用普通 SQL 创建损坏的数据库文件的能力。
- 在启用SQLITE_DBCONFIG_DEFENSIVE 选项 时添加了对只读影子表的支持。
- 添加了PRAGMA legacy_alter_table命令,如果启用该命令,则 ALTER TABLE命令的行为类似于旧版本的 SQLite(3.25.0 之前的版本)以实现兼容性。
- 添加了PRAGMA table_xinfo,它的工作方式与PRAGMA table_info类似, 只是它还显示虚拟表中的隐藏列。
- 添加解释虚拟表 作为运行时可加载扩展。
- 向查询计划器添加一个限制计数器,以防止 某些病态 SQL 输入的 sqlite3_prepare()次数过多。
- 在使用 SQLITE_ENABLE_NORMALIZE 编译时 添加了对sqlite3_normalized_sql()接口的支持。
- 增强的触发器,以便它们可以使用存在于模式中的 表值函数,而不是定义触发器的模式。
- CLI的增强功能:
- 对“.help”命令的改进。
- SQLITE_HISTORY 环境变量,如果存在,指定命令行编辑历史文件的名称
- 与打开新数据库关联的 --deserialize 选项导致数据库文件被读入内存并使用 sqlite3_deserialize() API 进行访问。这简化了在数据库上运行测试而无需修改磁盘上的文件。
- geopoly扩展
的增强功能:
- 始终使用二进制格式存储多边形,这样速度更快且占用的空间更少。
- 添加了geopoly_regular()函数。
- 添加了geopoly_ccw()函数。
- 会话扩展
的增强:
- 添加了SQLITE_CHANGESETAPPLY_INVERT标志
- 添加了sqlite3changeset_start_v2()接口和 SQLITE_CHANGESETSTART_INVERT标志。
- 添加了 changesetfuzz.c 测试用例生成器实用程序。
哈希:
- SQLITE_SOURCE_ID:“2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9”
- sqlite3.c 的 SHA3-256:72c08830da9b5d1cb397c612c0e870d7f5eb41a323b41aa3d8aa5ae9ccedb2c4
2018-11-05 (3.25.3)
- 禁止在CTE 的递归部分使用窗口函数。门票e8275b415a2f03bee
- 修复虚拟表上 typeof() 和 length() 的行为。机票 69d642332d25aa3b7315a6d385
- 加强对故意损坏的数据库文件的防御。
- 修复当行值表达式与具有冗余列的 PRIMARY KEY 一起使用时导致的查询规划器中的问题。机票 1a84668dcfdebaf12415d
- 修复查询规划器,使其在带有 SQLITE_ENABLE_STAT4 编译时选项的 LEFT JOIN 的 ON 子句中正确处理 IS NOT NULL 运算符。
65eb38f6e46de8c75e188a17ec
哈希:
- SQLITE_SOURCE_ID:“2018-11-05 20:37:38 89e099fbe5e13c33e683bef07361231ca525b88f7907be7092058007b75036f2”
- sqlite3.c 的 SHA3-256:45586e4df74de3a43f3a1f8c7a78c3c3f02edce01af7d10cafe68bb94476a5c5
2018-09-25 (3.25.2)
- 添加PRAGMA legacy_alter_table=ON命令,使“ALTER TABLE RENAME”命令的行为与 SQLite 3.24.0 及更早版本中的行为相同:对触发器和视图主体内重命名表的引用不会更新。这个新的 pragma 为旧程序提供了兼容性解决方案,这些程序期望 ALTER TABLE RENAME 的旧的、不稳定的行为。
- 修复了在视图内部使用涉及窗口函数的复杂表达式时导致故障 的新窗口函数实现问题。
- 修复了各种其他编译器警告和与模糊配置相关的小问题。
哈希:
- SQLITE_SOURCE_ID:“2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7”
- sqlite3.c 的 SHA3-256:34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af
2018-09-18 (3.25.1)
- 当被修改的表具有更新虚拟表的触发器时,在 3.25.0 版本中添加到 ALTER TABLE 的额外完整性检查有时会引发误报。误报导致 ALTER TABLE 回滚,从而使架构保持不变。机票b41031ea2b537237。
- 3.25.0 版本中针对与 ORDER BY LIMIT 优化关联的字节码中的无限循环的修复不适用于某些涉及窗口函数的查询。需要进行额外的更正。机票
510cde277783b5fb
哈希:
- SQLITE_SOURCE_ID:“2018-09-18 20:20:44 2ac9003de44da7dafa3fbb1915ac5725a9275c86bf2f3b7aa19321bf1460b386”
- sqlite3.c 的 SHA3-256:1b2302e7a54cc99c84ff699a299f61f069a28e1ed090b89e4430ca80ae2aab06
2018-09-15 (3.25.0)
- 添加对窗口函数的支持
- 增强了ALTER TABLE命令:
- 查询优化器改进:
- 避免在聚合查询中不必要地加载不在聚合函数内且不属于 GROUP BY 子句的列。
- IN-early-out 优化:当对多列索引进行查找并且 IN 运算符用于除最左侧列以外的列时,如果没有行与第一个 IN 值匹配,则检查以在继续下一个 IN 值之前,确保存在与右侧的列匹配的行。
- 使用传递属性尝试在 WHERE 子句中传播常量值。例如,将“a=99 AND b=a”转换为“a=99 AND b=99”。
- 在 unix VFS中的每个索引节点上使用单独的互斥锁,而不是在它们之间共享一个互斥锁,以便在多线程环境中获得更好的并发性。
- 增强PRAGMA integrity_check命令以改进页面空闲列表上问题的检测。
- 在命令行 shell的“.dump”命令中将无穷大输出为 1e999 。
- 添加了SQLITE_FCNTL_DATA_VERSION文件控件。
- 添加了Geopoly 模块
Bug修复:
- ORDER BY LIMIT 优化可能会在非常模糊的情况下导致准备语句的字节代码中出现无限循环,这是由于查询优化器中的一些小缺陷造成的。修复票证 9936b2fa443fec03ff25
- 在重新排列约束检查顺序的 UPSERT 上,确保对插入内容的亲和力转换发生在任何约束检查之前。修复工单 79cad5e4b2e219dd197242e9e。
- 在“.eqp full”逻辑关闭后,避免对CLI的“.stats on”命令使用准备好的语句 。修复工单 7be932dfa60a8a6b3b26bcf76。
- LIKE 优化生成不正确的字节码,因此如果左侧操作数具有数字亲和性且右侧模式为“/%”或者模式以 ESCAPE 字符开头,则得到错误的答案。修复票证
c94369cae9b561b1f996d0054b
哈希:
- SQLITE_SOURCE_ID:“2018-09-15 04:01:47 b63af6c3bd33152742648d5d2e8dc5d5fcbcdd27df409272b6aea00a6f761760”
- sqlite3.c 的 SHA3-256:989e3ff37f2b5eea8e42205f808ccf0ba86c6ea6aa928ad2c011f33a108ac45d
2018-06-04 (3.24.0)
- 添加对 PostgreSQL 风格的UPSERT的支持。
- 添加对r-tree 表中辅助列的支持。
- 添加用于发现 SQLite 使用的 SQL 关键字的 C 语言 API:sqlite3_keyword_count()、sqlite3_keyword_name()和 sqlite3_keyword_check()。
- 基于 sqlite3_str对象添加动态字符串的C语言API。
- 增强ALTER TABLE,使其将“true”和“false”识别为 DEFAULT 的有效参数。
- 添加排序器引用优化作为编译时选项。仅在使用 SQLITE_ENABLE_SORTER_REFERENCES 编译时可用。
- 改进EXPLAIN QUERY PLAN原始输出的格式,以便它提供有关查询计划和计划各组成部分之间关系的更好信息。
- 向sqlite3_db_config() API
添加了SQLITE_DBCONFIG_RESET_DATABASE选项
。
CLI增强功能:
- 自动拦截原始EXPLAIN QUERY PLAN 输出并将其重新格式化为 ASCII 艺术图。
- 以“#”开头且不在 SQL 语句中间的行被解释为注释。
- 向“.backup”命令添加了 --append 选项。
- 添加了“.dbconfig”命令。
表现:
- 当数据库文件的内容实际上没有改变时, UPDATE避免了不必要的低级磁盘写入。例如,“UPDATE t1 SET x=25 WHERE y=?” 如果 x 列中的值已经是 25,则不会产生额外的磁盘 I/O。类似地,当对跨越多个页面的记录执行UPDATE时,只有实际更改的页面子集被写入磁盘。这只是一个低级别的性能优化,不会影响 TRIGGER 或其他更高级别的 SQL 结构的行为。
- 使用 ORDER BY 和 LIMIT 的查询现在尝试避免计算不可能在 LIMIT 下出现的行。这可以大大提高 ORDER BY LIMIT 查询的性能,尤其是当 LIMIT 相对于不受限制的输出行数较小时。
- 即使 OR 表达式也已转换为 IN 表达式,也允许进行OR优化。OR 优化的使用现在也 更清楚地显示在EXPLAIN QUERY PLAN输出中。
- 查询规划器更积极地 为无法创建持久索引的视图和子查询 使用自动索引。
- 在适当的地方使用R-Tree 扩展中的一次性 UPDATE 和 DELETE 查询计划 。
- LEMON 生成的解析器的性能改进。
Bug修复:
- 对于 LEFT JOIN 的右侧表,直接计算表达式的值,而不是从表达式索引中加载预先计算的值,因为表达式索引可能不包含正确的值。机票 7fa8049685b50b5aeb0c2
- 不要尝试使用 WHERE 子句中的术语来启用 LEFT JOIN 右侧表的索引查找。机票 4ba5abf65c5b0f9a96a7a
- 修复CSV 虚拟表中无法打开错误后可能发生的内存泄漏
- 修复了一个长期存在的问题,其中 AUTOINCREMENT使用的sqlite_sequence表上的损坏架构可能导致崩溃。票 d8dc2b3a58cd5dc2918a1
- 修复json_each()函数,使其在输入为简单值而不是数组或对象时在其“fullkey”列上返回有效结果。
哈希:
- SQLITE_SOURCE_ID:“2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca”
- sqlite3.c 的 SHA3-256:0d384704e1c66026228336d1e91771d295bf688c9c44c7a44f25a4c16c26ab3c
2018-04-10 (3.23.1)
- 修复新的LEFT JOIN 强度降低优化中的两个问题。门票1e39b966ae9ee739 和fac496b61722daf2。
- 修复 FTS5 xBestIndex 方法的错误行为。机票 2b8aed9f7c9e61e8。
- 修复对未初始化的虚拟机寄存器的无害引用。机票093420fc0eb7cba7。
- 修复CLI,使其使用 -DSQLITE_UNTESTABLE 构建
- 修复eval.c扩展,使其与PRAGMA empty_result_callbacks=ON一起使用。
- 修复generate_series虚拟表,使其在任何约束为 NULL 时正确地不返回任何行。
- 解析器中的性能增强。
哈希:
- SQLITE_SOURCE_ID:“2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b”
- sqlite3.c 的 SHA3-256:65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc
2018-04-02 (3.23.0)
- 当使用SQLITE_ENABLE_DESERIALIZE编译时选项 时,添加sqlite3_serialize()和sqlite3_deserialize()接口。
- 将 TRUE 和 FALSE 识别为常量。(为了兼容性,如果存在名为“true”或“false”的列,则标识符指的是列而不是布尔常量。)
- 支持运算符 IS TRUE、IS FALSE、IS NOT TRUE 和 IS NOT FALSE。
- 向sqlite3_db_status()添加了SQLITE_DBSTATUS_CACHE_SPILL选项,用于报告已发生的缓存溢出次数。
- 内置 printf实现上的“alternate-form-2”标志(“!”)现在导致字符串替换以字符而不是字节为单位测量宽度和精度。
- 如果虚拟表实现中的xColumn方法使用sqlite3_result_error()返回错误消息,则将该错误消息优先于内部生成的消息。
- 向CLI添加了 -A 命令行选项,以便更轻松地管理 SQLite 存档文件。
- 在Zipfile 虚拟表中添加对 INSERT OR REPLACE、INSERT OR IGNORE 和 UPDATE OR REPLACE 的支持。
- 增强sqlite3changeset_apply()接口,使其能够抵御来自故意损坏的变更集对象的攻击。
- 添加了sqlite3_normalize() 扩展函数。
- 查询优化器增强功能:
- 改进omit-left-join 优化,使其在右侧表是 UNIQUE 但不一定 NOT NULL 的情况下起作用。
- 改进下推优化,使其适用于许多 LEFT JOIN。
- 如果 WHERE 子句中存在阻止 LEFT JOIN 的额外全空行出现在输出集中的条款,则 添加LEFT JOIN 强度降低优化,将 LEFT JOIN 转换为普通 JOIN。
- 当使用小于最大值的 rowid 更新 AUTOINCREMENT表时,避免不必要地写入 sqlite_sequence 表 。
- Bug修复:
- 修复解析器以接受有效的行值语法。机票7310e2fb3d046a5
- 修复查询规划器,使其考虑 WHERE 子句中子表达式中表值函数参数的依赖性。工单80177f0c226ff54
- 使用复杂的或连接的 WHERE 和 STAT4 修复不正确的结果。票证ec32177c99ccac2
- 修复由于自动数据类型转换导致的表达式索引中的潜在损坏。机票343634942dd54ab
- FTS4 断言错误。门票d6ec09eccf68cfc
- 行值中小于运算符的结果不正确。机票f484b65f3d62305
- 始终将非零浮点值解释为 TRUE,即使整数部分为零。工单36fae083b450e3a
- 修复了fileio.c扩展的 fsdir(PATH)表值函数中的 一个问题,如果将 fsdir() 表用作联接的内部表,该问题会导致段错误。问题在邮件列表中报告并通过签入 7ce4e71c1b7251be 修复
- 当 sqlite_master 表损坏时发出错误而不是断言错误或空指针取消引用,以便 sqlite_sequence 表根页面实际上是 btree-index 页面。入住 525deb7a67fbd647
- 修复ANALYZE命令,以便它计算名称以“sqlite”开头的表的统计信息。入住 0249d9aecf69948d
- 针对OSSFuzz检测到的问题的其他修复
:
- 修复损坏的数据库文件在 VACUUM 上可能出现的无限循环。入住27754b74ddf64
- 禁止在触发器和视图的WITH 子句中使用参数。入住b918d4b4e546d
- 修复行值处理中潜在的内存泄漏。入住2df6bbf1b8ca8
- 针对兆字节大小的字符串有很多替换的情况,提高replace() SQL 函数的性能,以避免测试期间 OSSFuzz 超时。签入fab2c2b07b5d3
- 当 sqlite_master 表包含 CREATE TABLE AS 语句时,提供适当的错误消息。以前这会导致断言错误或空指针取消引用。OSSFuzz 在 GDAL 项目上发现的问题。入住 d75e67654aa96
- 删除了不正确的 assert() 语句。入住 823779d31eb09cda。
- 解决在 INTEGER PRIMARY KEY上使用LIKE 优化的问题。入住 b850dd159918af56。
哈希:
- SQLITE_SOURCE_ID:“2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2”
- sqlite3.c 的 SHA3-256:4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa
2018-01-22 (3.22.0)
- sqlite3_trace_v2()的输出现在显示在触发器中运行的每个单独的 SQL 语句。
- 添加从WAL 模式数据库读取的能力,即使应用程序缺乏对数据库及其包含目录的写权限,只要该目录中存在 -shm 和 -wal 文件。
- 将rtreecheck()标量 SQL 函数添加到R-Tree 扩展中。
- 添加了sqlite3_vtab_nochange()和sqlite3_value_nochange()接口以帮助虚拟表实现优化 UPDATE 操作。
- 添加了sqlite3_vtab_collation()接口。
- 在 FTS5 中 添加了对“^”初始标记语法的支持。
- 新扩展:
- 查询规划器增强功能:
- 其他性能优化:
- 文本到浮点数转换子程序的更小更快的实现:sqlite3AtoF()。
- Lemon 解析器生成器创建了一个更快的解析器 。
- 使用 strcspn() C 库例程来加速 LIKE 和 GLOB 运算符。
- 命令行 shell的改进:
- “.schema”命令显示了虚拟表的结构。
- 添加了对使用.archive 命令读取和写入 SQLite 存档文件的支持。
- 添加了实验性的.expert 命令
- 添加了“.eqp”命令的“.eqp 触发器”变体
- 增强“.lint fkey-indexes”命令,使其适用于 WITHOUT ROWID表。
- 如果 shell 的文件名参数是 ZIP 存档而不是 SQLite 数据库,则 shell 会使用Zipfile 虚拟表自动打开该 ZIP 存档。
- 添加了edit() SQL 函数。
- 添加了.excel 命令以简化将数据库内容导出到电子表格的过程。
- 当在命令行或 .open 命令中使用 --append 标志时,将 使用 Append VFS打开数据库。
- 增强SQLITE_ENABLE_UPDATE_DELETE_LIMIT编译时选项,使其适用于WITHOUT ROWID表。
- 当使用-DSQLITE_ENABLE_OFFSET_SQL_FUNC编译时,提供sqlite_offset(X) SQL 函数,该函数将字节偏移量返回到数据库文件中的记录保持值 X 的开头。
- Bug修复:
- 在 WHERE 子句中使用 OR 运算符的 UPDATE 无限循环。问题在 3.17.0 中引入,并在大约一年后在邮件列表中报告。机票 47b2581aa9bfecec。
- 使用 skip-ahead-distinct 优化时查询结果不正确。门票ef9318757b152e3a。
- 使用 ORDER BY DESC 的连接的查询结果不正确。机票 123c9ba32130a6c9。
- CREATE TABLE AS 和简单 SELECT 之间的结果集列名称不一致。机票 3b4450072511e621
- 对表达式的索引执行 REPLACE 时出现断言错误。机票dc3f932f5a147771
- 对常量索引执行 IN 运算符时出现断言错误。机票aa98619ad08ddcab
哈希:
- SQLITE_SOURCE_ID:“2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d”
- sqlite3.c 的 SHA3-256:206df47ebc49cd1710ac0dd716ce5de5854826536993f4feab7a49d136b85069
2017-10-24 (3.21.0)
- 在可用时利用F2FS 文件系统中的原子写入功能 ,以大大减少事务开销。这目前需要 SQLITE_ENABLE_BATCH_ATOMIC_WRITE编译时选项。
- 允许ATTACH和DETACH命令在事务内部工作。
- 如果 PRIMARY KEY 仅包含一列,则 允许WITHOUT ROWID 虚拟表可写。
- 在 WAL 重置中写入标头后发生的“fsync()”现在使用检查点的同步设置。这意味着如果PRAGMA checkpoint_fullfsync设置为开启 ,它将在 mac 上使用“fullfsync” 。
- sqlite3_sourceid()函数尝试检测源代码是否已从签入版本控制的源代码中修改,如果有修改,则版本哈希的最后四个字符显示为“alt1”或“alt2” 。目的是检测意外和/或粗心的编辑。伪造者可以破坏此功能。
- 使用右侧的聚合查询 改进了CREATE TABLE AS语句的列名的取消引用。
- unix VFS 发出的“stat()”系统调用更少。
- 增强了LIKE 优化,使其与ESCAPE子句一起使用。
- 增强了PRAGMA integrity_check和PRAGMA quick_check以检测它们以前缺失的模糊行损坏。同时更新两个 pragma,以便它们在遇到记录损坏时返回错误文本而不是 SQLITE_CORRUPT 。
- 查询规划器现在更喜欢使用协同例程而不是使用查询扁平化优化来实现 FROM 子句子查询 。可能不再禁用对子查询使用协程的支持。
- 将有关 !=、IS、IS NOT、NOT NULL 和 IS NULL 约束的信息传递到虚拟表 的xBestIndex方法中。
- 增强了CSV 虚拟表,以便在缺少最后一个换行符时接受最后一行输入。
- 删除很少使用的“scratch”内存分配器。将其替换为 SQLITE_CONFIG_SMALL_MALLOC配置设置,该设置提示 SQLite 应尽可能避免大内存分配。
- 将 swarm 虚拟表添加 到现有的联合虚拟表扩展中。
- 添加了 sqlite_dbpage 虚拟表 ,用于提供对数据库文件页面的直接访问。源代码内置于合并中,并使用-DSQLITE_ENABLE_DBPAGE_VTAB编译时选项激活。
- 添加一种新型的 fts5vocab 虚拟表 - “实例” - 提供对尽可能低级别的 FTS5 全文索引的直接访问。
- 在 Windows VFS 中删除对 rand_s() 的调用,因为它会导致某些旧笔记本电脑上的 Firefox 出现问题。
- 命令行 shell的src/shell.c源代码不再受版本控制。该文件现在作为构建过程的一部分生成。
- 杂项微优化将 CPU使用率降低了约 2.1%。
- Bug修复:
- 修复 OSSFuzz 发现的错误 assert() 语句。机票cb91bf4290c211d
- 修复sqlite3_result_pointer()中一个模糊的内存泄漏。机票7486aa54b968e9b
- 通过将架构重置推迟到查询规划器完成运行之后,避免可能的释放后使用错误。票be436a7f4587ce5
- 如果 COLLATE 正确,则仅使用表达式索引来优化 ORDER BY 或 GROUP BY。机票e20dd54ab0e4383
- 修复当 index-on-expressions 中的表达式实际上是常量时出现的断言错误。机票aa98619ad08ddca
- 修复可能在PRAGMA reverse_unordered_selects之后发生的断言错误 。机票cb91bf4290c211d
- 修复在 IN 或 EXISTS 子查询中使用表值函数的查询可能发生的段错误。机票b899b6042f97f5
- 修复了编译特定可怕的公用表表达式时潜在的整数溢出问题。这是 OSSFuzz 发现的另一个问题。入住6ee8cb6ae5。
- 修复查询损坏的数据库文件时潜在的越界读取问题,该问题由 Google Project Zero 的 Natalie Silvanovich 检测到。登记入住04925dee41a21f。
哈希:
- SQLITE_SOURCE_ID:“2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827”
- sqlite3.c 的 SHA3-256:84c181c0283d0320f488357fc8aab51898370c157601459ebee49d779036fe03
2017-08-24 (3.20.1)
- 修复新的sqlite3_result_pointer()接口中潜在的内存泄漏。机票7486aa54b968e9b5。
哈希:
- SQLITE_SOURCE_ID:“2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34”
- sqlite3.c 的 SHA3-256:93b1a6d69b48dc39697d1d3a1e4c30b55da0bdd2cad0c054462f91081832954a
2017-08-01 (3.20.0)
- 为某些错误代码 更新sqlite3_errmsg()返回的错误消息文本。
- 添加新的指针传递接口。
- 为了利用新
指针传递接口提供的改进的安全性,对某些扩展进行了向后不兼容的更改:
- 扩展 FTS5 → 需要sqlite3_bind_pointer()来找到 fts5_api 指针。
- carray(PTR,N) → 需要sqlite3_bind_pointer()来设置 PTR 参数。
- remember(V,PTR) → 需要sqlite3_bind_pointer()来设置 PTR 参数。
- 添加了SQLITE_STMT 虚拟表扩展。
- 添加了COMPLETION 扩展- 旨在为交互式用户界面建议选项卡完成。这是一个进展中的工作。期待未来版本的进一步增强。
- 添加了UNION 虚拟表扩展。
- 内置日期和时间函数已得到增强,因此它们可以用于CHECK 约束、表达式索引和部分索引的 WHERE 子句,前提是它们不使用 'now'、'localtime'、或“utc”关键字。 更多信息。
- 添加了带有额外“prepFlags”参数 的sqlite3_prepare_v3()和sqlite3_prepare16_v3()接口。
- 为sqlite3_prepare_v3()提供SQLITE_PREPARE_PERSISTENT标志,并使用它来限制FTS3、FTS5和 R-Tree 扩展对后备内存的滥用。
- 添加了PRAGMA secure_delete=FAST命令。当 secure_delete 设置为 FAST 时,只要不增加 I/O 量,旧内容就会被零覆盖。删除的内容可能仍然保留在空闲页面列表中,但将从所有 b-tree 页面中清除。
- 命令行 shell的增强功能:
- 查询规划器增强功能:
- 为sqlite3_stmt_status()接口 添加SQLITE_STMTSTATUS_REPREPARE、SQLITE_STMTSTATUS_RUN和SQLITE_STMTSTATUS_MEMUSED选项 。
- 为 PRAGMA integrity_check、PRAGMA quick_check和 PRAGMA foreign_key_check提供PRAGMA 函数。
- 将 -withoutnulls 选项添加到TCL 接口 eval 方法。
- 增强sqlite3_analyzer.exe实用程序,使其显示 btree 页面上元数据的字节数。
- SQLITE_DBCONFIG_ENABLE_QPSG运行时选项和 SQLITE_ENABLE_QPSG编译时选项启用 查询规划器稳定性保证。另见票 892fc34f173e99d8
- 杂项优化导致使用的 CPU 周期减少 2% 。
Bug修复:
- 修复使用 扁平化优化的查询的sqlite3_column_name()行为,以便结果与不使用该优化的其他查询以及 PostgreSQL、MySQL 和 SQLServer 一致。门票de3403bf5ae。
- 修复查询计划器,使其知道 如果 WHERE 子句使用IS 运算符,则不对 LEFT JOIN 的右表使用自动索引。修复ce68383bf6aba。
- 确保查询规划器知道 扁平化LEFT JOIN 的任何列都可以为 NULL,即使该列标有“NOT NULL”。修复工单 892fc34f173e99d8。
- 在与附加数据库的数据库连接上运行时,修复PRAGMA integrity_check中罕见的误报。机票 a4e06e75a9ab61a12
- 修复一个错误(由 OSSFuzz 发现),如果使用某些不可靠的 CREATE TABLE 声明,该错误会导致断言错误。机票
bc115541132dad136
哈希:
- SQLITE_SOURCE_ID:“2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8”
- sqlite3.c 的 SHA3-256:79b7f3b977360456350219cba0ba0e5eb55910565eab68ea83edda2f968ebe95
2017-06-17 (3.18.2)
- 修复在 WHERE 子句中使用 IN 运算符时可能导致重复输出行的错误。门票61fe9745。
哈希:
- SQLITE_SOURCE_ID:“2017-06-17 09:59:36 036ebf729e4b21035d7f4f8e35a6f705e6bf99887889e2dc14ebf2242e7930dd”
- sqlite3.c 的 SHA3-256:b0bd014f2776b9f9508a3fc6432f70e2436bf54475369f88f0aeef75b0eec93e
2017-06-16 (3.18.1)
- 修复与auto_vacuum相关的错误,该错误可能导致数据库损坏。该错误是在版本 3.16.0 (2017-01-02) 中引入的。门票fda22108。
哈希:
- SQLITE_SOURCE_ID:“2017-06-16 13:41:15 77bb46233db03a3338bacf7e56f439be3dfd1926ea0c44d252eeafa7a7b31c06”
- sqlite3.c 的 SHA3-256:334eaf776db9d09a4e69d6012c266bc837107edc2c981739ef82081cb11c5723
2017-06-08 (3.19.3)
- 修复与auto_vacuum相关的错误,该错误可能导致数据库损坏。该错误是在版本 3.16.0 (2017-01-02) 中引入的。门票fda22108。
哈希:
- SQLITE_SOURCE_ID:“2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b”
- sqlite3.c 的 SHA3-256:368f1d31272b1739f804bcfa5485e5de62678015c4adbe575003ded85c164bb8
2017-05-25 (3.19.2)
- 修复 LEFT JOIN 展平优化中的更多错误。机票
7fde638e94287d2c。
哈希:
- SQLITE_SOURCE_ID:“2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9”
- sqlite3.c 的 SHA3-256:1be0c457869c1f7eba58c3b5097b9ec307a15be338308bee8e5be8570bcf5d1e
2017-05-24 (3.19.1)
- 修复 LEFT JOIN 展平优化中的错误。机票 cad1ab4cb7b0fc。
- 删除导致旧版本 MSVC 出现问题的多余分号。
哈希:
- SQLITE_SOURCE_ID:“2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86”
- sqlite3.c 的 SHA3-256:996b2aff37b6e0c6663d0312cd921bbdf6826c989cbbb07dadde5e9672889bca
2017-05-22 (3.19.0)
- SQLITE_READ授权方 回调被调用一次,其列名是查询中引用的每个表的空字符串,没有从中提取任何列。
- 在表达式上使用索引时,请尝试使用索引中已有的表达式值,而不是加载原始列并重新计算表达式。
- 增强展平优化,使其能够展平 LEFT JOIN 右侧的视图。
- 使用replace()而不是char()来转义嵌入在命令行 shell的 .dump 输出中的字符串中的换行符和回车符。
- 避免在不触及受外键约束的列的 UPDATE 语句中进行不必要的外键处理。
- 在使用索引的 DISTINCT 查询中,当有合适的索引可用时,尝试使用索引跳到下一个不同的条目,而不是遍历行。
- 在对不相关的表进行更改时, 避免不必要的sqlite3_blob句柄无效。
- 将仅使用 GROUP BY 子句中提到的列的 HAVING 子句的任何条款转移到 WHERE 子句以加快处理速度。
- 如果某个 VIEW 在同一查询中出现多次,请重复使用该 VIEW 的相同具体化。
- 增强PRAGMA integrity_check以便它识别具有相同rowid的两行或更多行的表。
- 增强FTS5查询语法,以便可以将列过滤器 应用于任意表达式。
- 增强json_extract()函数以缓存和重用 JSON 输入文本的解析。
- 添加了anycollseq.c
可加载扩展,它允许通用 SQLite 数据库连接读取包含未知和/或特定于应用程序的整理序列的模式。
Bug修复:
- 修复REPLACE中的一个问题,该问题可能导致损坏的数据库包含两行或多行具有相同rowid的行。修复工单 f68dc596c4e6018d。
- 修复PRAGMA integrity_check中导致后续 VACUUM表现不佳的问题。
- 修复PRAGMA foreign_key_check命令,使其在WITHOUT ROWID表上正确处理外键。
- 修复 B 树逻辑中的错误,该错误可能导致 IN 运算符查询的错误重复答案。门票 61fe9745
- 不允许在 JSON 中的数字常量中使用前导零。修复工单 b93be8729a895a528e2。
- 禁止在 JSON 中的字符串中使用控制字符。修复工单 6c9b5514077fed34551。
- 限制 JSON 对象和数组的递归深度,以避免在递归下降解析器中过度使用堆栈。修复工单
981329adeef51011052。
哈希:
- SQLITE_SOURCE_ID:“2017-05-22 13:58:13 28a94eb282822cad1d1420f2dad6bf65e4b8b9062eda4a0b9ee8270b2c608e40”
- sqlite3.c 的 SHA3-256:c30326aa1a9cc342061b755725eac9270109acf878bc59200dd4b1cea6bc2908
2017-03-30 (3.18.0)
- 添加了PRAGMA 优化命令
- 由sqlite_source_id() SQL 函数和sqlite3_sourceid() C API 返回并在SQLITE_SOURCE_ID宏中找到的 SQLite 版本标识符现在是 64 位 SHA3-256 哈希,而不是 40 位 SHA1 哈希。
- 向JSON1 扩展添加了json_patch() SQL 函数。
- 增强LIKE 优化,使其适用于左侧的任意表达式,只要右侧的 LIKE 模式不以数字或减号开头。
- 添加了sqlite3_set_last_insert_rowid()接口并在FTS3、FTS4和FTS5扩展中使用新接口以确保sqlite3_last_insert_rowid() 接口始终返回合理的值。
- 增强PRAGMA integrity_check和PRAGMA quick_check以便它们验证 CHECK 约束。
- 增强连接的查询计划以及早检测空表并在不做不必要的工作的情况下停止。
- 增强sqlite3_mprintf()接口系列和printf SQL 函数 ,如果在“%”和“d”之间使用“,”格式修饰符(例如:“%”,则将逗号分隔符放在整数的千位标记处d").
- 添加了 -D SQLITE_MAX_MEMORY = N编译时选项。
- 将.sha3sum 点命令和.selftest 点命令 添加到命令行 shell
- 开始执行SQLITE_LIMIT_VDBE_OP。例如,这可用于防止在接受来自不受信任用户的 SQL 查询的系统中出现过大的准备语句。
- 各种性能改进。
Bug修复:
- 确保正确处理带有整理序列的索引表达式。修复票证eb703ba7b50c1a5。
- 修复日期和时间函数的“...开始”修饰符中的错误。票6097cb92745327a1
- 修复了复杂递归触发器中潜在的段错误,该错误是由版本 3.15.0 中作为性能优化的一部分引入的 OP_Once 操作码中的错误导致的。门票06796225f59c057c
- 在RBU 扩展中,添加额外的同步操作以避免电源故障后损坏的可能性。
- 嵌套 SQL 语句的sqlite3_trace_v2()输出应始终以“--”注释标记开头。
哈希:
- SQLITE_SOURCE_ID:“2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37”
- sqlite3.c 的 SHA3-256:cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d
2017-02-13 (3.17.0)
- R-Tree 扩展的性能提高了大约 25% 。
- 在可用时使用编译器内置函数(例如:__builtin_bswap32() 或 _byteswap_ulong())进行字节交换。
- 使用sqlite3_blob键/值访问对象而不是 SQL 从 R-Tree 节点中提取内容
- 其他杂项增强功能,例如循环展开。
- 添加SQLITE_DEFAULT_LOOKASIDE编译时选项。
- 将默认后备 大小从 512,125 增加到 1200,100,因为这提供了更好的性能,同时每个连接仅添加 56KB 的额外内存。内存敏感的应用程序可以在编译时、启动时或运行时恢复旧的默认值。
- 在可用时使用编译器内置函数 __builtin_sub_overflow()、__builtin_add_overflow() 和 __builtin_mul_overflow()。(所有编译器内置函数都可以使用SQLITE_DISABLE_INTRINSIC编译时选项省略。)
- 添加了SQLITE_ENABLE_NULL_TRIM编译时选项,这可能会导致某些应用程序的数据库文件明显变小,并有与旧版本的 SQLite 不兼容的风险。
- 将 SQLITE_DEFAULT_PCACHE_INITSZ从 100更改为 20,以提高性能。
- 添加了 SQLITE_UINT64_TYPE 编译时选项作为 SQLITE_INT64_TYPE 的模拟。
- 在一次而不是两次通过中 执行一些更新操作。
- 增强会话扩展以支持WITHOUT ROWID 表。
- 修复了从具有数十万行的多行 VALUES 子句 创建视图时的性能问题和潜在的堆栈溢出。
- 添加了sha1.c 扩展。
- 在命令行 shell中,增强“.mode”命令,以便它恢复模式“line”、“list”、“column”和“tcl”的默认列和行分隔符。
- 增强SQLITE_DIRECT_OVERFLOW_READ选项,使其在WAL 模式下工作,只要正在读取的页面不在 WAL 文件中。
- 增强 Lemon 解析器生成器 ,以便它可以将解析器对象存储为堆栈变量,而不是从堆中分配空间,并在合并中使用该增强功能。
- 其他性能改进。使用大约6.5% 的 CPU 周期。
Bug修复:
- 如果 LEFT JOIN 的 ON 子句引用 ON 子句右侧的表,则抛出错误。这与 PostgreSQL 的行为相同。以前,SQLite 会默默地将 LEFT JOIN 转换为 INNER JOIN。修复票证 25e335f802dd。
- 对自动索引的列使用正确的关联。机票 7ffd1ca1d2ad4ec。
- 确保sqlite3_blob_reopen()接口可以正确处理短行。修复工单
e6e962d6b0f06f46e。
哈希:
- SQLITE_SOURCE_ID:“2017-02-13 16:02:40 ada05cfa86ad7f5645450ac7a2a21c9aa6e57d2c”
- sqlite3.c 的 SHA1:cc7d708bb073c44102a59ed63ce6142da1f174d1
2017-01-06 (3.16.2)
- 修复缺少二级索引的WITHOUT ROWID表的REPLACE语句, 以便它可以正确使用触发器和外键。这是3.16.0版本新增的性能优化导致的新bug。机票30027b613b4
- 修复sqlite3_value_text()接口,使其正确地将zeroblob()生成的内容转换为所有 0x00 字符的字符串。这是OSS-Fuzz在3.16.1发布后发现的一个长期存在的问题
- 修复字节码生成器以处理 FROM 子句中的子查询,该子查询本身是 UNION ALL,其中 UNION ALL 的一侧是包含 ORDER BY 的视图。这是一个长期存在的问题,是在 3.16.1 发布后才发现的。请参见工单 190c2507。
- 调整sqlite3_column_count() API,使其更频繁地返回与之前版本
相同的PRAGMA语句值,以最大限度地减少可能以意外方式使用该接口的应用程序的中断。
哈希:
- SQLITE_SOURCE_ID:“2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209”
- sqlite3.c 的 SHA1:2bebdc3f24911c0d12b6d6c0123c3f84d6946b08
2017-01-03 (3.16.1)
- 修复了一个有关在触发器中使用行值的错误
(请参阅票证8c9458e7),该错误在 3.15.0 版中存在,但直到 3.16.0 版本发布后才被报告。
哈希:
- SQLITE_SOURCE_ID:“2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd”
- sqlite3.c 的 SHA1:354f6223490b30fd5320b4066b1535e4ce33988d
2017-01-02 (3.16.0)
- 使用的 CPU 周期减少 9%。(有关如何计算此性能提升的详细信息,请参阅CPU 性能测量报告。)
- 添加了对PRAGMA 函数的实验性支持。
- 向sqlite3_db_config()添加了SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE选项。
- 增强日期和时间功能,以便“unixepoch”修饰符适用于支持日期的整个范围。
- 将后备内存分配器的默认配置从 500 个每个 128 字节的插槽更改为 125 个每个 512 字节的插槽。
- 增强了“WHERE x NOT NULL”部分索引,以便它们在“x”列出现在 LIKE 或 GLOB 运算符中时可用。
- 增强了 sqlite3_interrupt()以便它中断正在进行的检查点操作。
- 增强了LIKE和GLOB匹配算法,以便在模式包含多个通配符的情况下更快。
- 添加了SQLITE_FCNTL_WIN32_GET_HANDLE文件控制操作码。
- 在命令行 shell中添加了“.mode quote” 。
- 在命令行 shell中添加了“.lint fkey-indexes” 。
- 在命令行 shell中添加了.imposter 点命令。
- 添加了remember(V,PTR) SQL 函数作为可加载扩展。
- 将SQLITE_OMIT_BUILTIN_TEST编译时选项重命名为
SQLITE_UNTESTABLE以更好地反映使用它的含义。
Bug修复:
- 修复了查询规划器中的一个长期存在的错误,该错误导致 LEFT JOIN 的结果不正确,其中左侧表是子查询,连接约束是来自左侧子查询的裸列名称。机票 2df0107b。
- 在查询规划器中正确处理整数文字 -0x8000000000000000。
哈希:
- SQLITE_SOURCE_ID:“2017-01-02 11:57:58 04ac0b75b1716541b2b97704f4809cb7ef19cccf”
- sqlite3.c 的 SHA1:e2920fb885569d14197c9b7958e6f1db573ee669
2016-11-28 (3.15.2)
- 修复了3.15.0 版中引入 的行值逻辑的多个错误。
- 修复恶意构造的语法错误后 ATTACH/DETACH 中的 NULL 指针取消引用。机票 2f1b168ab4d4844。
- 修复内置instr()函数中出现内存不足情况后可能发生的崩溃。
- 在JSON 扩展中,修复 JSON 验证器,使其正确拒绝字符串中的无效反斜杠转义。
哈希:
- SQLITE_SOURCE_ID:“2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8”
- sqlite3.c 的 SHA1:06d77b42a3e70609f8d4bbb97caf53652f1082cb
2016-11-04 (3.15.1)
- 添加了 SQLITE_FCNTL_WIN32_GET_HANDLE文件控制操作码。
- 修复VACUUM命令,使其将多余的内容溢出到磁盘,而不是将所有内容都保存在内存中,并且可能导致较大的数据库文件出现内存不足错误。这修复了版本 3.15.0 引入的问题。
- 修复一个案例(自 3.8.0 - 2013-08-26 起),其中 LEFT JOIN 的 ON 子句中的 OR 连接项可能导致不正确的结果。机票 34a579141b2c5ac。
- 修复了在 LEFT JOIN 的 ON 子句中使用行值可能导致不正确结果的情况。票
fef4bb4bd9185ec8f。
哈希:
- SQLITE_SOURCE_ID:“2016-11-04 12:08:49 1136863c76576110e710dd5d69ab6bf347c65e36”
- sqlite3.c 的 SHA1:e7c26a7be3e431dd06898f8d262c4ef240c07366
2016-10-14 (3.15.0)
- 添加了对行值的支持。
- 允许在部分索引的 WHERE 子句中使用确定性 SQL 函数。
- 在 unix VFS 上添加了“ modeof= filename ”URI 参数
- 添加了对SQLITE_DBCONFIG_MAINDBNAME的支持。
- 添加了对ATTACH数据库 进行VACUUM的功能。
- 命令行 shell的增强功能:
- 添加“.testcase”和“.check”点命令。
- 向“.open”点命令添加了 --new 选项,导致在打开之前清除数据库中的任何先前内容。
- 增强fts5vocab虚拟表以有效处理“ORDER BY term”。
- 其他微优化可将常见工作负载的 CPU 使用率降低 7% 以上。此版本中的大部分优化都在前端 ( sqlite3_prepare_v2() )。
Bug修复:
- 乘法运算符现在可以正确检测 64 位整数溢出并在所有极端情况下提升为浮点数。修复票证 1ec41379c9c1e400。
- 当在IN 运算符的 LHS 上使用这些列时,正确处理具有冗余唯一索引的列。修复工单 0eab1ac759。
- 跳过表达式索引中范围查询的 NULL 条目。修复工单 4baa46491212947。
- 确保 sqlite_sequence 表中的AUTOINCREMENT计数器已初始化,对“INSERT ... SELECT”语句执行“Xfer 优化”。修复工单 7b3328086a5c116c。
- 确保 ORDER BY LIMIT 优化(来自签入559733b09e)与 IN 运算符一起用于 INTEGER PRIMARY KEY。修复工单
96c1454c
哈希:
- SQLITE_SOURCE_ID:“2016-10-14 10:20:30 707875582fcba352b4906a595ad89198d84711d8”
- sqlite3.c 的 SHA1:fba106f8f6493c66eeed08a2dfff0907de54ae76
2016-09-12 (3.14.2)
- 改进了对在 winsqlite3.dll 中使用 STDCALL 调用约定的支持。
- 根据文档,修复sqlite3_trace_v2()接口,以便在回调或掩码参数为零时禁用它。
- 修复注释错误并改进在使用-DSQLITE_ENABLE_EXPLAIN_COMMENTS编译时选项 时在EXPLAIN列表上生成的注释。
- 修复命令行 shell中的“.read”命令,使其理解其输入不是交互式的。
- 更正 IN 运算符 RHS 上 SELECT 的亲和力计算。修复工单199df4168c。
- ORDER BY LIMIT 优化无效,除非查询计划实际使用了最内层的 IN 运算符循环。修复工单0c4df46116e90f92。
- 修复导致某些DELETE操作无效的内部代码生成器问题。门票ef360601
哈希:
- SQLITE_SOURCE_ID:“2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6”
- sqlite3.c 的 SHA1:bcc4a1989db45e7f223191f2d0f66c1c28946383
2016-08-11 (3.14.1)
- 页面缓存“截断”操作的性能增强在具有大页面缓存的系统上将COMMIT时间减少了数十毫秒。
- 修复 sqldiff 的 --rbu选项。
哈希:
- SQLITE_SOURCE_ID:“2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b”
- sqlite3.c 的 SHA1:d545b24892278272ce4e40e0567d69c8babf12ea
2016-08-08 (3.14)
- 添加了对WITHOUT ROWID 虚拟表的支持。
- 改进了查询规划器,以便即使一个或多个分离使用LIKE、GLOB、REGEXP、MATCH运算符,也可以在虚拟表上使用OR 优化。
- 添加了用于读取 RFC 4180格式的逗号分隔值文件 的CSV 虚拟表。
- 添加了carray() 表值函数扩展。
- 使用新的 SQLITE_OK_LOAD_PERMANENTLY从扩展入口点返回代码 启用持久可加载扩展。
- 向sqlite3_db_status()添加了SQLITE_DBSTATUS_CACHE_USED_SHARED选项。
- 添加 vfsstat.c 可加载扩展 - 一个测量 I/O 的 VFS shim 以及一个提供对测量的访问 的同名虚拟表。
- 使用 ORDER BY 和 LIMIT 运行查询的改进算法,其中只有最内层的循环自然地以正确的顺序生成行。
- 对柠檬解析器生成器的增强,使其生成更快的解析器。
- PRAGMA compile_options命令现在尝试显示生成库的编译器的版本号。
- 增强PRAGMA table_info以便它提供有关 同名虚拟表的信息。
- 添加了“win32-none”VFS,类似于“unix-none”VFS,其工作方式类似于默认的“win32”VFS,只是它忽略了所有文件锁。
- 在有意义的情况下, 查询规划器使用部分索引的完整扫描而不是主表的完整扫描。
- 允许表值函数出现在IN 运算符的右侧。
- 创建了dbhash.exe命令行实用程序。
- 添加了两个新的 C 语言接口:sqlite3_expanded_sql()和 sqlite3_trace_v2()。这些新接口包含 现在已弃用 的sqlite3_trace()和sqlite3_profile()的功能。
- 将json_quote() SQL 函数添加到json1 扩展。
- 重新解析架构时 禁用授权方回调。
- 添加了SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION编译时选项,并在构建命令行 shell时默认打开该选项。
Bug修复:
- 修复ALTER TABLE命令,使其在向遗留文件格式数据库 添加列时不会损坏降序索引。机票 f68bf68513a1c15f
- 修复当传递 WHERE 子句引用不存在的整理序列时可能发生的 NULL 指针取消引用/崩溃。机票 e8d439c77685eca6。
- 改进了索引扫描的成本估算,其中包括一个 WHERE 子句,该子句可以使用索引中的列进行部分或全部评估,而无需进行表查找。这修复了在版本 3.12.0中引入的 ORDER BY LIMIT 优化后一些模糊查询发生的性能回归。
哈希:
- SQLITE_SOURCE_ID:“2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de”
- sqlite3.c 的 SHA1:234a3275d03a287434ace3ccdf1afb208e6b0e92
![](images/sqlitepie.jpg)
2016-05-18 (3.13.0)
- 尽可能长时间地推迟与 TEMP 文件相关的 I/O,希望最终可以完全避免 I/O。
- 将会话扩展 合并到主干中。
- 在命令行 shell中添加了“.auth ON|OFF”命令。
- 在命令行 shell的“.schema”和“.fullschema”命令中添加了“--indent”选项,以打开漂亮的打印。
- 向命令行 shell添加了“.eqp full”选项,它对每个被评估的语句 执行EXPLAIN 和EXPLAIN QUERY PLAN 。
- 改进了 Windows 命令行 shell中的 unicode 文件名处理。
- 改进了对因应用程序对sqlite_stat1 表的 不完整或不正确修改而导致的愚蠢查询计划器决策的抵抗力。
- 添加了sqlite3_db_config (db, SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION ) 接口,该接口允许启用sqlite3_load_extension() C-API,同时保持 load_extension() SQL 函数处于禁用状态以确保安全。
- 更改 Unix 上的临时目录搜索算法,允许具有写入和执行权限但没有读取权限的目录作为临时目录。对“.”应用同样的标准。后备目录。
Bug修复:
- 修复了多行一次性 DELETE 优化的问题,该问题导致它使用 WHERE 子句中的自引用子查询计算不正确的答案。修复票证 dc6ebeda9396087
- 当表是具有 INTEGER PRIMARY KEY的rowid 表且 WHERE 子句包含 OR 且表具有一个或多个能够触发 OR 优化的索引,但没有索引引用任何表列时,使用 DELETE 修复可能的段错误除了 INTEGER PRIMARY KEY。机票16c9801ceba49。
- 检查 WHERE 子句下推优化时,验证复合内部 SELECT 的所有项都是非聚合的,而不仅仅是最后一项。修复工单 f7f8c97e97597。
- 修复了 Windows 中当两个或多个进程尝试同时恢复同一个热日志时可能发生的锁定竞争条件。
哈希:
- SQLITE_SOURCE_ID:“2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2”
- sqlite3.c 的 SHA1:9b9171b1e6ce7a980e6b714e9c0d9112657ad552
向后移植到补丁版本 3.12.2 (2016-04-18) 的错误修复:
- 修复版本 3.12.0 和 3.12.1 中的向后兼容性问题:声明为“INTEGER” PRIMARY KEY的列(在数据类型关键字周围加上引号)未被识别为 INTEGER PRIMARY KEY,这导致数据库文件不兼容。机票7d7525cb01b68
- 修复一个错误(自版本 3.9.0开始存在),如果打开PRAGMA reverse_unordered_selects ,该错误可能导致DELETE 操作丢失行。机票a306e56ff68b8fa5
- 修复代码生成器中的错误,如果连接两个或多个虚拟表并且在连接的外循环中使用的虚拟表具有IN 运算符约束,该错误可能导致不正确的结果。
- 在确定用于排序大量数据的缓存大小时,正确解释负的“PRAGMA cache_size”值。
向后移植到补丁版本 3.12.1 (2016-04-08) 的错误修复:
- 修复了 3.12.0 版引入的边界条件错误,该错误可能会在大量使用SAVEPOINT期间导致崩溃。机票7f7f8026eda38。
- 修复视图,以便它们在可能的情况下从定义它们的表中继承列数据类型。
- 修复查询规划器,以便 IS 和 IS NULL 运算符能够在 LEFT OUTER JOIN 上驱动索引。
2016-04-18 (3.12.2)
- 修复版本 3.12.0 和 3.12.1 中的向后兼容性问题:声明为“INTEGER” PRIMARY KEY的列(在数据类型关键字周围加上引号)未被识别为 INTEGER PRIMARY KEY,这导致数据库文件不兼容。机票7d7525cb01b68
- 修复一个错误(自版本 3.9.0开始存在),如果打开PRAGMA reverse_unordered_selects ,该错误可能导致DELETE 操作丢失行。机票a306e56ff68b8fa5
- 修复代码生成器中的错误,如果连接两个或多个虚拟表并且在连接的外循环中使用的虚拟表具有IN 运算符约束,该错误可能导致不正确的结果。
- 在确定用于排序大量数据的缓存大小时,正确解释负的“PRAGMA cache_size”值。
哈希:
- SQLITE_SOURCE_ID:“2016-04-18 17:30:31 92dc59fd5ad66f646666042eb04195e3a61a9e8e”
- sqlite3.c 的 SHA1:de5a5898ebd3a3477d4652db143746d008b24c83
2016-04-08 (3.12.1)
- 修复了 3.12.0 版引入的边界条件错误,该错误可能会在大量使用SAVEPOINT期间导致崩溃。机票7f7f8026eda38。
- 修复视图,以便它们在可能的情况下从定义它们的表中继承列数据类型。
- 修复查询规划器,以便 IS 和 IS NULL 运算符能够在 LEFT OUTER JOIN 上驱动索引。
哈希:
- SQLITE_SOURCE_ID:“2016-04-08 15:09:49 fe7d3b75fe1bde41511b323925af8ae1b910bc4d”
- sqlite3.c 的 SHA1:ebb18593350779850e3e1a930eb84a70fca8c1d1
2016-04-01 (3.9.3)
- 向后移植一个 简单的查询规划器优化 ,允许 IS 运算符在 LEFT OUTER JOIN 上驱动索引。与版本 3.9.2基线 相比没有其他更改 。
2016-03-29 (3.12.0)
- SQLITE_DEFAULT_PAGE_SIZE从 1024 增加到4096。SQLITE_DEFAULT_CACHE_SIZE从2000 更改为 -2000,因此默认使用相同数量的缓存内存。有关详细信息,请参阅有关3.12.0 版页面大小更改的应用说明
。
性能增强:
- 对Lemon 解析器生成器的增强 ,使其创建更小、更快的 SQL 解析器。
- 只有在两个或多个附加数据库都被修改时才创建主日志文件,没有将PRAGMA 同步设置为 OFF,也没有将journal_mode设置为 OFF、MEMORY 或 WAL。
- 仅在大小超过阈值时创建语句日志文件。否则日志将保留在内存中并且不会发生 I/O。可以在编译时使用SQLITE_STMTJRNL_SPILL或在启动时使用sqlite3_config ( SQLITE_CONFIG_STMTJRNL_SPILL ) 配置阈值。
- 即使xBestIndex方法没有将虚拟表列的 sqlite3_index_constraint_usage.omit 标志设置到 IN 运算符的左侧, 查询规划器也能够优化虚拟表上的 IN 运算符。
- 查询规划器现在可以更好地优化3 向或更高连接中的虚拟表 访问,其中虚拟表的约束被拆分到连接的两个或多个其他表中。
- 更有效地处理应用程序定义的 SQL 函数,尤其是在应用程序定义数百或数千个自定义函数的情况下。
- 查询规划器在估算 ORDER BY 的成本时会考虑 LIMIT 子句。
- 配置脚本(在 unix 上)自动检测 pread() 和 pwrite() 并设置编译时选项以使用这些操作系统接口(如果它们可用)。
- 减少保存架构所需的内存量。
- 其他杂项微优化以提高性能和减少内存使用。
新的功能:
- 向sqlite3_db_config()添加了SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER选项,它允许在运行时启用或禁用fts3_tokenizer() SQL 函数 的双参数版本。
- 向RBU扩展 添加了sqlite3rbu_bp_progress() 接口。
- PRAGMA defer_foreign_keys=ON语句现在还禁用 外键上的 RESTRICT操作。
- 添加了sqlite3_system_errno()接口。
- 添加了SQLITE_DEFAULT_SYNCHRONOUS和SQLITE_DEFAULT_WAL_SYNCHRONOUS 编译时选项。SQLITE_DEFAULT_SYNCHRONOUS编译时选项替换了不再受支持的 SQLITE_EXTRA_DURABLE 选项 。
- 增强了命令行 shell中的“.stats”命令,以显示有关从 /proc 获得的 I/O 性能的更多信息(如果可用)。
Bug修复:
- 确保单个语句中来自多个触发器的sqlite3_set_auxdata()值不会相互干扰。机票dc9b1c91。
- 修复“x IN (SELECT...)”形式的表达式的代码生成器,其中 RHS 上的 SELECT 语句是相关子查询。机票5e3c886796e5512e。
- 修复与sqlite3_db_readonly()接口
关联的无害 TSAN 警告。
哈希:
- SQLITE_SOURCE_ID:“2016-03-29 10:14:15 e9bb4cf40f4971974a74468ef922bdee481c988b”
- sqlite3.c 的 SHA1:cba2be96d27cb51978cd4a200397a4ad178986eb
潜在的破坏性变化:
2016-03-03 (3.11.1)
- 改进了 VisualStudio 使用的 Makefile 和构建脚本。
- 修复了“优化”命令可能导致索引损坏 的FTS5问题。
- 修复使用FTS5查询损坏的数据库文件 时可能发生的缓冲区重读。
- 将spellfix1扩展的最大“范围”值从 6 增加到 30。
- SQLITE_SOURCE_ID:“2016-03-03 16:17:53 f047920ce16971e573bc6ec9a48b118c9de2b3a7”
- sqlite3.c 的 SHA1:3da832fd2af36eaedb05d61a8f4c2bb9f3d54265
2016-02-15 (3.11.0)
- 增强的WAL 模式,以便它可以有效地处理大于cache_size的事务。
- 添加了FTS5 详细信息选项。
- 为PRAGMA synchronous添加了“EXTRA”选项,当在 DELETE 模式下取消链接回滚日志时,它会同步包含的目录,以获得更好的持久性。SQLITE_EXTRA_DURABLE编译时选项默认启用 PRAGMA synchronous=EXTRA。
- 增强了查询规划器,使其能够使用覆盖索引作为OR 优化的一部分。
- 避免在UPDATE语句 中对未更改的列重新计算NOT NULL和CHECK 约束。
- 许多微优化,导致库比以前的版本更快。
命令行 shell的增强功能:
- 默认情况下,shell 现在处于“自动解释”模式。EXPLAIN命令的输出 是自动格式化的。
- 添加了“.vfslist”点命令。
- SQLITE_ENABLE_EXPLAIN_COMMENTS编译时选项现在在标准构建中默认打开
。
TCL 接口的增强功能:
- 如果使用“-uri 1”选项打开数据库连接,则 “备份”和“恢复”命令 会使用URI 文件名。
- 在“sqlite3”命令中添加了“-sourceid”选项。
生成文件改进:
- 改进了配置脚本中的 pthreads 检测。
- 添加从合并 tarball执行 MSVC Windows 构建的能力。
Bug修复
- 修复了协同例程之间不正确共享 VDBE 临时寄存器的问题,该问题可能导致在模糊情况下不正确的查询结果。机票 d06a25c84454a。
- 修复sqlite3_result_subtype()接口中的一个问题,该问题可能会在模糊的情况下导致json1扩展出现问题。修复工单 f45ac567eaa9f9。
- 转义 JSON 字符串中的控制字符。修复票证 ad2559db380abf8。
- 只要未定义SQLITE_OMIT_DEPRECATED,就可以在内置 unix VFS 中重新启用 xCurrentTime 和 xGetLastError 方法。
向后兼容性:
- 由于持续的安全问题,除非使用SQLITE_ENABLE_FTS3_TOKENIZER编译 SQLite,否则很少使用且鲜为人知的fts3_tokenizer()函数的双参数版本被禁用。
哈希:
- SQLITE_SOURCE_ID:“2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f”
- sqlite3.c 的 SHA1:df01436c5fcfe72d1a95bc172158219796e1a90b
一般改进:
2016-01-20 (3.10.2)
- 版本 3.10.0 在LIKE运算符中引入了一个大小写折叠错误,此补丁版本修复了该错误。机票
80369eddd5c94。
其他杂项错误修复:
- 修复使用 -DSQLITE_HAS_CODEC 编译 SQLite 时可能发生的释放后使用。
- 修复构建,使其与 -DSQLITE_OMIT_WAL 一起工作。
- 修复合并的配置脚本,以便 --readline 选项在 Raspberry PI 上再次起作用。
哈希:
- SQLITE_SOURCE_ID:“2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9”
- sqlite3.c 的 SHA1:f7088b19d97cd7a1c805ee95c696abd54f01de4f
关键错误修复:
2016-01-14 (3.10.1)
- 添加SQLITE_FCNTL_JOURNAL_POINTER文件控件。
错误修复:
- 修复查询规划器中存在 16 个月的错误,当标量子查询尝试使用块排序优化时,该错误可能会生成不正确的结果。票
cb3aa0641d9a4。
哈希:
- SQLITE_SOURCE_ID:“2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588”
- sqlite3.c 的 SHA1:1398ba8e4043550a533cdd0834bfdad1c9eab0f4
新功能:
2016-01-06 (3.10.0)
- 添加了对虚拟表上的LIKE、GLOB和REGEXP运算符的支持。
- 将colUsed 字段添加到sqlite3_index_info以供sqlite3_module.xBestIndex方法使用。
- 增强PRAGMA cache_spill语句以接受 32 位整数参数,该参数是禁止缓存溢出的阈值。
- 在 unix 上,如果打开指向数据库文件的符号链接,则相应的日志文件基于实际文件名,而不是符号链接名称。
- 向sqldiff添加了“--transaction”选项。
- 添加了sqlite3_db_cacheflush()接口。
- 添加了sqlite3_strlike()接口。
- 使用内存映射 I/O时,将数据库文件映射为只读,以便应用程序中的杂散指针和/或数组溢出不会意外修改数据库文件。
- 添加了实验性的 sqlite3_snapshot_get()、sqlite3_snapshot_open()和sqlite3_snapshot_free()接口。这些可能会在后续版本中更改或删除。
- 增强日期和时间函数中的“utc”修饰符,以便在已知日期/时间已经采用 UTC 时它是空操作。(这不是兼容性中断,因为在这种情况下,该行为长期以来被记录为“未定义”。)
- 在json扩展 中添加了json_group_array()和json_group_object() SQL 函数 。
- 添加了SQLITE_LIKE_DOESNT_MATCH_BLOBS编译时选项。
- 许多小的性能优化。
便携性增强:
- 解决 HP/UX 上 HP C 编译器优化器中的符号扩展错误。
(细节)
命令行 shell的增强功能:
- 添加了“.changes ON|OFF”和“.vfsinfo”点命令。
- 在 Windows
上的cmd.exe中运行时在 MBCS 和 UTF8 之间转换。
对 makefile 的增强:
- 向各种 autoconf 生成的配置脚本添加了 --enable-editline 和 --enable-static-shell 选项。
- 在 makefile 中省略所有“awk”的使用,使 MSVC 用户的构建更容易。
重要修正:
- 修复不一致的整数与浮点比较操作,如果索引是在包含大整数和类似大小的浮点值的表列上创建的,则可能导致索引损坏。机票 38a97a87a6。
- 修复查询规划器中可能出现在格式错误的公用表表达式上的无限循环。
- sqldiff工具
中的各种错误修复。
哈希:
- SQLITE_SOURCE_ID:“2016-01-06 11:01:07 fd0a50f0797d154fefff724624f00548b5320566”
- sqlite3.c 的 SHA1:b92ca988ebb6df02ac0c8f866dbf3256740408ac
一般改进:
2015-11-02 (3.9.2)
- 修复模式解析器,以便它解释某些(晦涩且格式错误的)CREATE TABLE 语句与旧版相同。修复票证 ac661962a2aeab3c331
- 修复了一个查询规划器问题,该问题可能由于在相关标量子查询的 FROM 子句中的子查询中使用自动索引而导致错误答案。修复工单 8a2adec1。
- SQLITE_SOURCE_ID:“2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328”
- sqlite3.c 的 SHA1:1c4013876f50bbaa3e6f0f98e0147c76287684c1
2015-10-16 (3.9.1)
- 修复json1 扩展,使其不将ASCII 换页符识别为空白字符,以符合 RFC-7159。修复票证 57eec374ae1d0a1d
- 添加一些 #ifdef 和构建脚本更改以解决 3.9.0 版本后出现的编译问题。
- SQLITE_SOURCE_ID:“”2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02”
- sqlite3.c 的 SHA1:5e6d1873a32d82c2cf8581f143649940cac8ae49
2015-10-14 (3.9.0)
- SQLite的版本编号约定已修改为使用新兴的语义版本控制标准。
新功能和增强功能:
- 在源代码树和合并中添加了 json1 扩展模块。使用SQLITE_ENABLE_JSON1编译时选项 启用支持。
- 将全文搜索版本 5 (FTS5)添加到合并中,使用SQLITE_ENABLE_FTS5启用。FTS5 将被视为“实验性”(受制于不兼容的更改)至少再发布一个周期。
- CREATE VIEW语句现在接受视图名称后面的可选列名称列表。
- 添加了对表达式索引的支持。
- 在SELECT语句 的 FROM 子句中 添加了对表值函数的支持。
- 添加了对同名虚拟表的支持。
- VIEW现在可以在最初创建时引用未定义的表和函数。在查询中使用 VIEW 时,会报告缺少表和函数。
- 添加了sqlite3_value_subtype()和sqlite3_result_subtype() 接口(由json1 扩展使用)。
- 查询规划器现在能够在 WHERE 子句中使用包含 AND 连接项的 部分索引。
- sqlite3_analyzer.exe 实用程序已更新以报告每个 btree 的深度并显示索引和 WITHOUT ROWID 表的平均扇出。
- 增强了dbstat 虚拟表,使其可以用作
表值函数,其中参数是要分析的架构。
其他变化:
- 已弃用和未记录 8 年的sqlite3_memory_alarm()接口已更改为空操作。
重要修正:
- 修复了 SQLite 加密扩展中的一个严重错误,如果VACUUM命令更改了加密随机数的大小,该 错误可能导致数据库变得不可读和不可恢复。
- 在sqlite3_initialize()的实现中添加了一个内存屏障, 以帮助确保它是线程安全的。
- 修复OR 优化,使其始终忽略不使用索引的子计划。
- 不要对源自 LEFT JOIN 的 ON 或 USING 子句的术语应用 WHERE 子句下推优化。修复工单 c2a19d81652f40568c。
- SQLITE_SOURCE_ID:“2015-10-14 12:29:53 a721fc0d89495518fe5612e2e3bbc60befd2e90d”
- sqlite3.c 的 SHA1:c03e47e152ddb9c342b84ffb39448bf4a2bd4288
政策变化:
2015-07-29 (3.8.11.1)
- 恢复PRAGMA cache_size的未记录的副作用:如果以前未访问过数据库,则强制解析数据库模式。
- 修复3.8.11 版本发布几小时后报告的 WITHOUT ROWID 表 的sqlite3_changes ()中长期存在的问题。
- SQLITE_SOURCE_ID:“2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f”
- sqlite3.c 的 SHA1:3be71d99121fe5b17f057011025bcf84e7cc6c84
2015-07-27 (3.8.11)
- 添加了实验性RBU扩展。请注意,此扩展是实验性的,可能会以不兼容的方式进行更改。
- 添加了实验性FTS5扩展。请注意,此扩展是实验性的,可能会以不兼容的方式进行更改。
- 添加了sqlite3_value_dup()和sqlite3_value_free()接口。
- 增强spellfix1扩展以支持ON CONFLICT子句。
- IS 操作员现在可以驱动索引。
- 增强查询规划器以允许对由协同例程实现的 FROM 子句子查询进行自动索引。
- 禁止在公用表表达式中使用“rowid” 。
- 添加了PRAGMA cell_size_check命令以更好和更早地检测数据库文件损坏。
- 将matchinfo 'b' 标志添加到FTS3中的matchinfo()函数。
- 改进了数据库文件的模糊测试,修复了发现的问题。
- 添加 fuzzcheck 测试程序并在“make test”上使用 SQL 和数据库测试用例自动运行该程序。
- 添加了SQLITE_MUTEX_STATIC_VFS1静态互斥锁并在 Windows VFS中使用它。
- sqlite3_profile()回调被调用(通过sqlite3_reset ()或 sqlite3_finalize())用于未运行完成的语句。
- 增强页面缓存,以便它可以预分配内存块以用于初始设置的页面缓存行。将默认预分配设置为 100 页。将常见工作负载的性能提高约 5%。
- 与之前的版本相比,在相同数量的 CPU 周期下,杂项微优化导致工作量增加了 22.3%。SQLite 现在的运行速度是3.8.0 版本的两倍,是3.3.9 版本的三倍。(在带有 gcc 4.8.2 和 -Os 的 Ubuntu 14.04 x64 上的 speedtest1.c工作负载上使用 cachegrind测量。您的性能可能会有所不同。)
- 添加了sqlite3_result_zeroblob64()和sqlite3_bind_zeroblob64()
接口。
重要错误修复:
- 修复CREATE TABLE AS以便 TEXT 类型的列永远不会以 INT 值结束。机票 f2ad7de056ab1dc9200
- 修复CREATE TABLE AS ,如果右侧的 SELECT 语句因错误而中止,它不会在 sqlite_master 表中留下 NULL 条目。机票 873cae2b6e25b
- 修复跳过扫描优化,以便在对WITHOUT ROWID表使用OR 优化时它可以正常工作。机票 8fd39115d8f46
- 修复sqlite3_memory_used()和sqlite3_memory_highwater()接口,以便它们确实提供 64 位答案。
哈希:
- SQLITE_SOURCE_ID:“2015-07-27 13:49:41 b8e92227a469de677a66da62e4361f099c0b79d0”
- sqlite3.c 的 SHA1:719f6891abcd9c459b5460b191d731cd12a3643e
2015-05-20 (3.8.10.2)
- 修复了版本 3.8.7引入的索引损坏问题。如果表有两个将键值转换为 INTEGER 并再次返回到 TEXT 的嵌套触发器,则具有 TEXT 键的索引可能会被插入到相应表中的索引破坏。门票34cd55d68e0
- SQLITE_SOURCE_ID:“2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4”
- sqlite3.c 的 SHA1:638abb77965332c956dbbd2c8e4248e84da4eb63
2015-05-09 (3.8.10.1)
- 使sqlite3_compileoption_used()响应SQLITE_ENABLE_DBSTAT_VTAB 编译时选项。
- 修复某些版本的 MSVC 命令行 shell中的无害警告。
- 修复dbstat 虚拟表的小问题。
- SQLITE_SOURCE_ID:“2015-05-09 12:14:55 05b4b1f2a937c06c90db70c09890038f6c98ec40”
- sqlite3.c 的 SHA1:85e4e1c08c7df28ef61bb9759a0d466e0eefbaa2
2015-05-07 (3.8.10)
- 添加了用于计算两个 SQLite 数据库文件之间差异 的sqldiff.exe实用程序。
- 将matchinfo y 标志添加到FTS3的 matchinfo()函数。
- ORDER BY、VACUUM、CREATE INDEX、 PRAGMA integrity_check和PRAGMA quick_check的性能改进。
- 修复SQL 模糊测试时发现的许多隐蔽问题。
- 识别接口文档中重要对象的所有方法。(例子)
- 使美国 Fuzzy Lop 模糊器成为 SQLite测试策略 的标准部分。
- 将“.binary”和“.limits”命令添加到命令行 shell。
- 使用SQLITE_ENABLE_DBSTAT_VTAB选项 编译时,使dbstat 虚拟表成为标准构建的一部分。
- SQLITE_SOURCE_ID:“2015-05-07 11:53:08 cf975957b9ae671f34bb65f049acf351e650d437”
- sqlite3.c 的 SHA1:0b34f0de356a3f21b9dfc761f3b7821b6353c570
2015-04-08 (3.8.9)
- 添加 VxWorks-7 作为官方支持和测试的平台。
- 添加了sqlite3_status64()接口。
- 修复内存大小跟踪,即使 SQLite 使用超过 2GiB 的内存,它也能正常工作。
- 添加了PRAGMA index_xinfo命令。
- 修复sqlite3_blob_read()和sqlite3_blob_write()接口 中潜在的 32 位整数溢出问题 。
- 确保准备好的语句在 SQLITE_BUSY 和 SQLITE_LOCKED 的扩展错误代码上自动重置,即使在使用SQLITE_OMIT_AUTORESET编译时也是如此。
- 更正 sqlite3_analyzer.exe 实用程序中与 WITHOUT ROWID 表相关的错误计数。
- 在命令行 shell中添加了“.dbinfo”命令。
- 提高使用 OR 运算符和至少一个辅助 fts 函数的 fts3/4 查询的性能。
- 修复 fts3 snippet() 函数中的错误,该错误导致它从以列中第一个标记开头的片段中省略前导分隔符。
- SQLITE_SOURCE_ID:“2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09”
- sqlite3.c 的 SHA1:49f1c3ae347e1327b5aaa6c7f76126bdf09c6f42
2015-02-25 (3.8.8.3)
- 修复了一个错误(ticket 2326c258d02ead33 ),如果部分索引的限定约束出现在 LEFT JOIN 的 ON 子句中,该 错误可能导致不正确的结果。
- 添加了在命令行 shell的 unix 版本中链接“ linenoise ”命令行编辑库的能力。
- SQLITE_SOURCE_ID:“2015-02-25 13:29:11 9d6c1880fb75660bbabd693175579529785f8a6b”
- sqlite3.c 的 SHA1:74ee38c8c6fd175ec85a47276dfcefe8a262827a
2015-01-30 (3.8.8.2)
- 增强sqlite3_wal_checkpoint_v2(TRUNCATE)接口,即使没有要完成的检查点工作,它也会截断 WAL 文件。
- SQLITE_SOURCE_ID:“2015-01-30 14:30:45 7757fc721220e136620a89c9d28247f28bbbc098”
- sqlite3.c 的 SHA1:85ce79948116aa9a087ec345c9d2ce2c1d3cd8af
2015-01-20 (3.8.8.1)
- 修复排序逻辑中的错误,自 3.8.4 版以来存在,该错误可能导致输出在包含 ORDER BY 子句、LIMIT 子句以及结果集中大约 60 列或更多列的查询中以错误的顺序出现. 票f97c4637102a3ae72b79。
- SQLITE_SOURCE_ID:“2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55”
- sqlite3.c 的 SHA1:33987fb50dcc09f1429a653d6b47672f5a96f19e
2015-01-16 (3.8.8)
- 添加了PRAGMA data_version命令,可用于确定数据库文件是否已被另一个进程修改。
- 向sqlite3_wal_checkpoint_v2()接口添加了SQLITE_CHECKPOINT_TRUNCATE选项,并对 PRAGMA wal_checkpoint进行了相应的增强。
- 添加了sqlite3_stmt_scanstatus()接口,仅在使用SQLITE_ENABLE_STMT_SCANSTATUS编译时可用。
- sqlite3_table_column_metadata()得到增强,可以在WITHOUT ROWID表上正常工作, 并在列名参数为 NULL 时检查表是否存在。该接口现在也默认包含在构建中,不需要SQLITE_ENABLE_COLUMN_METADATA编译时选项。
- 添加了SQLITE_ENABLE_API_ARMOR编译时选项。
- 添加了SQLITE_REVERSE_UNORDERED_SELECTS编译时选项。
- 添加了SQLITE_SORTER_PMASZ编译时选项和SQLITE_CONFIG_PMASZ 启动时选项。
- 向sqlite3_config()添加了SQLITE_CONFIG_PCACHE_HDRSZ选项, 这使得应用程序更容易确定用于SQLITE_CONFIG_PAGECACHE的适当内存量。
- VALUES 子句中的行数不再受 SQLITE_LIMIT_COMPOUND_SELECT限制。
- 添加了实现 eval() SQL 函数的eval.c
可加载扩展,该函数将递归评估 SQL。
性能增强:
- 减少平衡 b 树所涉及的 memcpy() 操作的数量,整体性能提升 3.2%。
- 改进了跳跃扫描优化的成本估算。
- 如果合适
,自动索引优化现在能够生成部分索引。
Bug修复:
- 通过在截断日志文件后立即调用 fsync(),使用“PRAGMA journal_mode=TRUNCATE”确保断电后的持久性。
- 查询规划器现在可以识别 LEFT JOIN 右侧表中的任何列都可以为 NULL,即使该列具有 NOT NULL 约束。避免在这些情况下尝试优化 NULL 测试。修复工单 6f2222d550f5b0ee7ed。
- 确保 ORDER BY 将行按升序排列,即使 DISTINCT 运算符是使用降序索引实现的。修复票证 c5ea805691bfc4204b1cb9e。
- 修复了在共享缓存模式下运行多个线程时可能在压力下发生的数据竞争,其中一些线程正在打开和关闭连接。
- 修复 american fuzzy lop发现的模糊崩溃错误。机票 a59ae93ee990a55。
- 解决 GCC 优化器错误(适用于 MacOS 10.7 上的 gcc 4.2.1),该错误导致
R-Tree 扩展在使用 -O3 编译时计算不正确的结果。
其他变化:
- 禁止使用 strchrnul() C 库例程,除非使用 -DHAVE_STRCHRNULL 编译时选项专门启用它。
- 改进了 likelihood()、likely()和unlikely() SQL 提示函数的有效性和准确性。
- SQLITE_SOURCE_ID:“2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf”
- sqlite3.c 的 SHA1:91aea4cc722371d58aae3d22e94d2a4165276905
新的功能:
2014-12-09 (3.8.7.4)
- 错误修复:添加上一版本中省略的互斥锁。
- SQLITE_SOURCE_ID:“2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e”
- sqlite3.c 的 SHA1:0a56693a3c24aa3217098afab1b6fecccdedfd23
2014-12-05 (3.8.7.3)
- 错误修复:确保缓存的 KeyInfo 对象(应用程序不可见的内部抽象)在共享缓存模式下运行时不会过时,并且经常关闭和重新打开一些数据库连接,同时使同一共享缓存上的其他数据库连接持续打开。机票 e4a18565a36884b00edf。
- 错误修复:认识到 LEFT JOIN 右侧表中的任何列都可以为 NULL,即使该列具有 NOT NULL 约束也是如此。不要应用假设该列永远不会为 NULL 的优化。机票 6f2222d550f5b0ee7ed。
- SQLITE_SOURCE_ID:“2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86”
- sqlite3.c 的 SHA1:3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
2014-11-18 (3.8.7.2)
- 增强ROLLBACK命令,以便只要模式未更改就允许挂起的查询继续。以前,ROLLBACK 会导致所有挂起的查询因SQLITE_ABORT或SQLITE_ABORT_ROLLBACK错误而失败。如果 ROLLBACK 修改架构,该错误仍会返回。
- 错误修复:确保来自 OP_Column 的 NULL 结果完全且完全为 NULL,并且没有设置 MEM_Ephem 位。机票094d39a4c95ee4。
- 错误修复:sqlite3_mprintf() 中的 %c 格式能够处理大于 70 的精度。
- 错误修复:不要从构成 IN 运算符右侧的 SELECT 中自动删除 DISTINCT 关键字,因为如果 SELECT 还包含 LIMIT,则这是必需的。票证db87229497。
- SQLITE_SOURCE_ID:“2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93”
- sqlite3.c 的 SHA1:b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a
2014-10-29 (3.8.7.1)
- 在PRAGMA journal_mode=TRUNCATE模式下,在截断日志文件后立即调用 fsync() 以确保事务在掉电时持久。
- 修复在使用ALTER TABLE ADD COLUMN添加的表末尾更新字段的 NULL 值时可能发生的断言错误。
- 不要尝试使用标准 C 库中的 strchrnul() 函数,除非设置了 HAVE_STRCHRNULL 编译时选项。
- 修复了与在 WHERE 子句中 使用rowid的VIEW上运行 UPDATE 或 DELETE 相关的几个问题 。
- SQLITE_SOURCE_ID:“2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221”
- sqlite3.c 的 SHA1:2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c
2014-10-17 (3.8.7)
- 许多微优化导致 20.3% 的工作量与以前的版本相比相同的 CPU 周期数。自3.8.0 版本以来的累计性能提升为 61%。(在带有 gcc 4.8.1 和 -Os 的 Ubuntu 13.10 x64 上的 speedtest1.c工作负载上使用 cachegrind测量。您的性能可能会有所不同。)
- 分拣机可以使用辅助辅助线程来增加实时响应。此功能默认关闭,可以使用PRAGMA threads命令或SQLITE_DEFAULT_WORKER_THREADS 编译时选项启用。
- 增强跳过扫描优化,使其能够跳过出现在索引中间的索引项,而不仅仅是索引的左侧。
- 改进了CAST运算符的优化。
- 查询计划器如何使用sqlite_stat4
信息来估算计划成本的各种改进。
新的功能:
- 添加了具有 64 位长度参数的新接口: sqlite3_malloc64()、 sqlite3_realloc64()、 sqlite3_bind_blob64()、 sqlite3_result_blob64()、 sqlite3_bind_text64()和 sqlite3_result_text64()。
- 添加了新接口sqlite3_msize(),它返回从sqlite3_malloc64()及其变体获得的内存分配的大小。
- 添加了SQLITE_LIMIT_WORKER_THREADS选项到sqlite3_limit()和 PRAGMA threads命令,用于配置可用工作线程的数量。
- spellfix1扩展允许应用程序有选择地为每个 INSERT 指定 rowid 。
- 添加了用户身份验证
扩展。
Bug修复:
- 修复部分索引实现中的错误,如果在子查询或视图中使用部分索引,该错误可能会导致错误答案。机票98d973b8f5。
- 修复一个查询计划程序错误,当 DESC 索引用于在具有相同 GROUP BY 子句的查询上实现 ORDER BY 子句时,该错误可能会导致以错误的方向扫描表(从而颠倒输出顺序)。票ba7cbfaedc7e6。
- 修复sqlite3_trace()中的一个错误,如果该语句需要重新准备,该错误会导致它有时无法打印 SQL 语句。机票11d5aa455e0d98f3c1e6a08
- 修复错误的 assert() 语句。机票369d57fb8e5ccdff06f1
测试、调试和分析更改:
- 当使用SQLITE_DEBUG、SQLITE_ENABLE_SELECTTRACE 和 SQLITE_ENABLE_WHERETRACE编译时,在命令行 shell中使用“.selecttrace”和“.wheretrace”命令显示 ASCII 艺术抽象语法树图 。还提供 sqlite3TreeViewExpr() 和 sqlite3TreeViewSelect() 入口点,当在断点处停止时,可以使用调试器调用这些入口点以显示解析树。
- 删除对 SQLITE_ENABLE_TREE_EXPLAIN 的支持。SELECTTRACE 机制提供更有用的诊断信息。
- 用于配置辅助内存使用的命令行 shell的新选项:--pagecache、--lookaside 和 --scratch。
- SQLITE_SOURCE_ID:“2014-10-17 11:24:17 e4ab094f8afce0817f4074e823fabe59fc29ebb4”
- sqlite3.c 的 SHA1:56dcf5e931a9e1fa12fc2d600cd91d3bf9b639cd
性能增强:
2014-08-15 (3.8.6)
- 在 SQL 解析器中添加了对十六进制整数文字的支持。(例如:0x123abc)
- 增强了PRAGMA integrity_check命令以检测UNIQUE和 NOT NULL约束违规。
- 将SQLITE_MAX_ATTACHED的最大值从 62 增加到 125。
- 将发出SQLITE_PROTOCOL错误之前的WAL 模式超时 从 1 秒增加到 10 秒。
- 添加了likely(X) SQL 函数。
- unicode61分词器现在默认包含在FTS4中。
- 运行ANALYZE时,对所有准备好的语句触发自动重新准备。
- 在源代码树中添加了一个新的 可加载扩展源代码文件: fileio.c
- 将扩展函数readfile(X) 和 writefile(X,Y) (使用从前一个项目符号中的 fileio.c 复制/粘贴的代码)添加到 命令行 shell。
- 将.fullschema点命令添加到命令行外壳。
性能增强:
- 在IN operator右侧的子查询上停用DISTINCT关键字。
- 添加评估IN 运算符作为比较序列的功能,作为使用表查找的替代方法。在可能更快的情况下使用比较序列实现,例如当 IN 运算符的右侧很小和/或经常更改时。
- 查询规划器现在使用sqlite_stat4信息(由ANALYZE创建)来帮助确定跳过扫描优化是否合适。
- 确保查询规划器永远不会尝试使用自制的临时索引来代替模式定义的索引。
- 其他小调整以提高VDBE代码的质量。
Bug修复:
- 修复了CREATE UNIQUE INDEX中的错误,该错误是在版本 3.8.2 中添加WITHOUT ROWID支持时引入 的,该错误允许为非唯一的 NOT NULL 列提供 UNIQUE 索引。机票9a6daf340df99ba93c
- 修复了前一版本中引入的R-Tree 扩展中的一个错误,该错误可能会导致在IN 运算符左侧使用 R-Tree 的 rowid 的查询产生不正确的结果。票d2889096e7bdeac6。
- 修复sqlite3_stmt_busy()接口,以便它为已执行但从未重置 的ROLLBACK语句提供正确答案。
- 修复一个错误,如果具有作为聚合函数的 DEFAULT 的列试图使用其 DEFAULT,则该错误会导致空指针被取消引用。门票3a88d85f36704eebe1
- 命令行 shell的 CSV 输出现在始终使用 CRNL 作为行分隔符,并避免在数据中包含的 NL 前面插入 CR。
- 修复IN 运算符的列亲和性问题。机票9a8b09f8e6。
- 修复ANALYZE命令,以便它为 sqlite_stat4表中的WITHOUT ROWID表添加正确的示例。票b2fa5424e6fcb15。
- SQLITE_SOURCE_ID:“2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e”
- sqlite3.c 的 SHA1:72c64f05cd9babb9c0f9b3c82536d83be7804b1c
2014-06-04 (3.8.5)
- 添加了对按索引进行部分排序的支持。
- 增强查询规划器,使其始终更喜欢使用 WHERE 子句术语超集的索引,而不是其他索引。
- 改进FTS4的automerge 命令以更好地控制受大量更新影响的全文索引的索引大小。
- 将sqlite3_rtree_query_callback()接口添加到R-Tree 扩展
- 添加了新的URI 查询参数“nolock”和“immutable”。
- 通过不记住只读数据库连接上的 CHECK 约束来使用更少的内存。
- 为WITHOUT ROWID表 启用OR 优化。
- 呈现形式为“x IN (?)”的表达式(在 IN 运算符右侧的列表中具有单个值),就好像它们位于“x==?”一样,类似地优化“x NOT IN (? )"
- 将“.system”和“.once”命令添加到命令行 shell。
- 将SQLITE_IOCAP_IMMUTABLE位添加到可由VFS的 xDeviceCharacteristics 方法返回的位集中。
- 添加了SQLITE_TESTCTRL_BYTEORDER测试控件。
Bug修复:
- 在没有 FROM 子句的查询中忽略 OFFSET 子句。门票07d6a0453d
- 涉及“x IN (?)”形式的表达式的查询断言错误。机票e39d032577。
- 报告的列数据类型不正确。机票a8a0d2996a
- 针对具有超过 16 个索引的表的查询返回重复行,每个索引在一个单独的列上,并且所有索引都通过 OR 连接的约束使用。机票10fb063b11
- 部分索引导致更新或替换断言错误。门票2ea3e9fe63
- 使用 NULL 参数调用未记录的 SQL 函数 sqlite_rename_parent() 时崩溃。机票264b970c43
- 如果查询具有相同的 GROUP BY,则忽略 ORDER BY。机票b75a9ca6b0
- 当所有输入均为空字符串时,group_concat(x,'') SQL 函数返回 NULL 而不是空字符串。机票55746f9e65
- 修复了 VDBE 代码生成器中的错误,该错误在执行 INSERT INTO ... SELECT 语句时导致崩溃,其中插入的列数大于目标表中的列数。机票e9654505cfd
- 修复了命令行 shell中 CSV 导入的问题 ,如果 CSV 文件中第一行的最左边字段的大小均为零字节且未加引号,则不会导入任何数据。
- 修复了 FTS4 中的一个问题,即最左边包含未索引列名称作为前缀的列未被索引,而不是名称完全匹配的列。
- 修复sqlite3_db_readonly()接口,如果由于文件格式写入版本号太大而导致数据库为只读,则返回 true。
- SQLITE_SOURCE_ID:“2014-06-04 14:06:34 b1ed4f2a34ba66c29b130f8d13e9092758019212”
- sqlite3.c 的 SHA1:7bc194957238c61b1a47f301270286be5bc5208c
2014-04-03 (3.8.4.3)
- 为可能导致在子查询中混合使用 DISTINCT、GROUP BY 和 ORDER BY 的查询产生错误查询结果的问题 添加 单字符修复。机票 98825a79ce14。
- SQLITE_SOURCE_ID:“2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3”
- sqlite3.c 的 SHA1:310a1faeb9332a3cd8d1f53b4a2e055abf537bdc
2014-03-26 (3.8.4.2)
- 修复了在尝试搜索损坏的数据库文件时可能导致的潜在缓冲区重读。
- SQLITE_SOURCE_ID:“2014-03-26 18:51:19 02ea166372bdb2ef9d8dfbb05e78a97609673a8e”
- sqlite3.c 的 SHA1:4685ca86c2ea0649ed9f59a500013e90b3fe6d03
2014-03-11 (3.8.4.1)
- 解决 C 预处理器宏冲突,该冲突会破坏 Microsoft Visual Studio 某些配置的构建。
- 在计算跳跃扫描优化的成本时,请考虑需要多次查找的事实。
- SQLITE_SOURCE_ID:“2014-03-11 15:27:36 018d317b1257ce68a92908b05c9c7cf1494050d0”
- sqlite3.c 的 SHA1:d5cd1535053a50aa8633725e3595740b33709ac5
2014-03-10 (3.8.4)
- 代码优化和重构以提高性能。
- 将“.clone”和“.save”命令添加到命令行 shell。
- 更新命令行 shell 上的横幅,以在新手用户使用临时内存数据库时提醒他们。
- 修复命令行 shell 中的编辑行支持。
- 使用sqlite3_test_control()的SQLITE_TESTCTRL_VDBE_COVERAGE动词添加对 VDBE 程序覆盖测试的支持 。
- 更新 _FILE_OFFSET_BITS 宏,以便构建在 QNX 上再次运行。
- 将 SrcList.nSrc 的数据类型从类型 u8 更改为类型 int 以解决 AIX 上 C 编译器中的问题。
- 在 Cygwin 上获取扩展加载。
- 错误修复:修复char() SQL 函数,使其在使用零参数调用时返回空字符串而不是“内存不足”错误。
- 错误修复:DISTINCT 现在可以识别zeroblob和所有 0x00 字节的 blob 是同一件事。 门票【fccbde530a】
- 错误修复:为在 WHERE 子句中包含 IS NOT NULL 项并且在 WHERE 子句中包含 OR 项并使用SQLITE_ENABLE_STAT4编译的查询计算正确答案。 门票 [4c86b126f2]
- 错误修复:确保在普通表和 WITHOUT ROWID 表之间的连接中正确解析“rowid”列。 门票 [c34d0557f7]
- 错误修复:确保在用于实现包含 ORDER BY 子句的复合 SELECT 语句的并发协程中没有使用相同的临时寄存器,因为这样使用会导致错误的答案。 门票 [8c63ff0eca]
- 错误修复:确保“ORDER BY random()”子句不会被优化掉。 门票 [65bdeb9739]
- 错误修复:修复了 TRIGGER 中包含的子选择语句中可能发生的名称解析错误。 门票 [4ef7e3cfca]
- 错误修复:修复了“DEFAULT(-(-9223372036854775808))”形式的列默认值表达式,以便它们正常工作,将列初始化为大约等于 +9223372036854775808.0 的浮点值。
- SQLITE_SOURCE_ID:“2014-03-10 12:20:37 530a1ee7dc2435f80960ce4710a3c2d2bfaaccc5”
- sqlite3.c 的 SHA1:b0c22e5f15f5ba2afd017ecd990ea507918afe1c
2014-02-11 (3.8.3.1)
- 修复一个错误(票4c86b126f2 ),当使用SQLITE_ENABLE_STAT3 或SQLITE_ENABLE_STAT4编译时选项 时,该错误会导致在 WHERE 子句中使用 OR 子句和 IS NOT NULL 运算符的某些查询中丢失行。
- 修复导致 VS2013 出现问题的无害编译器警告。
- SQLITE_SOURCE_ID:“2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e”
- sqlite3.c 的 SHA1:990004ef2d0eec6a339e4caa562423897fe02bf0
2014-02-03 (3.8.3)
- 添加了对公用表表达式和WITH 子句的支持。
- 添加了printf() SQL 函数。
- 在sqlite3_create_function()和相关接口的第 4 个参数中添加了 SQLITE_DETERMINISTIC作为可选位,使 应用程序能够创建新函数,当它们具有常量参数时可以从内部循环中分解出来。
- 添加SQLITE_READONLY_DBMOVED错误代码,在事务开始时返回,指示底层数据库文件已重命名或从 SQLite 下移出。
- 允许在ATTACH的文件名参数中使用任意表达式,包括函数调用和子查询。
- 允许在SELECT语句有效 的任何地方使用VALUES 子句。
- 当使用 N==0 调用时,重新设置sqlite3_randomness(N,P)使用的 PRNG 。在 unix 上的 fork() 之后自动重新播种。
- 增强spellfix1虚拟表,使其可以通过 rowid 进行高效搜索。
- 性能增强。
- 运行EXPLAIN时对 VDBE 字节码显示中的注释的改进。
- 将“%token_class”指令添加到Lemon 解析器生成器并使用它来简化语法。
- 更改Lemon源代码以避免调用 OpenBSD 认为危险的 C 库函数。(例如:sprintf)。
- 错误修复:在命令行 shell CSV 导入功能中,当 CRLN 行末尾出现转义双引号时,不要结束字段。
- SQLITE_SOURCE_ID:“2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538”
- sqlite3.c 的 SHA1:98a07da78f71b0275e8d9c510486877adc31dbee
2013-12-06 (3.8.2)
- 当大于 +9223372036854775807 的浮点值转换为整数时,更改了CAST 表达式的定义行为,以便结果是可能的最大整数 +9223372036854775807,而不是可能的最小整数 -9223372036854775808。在此更改之后,CAST(9223372036854775809.0 as INT) 产生 +9223372036854775807 而不是 -9223372036854775808。 ← 可能不兼容的变化!
- 添加了对WITHOUT ROWID表的支持。
- 向查询规划 器添加了跳过扫描优化。
- 扩展了虚拟表接口,特别是 sqlite3_index_info对象,以允许虚拟表报告其对查询将返回的行数的估计。
- 更新R-Tree 扩展以使用增强的虚拟表接口。
- 添加SQLITE_ENABLE_EXPLAIN_COMMENTS编译时选项。
- 增强了启用SQLITE_ENABLE_EXPLAIN_COMMENTS编译时选项 时插入到EXPLAIN输出中的 注释。
- VDBE 中的性能增强,尤其是 OP_Column 操作码。
- 内部循环中的因子常量子表达式输出到准备好的语句中的初始化代码。
- 增强了命令行 shell的“.explain”输出格式, 以便缩进循环以更好地显示程序的结构。
- 增强了命令行 shell的“.timer”功能,使其除了显示系统和用户时间外还显示挂钟时间。
- SQLITE_SOURCE_ID:“2013-12-06 14:53:30 27392118af4c38c5203a04b8013e1afdb1cebd0d”
- sqlite3.c 的 SHA1:6422c7d69866f5ea3db0968f67ee596e7114544e
2013-10-17 (3.8.1)
- 添加了unlikely()和likelihood() SQL 函数,用作查询规划器的提示。
- 查询规划器的增强功能:
- 考虑到不能与索引一起使用的 WHERE 子句术语仍然可能减少输出行数这一事实。
- 估计表和索引行的大小,并使用最小的适用 B-Tree 进行全扫描和“count(*)”操作。
- 添加了soft_heap_limit pragma。
- 添加了对SQLITE_ENABLE_STAT4的支持
- 在sqlite_stat1.stat字段末尾添加了对“sz=NNN”参数的支持, 用于指定表和索引行的平均字节长度。
- 如果没有任何修改的列与外键关联,请避免对 UPDATE 运行外键约束检查。
- 添加了SQLITE_MINIMUM_FILE_DESCRIPTOR编译时选项
- 在 Windows 上添加了 win32-longpath VFS,允许文件名长度最多为 32K 个字符。
- 日期和时间函数得到增强,因此对于同一sqlite3_step()调用中的多个函数调用,当前时间(例如:julianday('now'))始终相同。
- 添加“totype.c”扩展,实现 tointeger() 和 toreal() SQL 函数。
- FTS4查询能够更好地利用 docid<$limit 约束来限制所需的 I/O 量。
- 将隐藏的fts4aux languageid 列添加到fts4aux虚拟表。
- VACUUM命令将数据库压缩大约 1%。
- 更新了 sqlite3_analyzer 实用程序以提供更好的描述并为“非连续页面”计算更准确的估计
- 重构 PRAGMA 语句的实现以提高解析性能。
- 现在可以使用 SQLITE_TMPDIR 环境变量设置用于在 unix 上保存临时文件的目录,该变量优先于 TMPDIR 环境变量。然而,sqlite3_temp_directory全局变量的优先级仍然高于这两个环境变量。
- 添加了PRAGMA 统计语句。
- 错误修复:即使表上有部分索引,也返回“SELECT count(*) FROM table”的正确答案。机票 a5c8ed66ca。
- SQLITE_SOURCE_ID:“2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a”
- sqlite3.c 的 SHA1:0a54d76566728c2ba96292a49b138e4f69a7c391
2013-09-03 (3.8.0.2)
- 修复优化中试图忽略未使用的 LEFT JOIN 的错误
- SQLITE_SOURCE_ID:“2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef”
- sqlite3.c 的 SHA1:6cf0c7b46975a87a0dc3fba69c229a7de61b0c21
2013-08-29 (3.8.0.1)
- 修复导致 CSV 输入的 CRNL 终止行末尾引用的空字符串被命令行 shell 误读的差一错误。
- 修复一个查询规划器错误,该错误涉及带有 BETWEEN 或 LIKE/GLOB 约束的 LEFT JOIN,然后是另一个涉及 OR 约束的右侧 INNER JOIN。
- 修复查询计划器错误,该错误在查询具有超过四列的 UNIQUE 或 PRIMARY KEY 约束的表时可能导致段错误。
- SQLITE_SOURCE_ID:“2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49”
- sqlite3.c 的 SHA1:99906bf63e6cef63d6f3d7f8526ac4a70e76559e
2013-08-26 (3.8.0)
- 添加对部分索引的支持
- 切换到下一代查询计划器以获得更快更好的查询计划。
- EXPLAIN QUERY PLAN输出不再显示连接中每个循环生成的行数的估计值 。
- 添加了FTS4 notindexed 选项,允许 FTS4 表中的非索引列。
- 向sqlite3_stmt_status()添加了SQLITE_STMTSTATUS_VM_STEP选项。
- 添加了cache_spill pragma。
- 添加了query_only pragma。
- 添加了defer_foreign_keys pragma和 sqlite3_db_status (db, SQLITE_DBSTATUS_DEFERRED_FKS ,...) C 语言接口。
- 在源代码树的 ext/misc 子目录中添加了“percentile()”函数作为可加载扩展。
- 添加了SQLITE_ALLOW_URI_AUTHORITY编译时选项。
- 添加sqlite3_cancel_auto_extension(X)接口。
- 缺少 FROM 子句的正在运行的 SELECT 语句(或从不从任何数据库文件读取或写入的任何其他语句)不会阻止读取事务关闭。
- 添加SQLITE_DEFAULT_AUTOMATIC_INDEX编译时选项。将此选项设置为 0 会默认禁用自动索引。
- 每当查询规划器使用自动索引时,都会 在SQLITE_CONFIG_LOG上发出SQLITE_WARNING_AUTOINDEX警告。
- 添加了SQLITE_FTS3_MAX_EXPR_DEPTH编译时选项。
- 向 next_char() 扩展 SQL 函数添加了定义整理顺序的可选第 5 个参数。
- SQLITE_BUSY_SNAPSHOT扩展错误代码在 WAL 模式下返回,因为读取事务无法升级为写入事务,因为读取是在较旧的快照上。
- 对 sqlite3_analyzer 实用程序的增强,除了聚合大小之外,还可以为表的每个单独索引单独提供大小信息。
- 如果应用程序定义的 SQL 函数是由不访问任何数据库表的 SELECT 语句调用的,则 允许读取事务由从应用程序定义的 SQL 函数的实现中运行的 SQL 语句自由打开和关闭。
- 禁止在所有 (unix) 系统上使用 posix_fallocate() 除非使用 HAVE_POSIX_FALLOCATE 编译时选项。
- 更新命令行 shell中的“.import”命令以支持多行字段并更正 RFC-4180 引用并在输入文本不严格符合 RFC-4180 时发出警告和/或错误消息。
- 错误修复:在FTS4的unicode61 分词器中,将所有私有代码点视为标识符符号。
- 错误修复:ORDER BY 子句中的纯标识符与输出列名称的绑定更紧密,但表达式中的标识符与输入列名称的绑定更紧密。但是,GROUP BY 子句中的标识符总是首选输出列名称。
- 错误修复:遗留查询优化器中的多个问题已通过迁移到NGQP得到修复。
- SQLITE_SOURCE_ID:“2013-08-26 04:50:08 f64cd21e2e23ed7cff48f7dafa5e76adde9321c2”
- sqlite3.c 的 SHA1:b7347f4b4c2a840e6ba12040093d606bd16ea21e
2013-05-20 (3.7.17)
- 添加对内存映射 I/O 的支持。
- 添加sqlite3_strglob()便捷接口。
- 当 SQLite 用作应用程序文件格式时,将数据库头中偏移量 68 处的整数指定为 应用程序 ID。添加了PRAGMA application_id命令来查询和设置应用程序 ID。
- 在错误日志中将回滚恢复报告为 SQLITE_NOTICE_RECOVER_ROLLBACK。将 WAL 恢复的错误日志代码从 SQLITE_OK 更改为 SQLITE_NOTICE_RECOVER_WAL。
- 在错误日志中将未链接的数据库文件和 数据库文件名别名的危险使用报告为 SQLITE_WARNING 消息。
- 添加了SQLITE_TRACE_SIZE_LIMIT编译时选项。
- 将SQLITE_MAX_SCHEMA_RETRY的默认值增加到 50,并确保它在架构更改可能强制语句重试的每个地方都得到遵守。
- 添加一个名为“mptester”的新测试工具,用于在多个进程同时使用同一个数据库文件时验证操作是否正确。
- 通过两种方式增强扩展加载机制以使其更加灵活(同时仍保持向后兼容性):
- 如果可加载扩展中不存在默认入口点“sqlite3_extension_init”,也可以尝试入口点“sqlite3_X_init”,其中“X”基于共享库文件名。这允许每个扩展都有一个不同的入口点,这允许它们在没有代码更改的情况下静态链接。
- 传递给sqlite3_load_extension()的共享库文件名可能会省略文件名后缀,并且会自动添加适当的依赖于体系结构的后缀(“.so”、“.dylib”或“.dll”)。
- 向源代码树添加了许多新的可加载扩展,包括 amatch、closure、fuzzer、ieee754、nextchar、regexp、spellfix 和 wholenumber。有关该扩展功能的更多信息,请参阅每个扩展源文件的标题注释。
- 增强FTS3以避免在 MATCH 运算符右侧有大量术语时使用过多的堆栈空间。此更改的副作用是 MATCH 运算符一次只能容纳 12 个 NEAR 运算符。
- 增强fts4aux虚拟表,使其成为 TEMP 表。
- 将fts3tokenize 虚拟表添加到全文搜索逻辑。
- 查询规划器增强功能:尽可能使用约束的传递属性将约束移动到连接的外循环中,从而减少内循环中需要发生的工作量。
- 停止在 unix 上使用 posix_fallocate(),因为它不适用于所有文件系统。
- 改进了 Windows VFS中的跟踪和调试功能。
- 错误修复:修复了当一个 数据库连接关闭而另一个数据库连接处于写事务中间 时共享缓存模式下潜在的数据库损坏错误。机票e636a050b7
- 错误修复:如果没有其他匹配项,则仅将结果集中的 AS 名称视为解析 WHERE 子句中标识符的候选者。在 ORDER BY 子句中,AS 名称优先于任何列名称。门票2500cdb9be05
- Bug 修复:不允许虚拟表取消 ORDER BY 子句,除非所有外部循环都保证返回不超过一行结果。票ba82a4a41eac1。
- 错误修复:如果使用 IN 约束,请不要在虚拟表查询中抑制 ORDER BY 子句。机票f69b96e3076e。
- 错误修复:命令行 shell在使用“.quit”命令终止时给出退出代码 0。
- 错误修复:确保PRAGMA语句出现在sqlite3_trace()输出中。
- 错误修复:当复合查询使用带有COLLATE 运算符的 ORDER BY 子句时,请确保排序根据指定的排序规则进行,并且与复合查询关联的比较使用本机排序规则。机票 6709574d2a8d8。
- 错误修复:确保授权方回调在执行更改 rowid的更新时获得指向列名参数的字符串“ROWID”的有效指针。门票 0eb70d77cb05bb2272
- 错误修复:不要在包含在 LEFT JOIN 的 ON 子句中的 OR 表达式中移动 WHERE 子句术语。机票 f2369304e4
- 错误修复:确保在尝试执行需要缺少整理序列的操作时始终报告错误。门票0fc59f908b
- SQLITE_SOURCE_ID:“2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668”
- sqlite3.c 的 SHA1:246987605d0503c700a08b9ee99a6b5d67454aab
2013-04-12 (3.7.16.2)
- 修复了一个错误(自版本 3.7.13 开始存在),如果两个或多个进程试图同时访问同一个数据库文件,并且在第三个进程在提交同一个文件的过程中崩溃后立即访问,该错误可能会导致 Windows 上的数据库损坏. 有关详细信息,请参阅票证 7ff3120e4f。
- SQLITE_SOURCE_ID:“2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7”
- sqlite3.c 的 SHA1:d466b54789dff4fb0238b9232e74896deaefab94
2013-03-29 (3.7.16.1)
- 修复了 版本 3.7.15中引入的 ORDER BY 优化器中的错误,该错误有时会在实际上需要排序时优化排序步骤。机票a179fe7465
- 修复CAST 表达式中一个长期存在的错误,该错误会将 UTF16 字符识别为数字,即使它们的最高有效字节不为零也是如此。机票689137afb6da41。
- 修复FTS3的 NEAR 运算符应用于子字段时的错误。机票38b1ae018f。
- 修复存储引擎中的一个长期存在的错误,该错误会(很少)导致虚假报告 SQLITE_CORRUPT 错误,但在其他方面是无害的。机票6bfb98dfc0c。
- SQLITE_OMIT_MERGE_SORT 选项已被删除。合并排序器现在是 SQLite 的必需组件。
- 修复了源代码注释中的大量拼写错误
- SQLITE_SOURCE_ID:“2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d”
- sqlite3.c 的 SHA1:7a91ceceac9bcf47ceb8219126276e5518f7ff5a
2013-03-18 (3.7.16)
- 添加了PRAGMA foreign_key_check命令。
- 为所有 SQLITE_CONSTRAINT 错误添加了新的扩展错误代码
- 添加了 SQLITE_READONLY_ROLLBACK 扩展错误代码,用于当数据库无法打开时因为它需要回滚恢复但是是只读的。
- 添加了 SQL 函数unicode(A)和char(X1,...,XN)。
- PRAGMA incremental_vacuum的性能改进,特别是在空闲页面数量大于空闲列表的单个主干页面所适合的情况下。
- 改进了包含聚合 min() 或 max() 的查询的优化。
- 增强虚拟表,以便它们可以在 WHERE 子句包含 IN 运算符时使用索引。
- 即使索引的先验项在 WHERE 子句中受到 IN 运算符的约束,也允许使用索引进行排序。
- 增强PRAGMA table_info命令,使“pk”列是一个递增的整数,以显示主键中列的顺序。
- 增强查询优化器以利用传递连接约束。
- 查询优化器的性能改进。
- 允许来自PRAGMA integrity_check的错误消息超过 20000 字节。
- 改进了深层嵌套查询的名称解析。
- 添加了 test_regexp.c 模块作为如何实现 REGEXP 运算符的演示。
- 改进了RTREE扩展中的错误消息。
- 增强命令行 shell,以便“.exit”命令的非零参数会导致 shell 立即退出,而不会完全关闭数据库连接。
- 改进了命令行 shell中点命令的无效布尔参数的错误消息。
- 改进了“外键不匹配”的错误消息,显示了所涉及的两个表的名称。
- 删除 unix VFS 中对 umask() 的所有使用。
- 添加了PRAGMA vdbe_addoptrace和PRAGMA vdbe_debug命令。
- 在比较非零终止字符串时更改为使用 strncmp() 或等效项而不是 memcmp()。
- 更新 cygwin 接口以省略已弃用的 API 调用。
- 增强spellfix1扩展,以便可以在运行时通过将“edit_cost_table=TABLE”之类的字符串插入“命令”字段来更改编辑距离成本表。
- 错误修复:修复了一个长期存在的问题,该问题可能会导致在 3 向或更大的联接中出现不正确的查询结果,该联接将 INTEGER 字段与两个或更多位置的 TEXT 字段进行比较。机票fc7bd6358f
- 错误修复:如果视图上的 16 位引用计数器由于过于复杂的查询而溢出,则发出错误消息。
- 错误修复:避免在深度嵌套的 UNION ALL 查询中的 LIMIT 和 OFFSET 子句上泄漏内存。
- 错误修复:确保架构在运行 pragma table_info、index_list、index_info 和 foreign_key_list 之前是最新的。
- SQLITE_SOURCE_ID:“2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90”
- sqlite3.c 的 SHA1:7308ab891ca1b2ebc596025cfe4dc36f1ee89cf6
2013-01-09 (3.7.15.2)
- 修复版本 3.7.15中引入的错误,该错误会导致在实际需要 ORDER BY 时从三向连接中优化 ORDER BY 子句。机票598f5f7596b055
- SQLITE_SOURCE_ID:“2013-01-09 11:53:05 c0e09560d26f0a6456be9dd3447f5311eb4f238f”
- sqlite3.c 的 SHA1:5741f47d1bc38aa0a8c38f09e60a5fe0031f272d
2012-12-19 (3.7.15.1)
- 修复了版本 3.7.15中引入的错误,如果 SELECT 语句的结果列的 AS 名称用作 WHERE 子句中的逻辑项,该错误会导致段错误。机票 a7b7803e8d1e869。
- SQLITE_SOURCE_ID:“2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318”
- sqlite3.c 的 SHA1:bbbaa68061e925bd4d7d18d7e1270935c5f7e39a
2012-12-12 (3.7.15)
- 添加了sqlite3_errstr()接口。
- 当语句由于SQLITE_SCHEMA错误 而自动重新准备时,避免多次调用sqlite3_trace()回调。
- 添加了对 Windows Phone 8 平台的支持
- 增强 IN 运算符处理以利用具有数字亲和力的索引。
- 尽可能使用覆盖索引进行全表扫描,理论上索引会更小,因此可以用更少的 I/O 进行扫描。
- 增强查询优化器,以便更积极地优化 ORDER BY 子句,尤其是在 ORDER BY 子句的各种术语来自连接的单独表的连接中。
- 添加将 FROM 子句子查询实现为协程的能力,而不是将子查询显示到临时表中。
- 增强命令行 shell:
- 添加了“.print”命令
- “.width”命令中的负数导致右对齐
- 使用 SQLITE_DEBUG 编译时添加“.wheretrace”命令
- 添加了busy_timeout pragma。
- 添加了instr() SQL 函数。
- 添加了SQLITE_FCNTL_BUSYHANDLER文件控件,用于允许 VFS 实现访问繁忙的处理程序回调。
- 如果要删除的文件不存在 ,内置 VFS 中的 xDelete 方法现在返回 SQLITE_IOERR_DELETE_NOENT。
- 增强了对 QNX 的支持。
- 解决针对 ARM 时 MSVC 编译器中的优化器错误。
- Bug修复:避免共享缓存模式下的各种并发问题。
- 错误修复:如果同时使用备份 API、共享缓存和 SQLite 加密扩展, 避免死锁或崩溃。
- 错误修复:使用 TCL 接口创建的 SQL 函数遵循“nullvalue”设置。
- 错误修复:修复了大于 16GB 的数据库在 CREATE INDEX 上的 32 位溢出问题。
- 错误修复:在共享缓存模式下使用 CHECK 约束或视图中的COLLATE 运算符时避免段错误。
- SQLITE_SOURCE_ID:“2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae”
- sqlite3.c 的 SHA1:2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff”
2012-10-04 (3.7.14.1)
- 修复一个错误(ticket [d02e1406a58ea02d]]),该错误会导致在 ON 子句中包含 OR 的 LEFT JOIN 出现段错误。
- 解决 VisualStudio-2012 编译器中优化器中的一个错误,该错误会导致在 ARM 上编译 SQLite 时生成无效代码。
- 修复 TCL 接口,使“nullvalue”设置适用于 SQL 函数的 TCL 实现。
- SQLITE_SOURCE_ID:“2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb”
- sqlite3.c 的 SHA1:62aaecaacab3a4bf4a8fe4aec1cfdc1571fe9a44
2012-09-03 (3.7.14)
- 放弃对 OS/2 的内置支持。如果您需要升级 OS/2 应用程序以使用此版本或更高版本的 SQLite,请使用 sqlite3_vfs_register()接口添加应用程序定义的VFS 。此版本中删除的代码可以作为应用程序定义的 VFS 的基线。
- 确保在从命令行 shell的“.dump”命令的输出重建数据库时准确保留浮点值 。
- 添加了sqlite3_close_v2()接口。
- 更新了命令行 shell,以便可以使用 SQLITE_OMIT_FLOATING_POINT和SQLITE_OMIT_AUTOINIT构建它。
- 对 Windows 生成文件和构建过程的改进。
- 对PRAGMA integrity_check和PRAGMA quick_check的增强,以便它们可以选择只检查一个附加的数据库而不是所有附加的数据库。
- 对WAL 模式处理的增强确保至少一个有效的读标记始终可用,以便只读进程始终可以读取数据库。
- ORDER BY 和 CREATE INDEX 使用的排序器的性能增强。
- 添加了SQLITE_DISABLE_FTS4_DEFERRED编译时选项。
- 更好地处理聚合查询,其中聚合函数包含在子查询中。
- 增强查询规划器,以便它会尝试在使用或优化 的查询上使用覆盖索引。
- SQLITE_SOURCE_ID:“2012-09-03 15:42:36 c0d89d4a9752922f9e367362366efde4f1b06f2a”
- sqlite3.c 的 SHA1:5fdf596b29bb426001f28b488ff356ae14d5a5a6
2012-06-11 (3.7.13)
- 允许使用URI 文件名指定 的内存数据库使用共享缓存,以便可以从多个数据库连接访问同一个内存数据库。
- 识别并使用URI 文件名中的mode=memory查询参数 。
- 避免在任何一个连接关闭时重置共享缓存连接的架构。相反,在重置模式之前等待最后一个连接关闭。
- 在RTREE扩展中,当将 64 位浮点数四舍五入为 32 位进行存储时,始终按照使边界框变大的方向进行四舍五入。
- 调整 unix 驱动程序以避免不必要地调用 fchown()。
- 将接口 sqlite3_quota_ferror() 和 sqlite3_quota_file_available() 添加到 test_quota.c 模块。
- sqlite3_create_module()和sqlite3_create_module_v2()接口在任何重载或替换虚拟表 模块的尝试中返回 SQLITE_MISUSE。根据历史和当前文档,在这种情况下始终会调用析构函数。
- SQLITE_SOURCE_ID:“2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc”
- sqlite3.c 的 SHA1:ff0a771d6252545740ba9685e312b0e3bb6a641b
2012-05-22 (3.7.12.1)
- 修复 3.7.12 版本中的一个错误 (票证 c2ad16f997) ,该错误可能导致某些模糊的嵌套聚合查询出现段错误。
- 修复其他各种小的测试脚本问题。
- SQLITE_SOURCE_ID:“2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789”
- sqlite3.c 的 SHA1:d494e8d81607f0515d4f386156fb0fd86d5ba7df
2012-05-14 (3.7.12)
- 为sqlite3_db_status()添加SQLITE_DBSTATUS_CACHE_WRITE选项。
- 优化typeof()和length() SQL 函数,以避免从磁盘中不必要地读取数据库内容。
- 添加FTS4“合并”命令、FTS4“automerge”命令和FTS4“完整性检查”命令。
- 报告失败的特定CHECK约束的名称。
- 在命令行 shell 中,如果“.output”命令的参数的第一个字符是“|”,则使用 popen() 而不是 fopen()。
- 利用windows VFS中的OVERLAPPED来避免一些系统调用,从而获得性能提升。
- 当一侧或另一侧始终为假时,对 AND 运算符进行更积极的优化。
- 改进了 WHERE 子句中包含许多 OR 连接词的查询的性能,这些词都可以被索引。
- 添加SQLITE_RTREE_INT_ONLY编译时选项以强制 R*Tree 扩展模块使用整数而不是浮点值进行存储和计算。
- 增强PRAGMA integrity_check命令以在处理数 GB 的数据库时使用更少的内存。
- 添加到 test_quota.c 附加模块的新接口。
- 将“.trace”点命令添加到命令行 shell。
- 允许递归调用虚拟表构造函数。
- 改进了复合查询中 ORDER BY 子句的优化。
- 改进了聚合查询中包含的聚合子查询的优化。
- 错误修复:修复RELEASE命令,使其不会取消挂起的查询。这修复了 3.7.11 中引入的问题。
- 错误修复:不要将 DISTINCT 视为多余而丢弃,除非结果集的子集受 UNIQUE 约束约束并且该子集中的任何列都不能为 NULL。机票385a5b56b9。
- 错误修复:不要优化掉与 UNIQUE 索引具有相同条款的 ORDER BY 子句,除非这些条款也不是 NULL。机票2a5629202f。
- SQLITE_SOURCE_ID:“2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004”
- sqlite3.c 的 SHA1:57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1
2012-03-20 (3.7.11)
- 增强INSERT语法以允许通过 VALUES 子句插入多行。
- 增强CREATE VIRTUAL TABLE命令以支持 IF NOT EXISTS 子句。
- 添加了sqlite3_stricmp()接口作为sqlite3_strnicmp ()的对应接口 。
- 添加了sqlite3_db_readonly()接口。
- 添加了SQLITE_FCNTL_PRAGMA文件控制,使VFS实现能够添加新的PRAGMA语句或覆盖内置的 PRAGMA。
- 以下形式的查询:“SELECT max(x), y FROM table”在包含最大 x 值的同一行上返回 y 的值。
- 添加了对FTS4 languageid 选项的支持。
- 记录了对FTS4 内容选项的支持。这个特性其实从3.7.9 版本开始就有了,只是现在才算官方支持。
- 挂起的语句不再阻止ROLLBACK。相反,挂起的语句将在 ROLLBACK 之后的下一次访问时返回 SQLITE_ABORT。
- 命令行 shell中 CSV 输入处理的改进
- 修复版本 3.7.10中引入的错误,如果 WHERE 子句可索引的术语由 OR 连接,则可能导致 LEFT JOIN 被错误地转换为 INNER JOIN。
- SQLITE_SOURCE_ID:“2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669”
- sqlite3.c 的 SHA1:d460d7eda3a9dccd291aed2a9fda868b9b120a10
2012-01-16 (3.7.10)
- 默认模式格式编号从 1 更改为 4。这意味着,除非运行PRAGMA legacy_file_format=ON语句,否则新创建的数据库文件将无法被 3.3.0 (2006-01-10) 之前的 SQLite 版本读取。这也意味着 默认情况下启用 降序索引。
- sqlite3_pcache_methods 结构和SQLITE_CONFIG_PCACHE 和SQLITE_CONFIG_GETPCACHE配置参数已弃用。它们被新的sqlite3_pcache_methods2结构和 SQLITE_CONFIG_PCACHE2和SQLITE_CONFIG_GETPCACHE2配置参数所取代。
- 向 VFS 接口添加了powersafe 覆盖属性。提供SQLITE_IOCAP_POWERSAFE_OVERWRITE I/O 功能、 SQLITE_POWERSAFE_OVERWRITE编译时选项和URI 文件名的“psow=BOOLEAN”查询参数。
- 添加了sqlite3_db_release_memory()接口和 shrink_memory pragma。
- 添加了sqlite3_db_filename()接口。
- 添加了sqlite3_stmt_busy()接口。
- 添加了sqlite3_uri_boolean()和sqlite3_uri_int64()接口。
- 如果PRAGMA cache_size的参数为负 N,这意味着无论页面大小如何,都将大约 -1024*N 字节的内存用于页面缓存。
- 增强默认内存分配器以在 Windows 上使用 _msize(),在 Mac 上使用 malloc_size(),在 Linux 上使用 malloc_usable_size()。
- 增强了查询规划器以支持对 rowid 具有范围约束的索引查询。
- 增强了查询规划器展平逻辑以允许向上提升 UNION ALL 复合以替换简单的包装器 SELECT,即使复合是连接也是如此。
- 增强了查询规划器,以便只要目标表最初为空,xfer 优化就可以与 INTEGER PRIMARY KEY ON CONFLICT 一起使用。
- 增强了 Windows VFS,以便可以使用 xSetSystemCall 接口覆盖所有系统调用。
- 更新了“unix-dotfile” VFS以使用锁定目录与 mkdir() 和 rmdir() 而不是锁定文件与 open() 和 unlink()。
- 对 test_quota.c 扩展的增强,以支持带有配额的类似 stdio 的接口。
- 更改 unix VFS以容忍返回少于请求字节总数的 read() 系统调用。
- 更改 unix 和 windows VFSes以报告扇区大小 4096 而不是旧的默认值 512。
- 在TCL Interface中,将 -uri 选项添加到用于创建新数据库连接对象的“sqlite3”TCL 命令。
- 添加了带有SQLITE_ENABLE_TREE_EXPLAIN编译时选项的SQLITE_TESTCTRL_EXPLAIN_STMT测试控制选项 ,使 命令行 shell能够显示它处理的 SQL 语句的 ASCII 艺术解析树,用于调试和分析。
- 错误修复: 在重新启动 WAL 时添加额外的 xSync,以防止断电后发生极不可能但理论上可能发生的数据库损坏。门票ff5be73dee。
- 错误修复: 更改 VDBE,以便将所有寄存器初始化为 Invalid 而不是 NULL。机票7bbfb7d442
- 错误修复: 修复了 32 位整数溢出可能导致的问题。工单ac00f496b7e2
- SQLITE_SOURCE_ID:“2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204”
- sqlite3.c 的 SHA1:6497cbbaad47220bd41e2e4216c54706e7ae95d4
2011-11-01 (3.7.9)
- 如果FTS4中的搜索标记(在 MATCH 运算符的右侧) 以“^”开头,则该标记必须是文档字段中的第一个。 ** 可能不兼容的更改 **
- 添加选项SQLITE_DBSTATUS_CACHE_HIT和SQLITE_DBSTATUS_CACHE_MISS 到sqlite3_db_status()接口。
- 删除了对SQLITE_ENABLE_STAT2的支持,将其替换为功能更强大的SQLITE_ENABLE_STAT3选项。
- 对 sqlite3_analyzer 实用程序的增强,包括 --pageinfo 和 --stats 选项以及对多路复用数据库的支持。
- 增强sqlite3_data_count()接口,以便它可用于确定是否已在准备好的语句中看到 SQLITE_DONE。
- 添加了SQLITE_FCNTL_OVERWRITE文件控制,SQLite 核心通过它向 VFS 指示当前事务将覆盖整个数据库文件。
- 将默认后备内存分配器分配大小从 100 字节增加到 128 字节。
- 增强了查询规划器,以便它可以在 WHERE 子句中考虑进出 OR 表达式的项,以努力找到更好的索引。
- 添加了SQLITE_DIRECT_OVERFLOW_READ编译时选项,导致 溢出页面直接从数据库文件读取,绕过页面缓存。
- 删除sqlite3_mprintf()字符串渲染例程系列 的格式说明符中精度和宽度值的大小限制。
- 修复了一个错误,该错误会阻止ALTER TABLE ... RENAME使用 UTF16 编码处理数据库中的某些虚拟表。
- 修复 ASCII 到浮点数转换中的一个错误,该错误会导致在转换具有大得离谱的指数的数字时性能下降和不正确的结果。
- 修复一个错误,该错误会导致使用多个聚合函数的聚合查询结果不正确,这些聚合函数的参数包含复杂的表达式,这些表达式仅在这些表达式中包含的字符串文字的情况下有所不同。
- 修复了一个错误,该错误会阻止page_count和quick_check pragma 在名称大写时正常工作。
- 修复在使用count_changes pragma时导致VACUUM失败的错误。
- 修复虚拟表实现中的一个错误,如果在事务中删除FTS4表并且之后发生SAVEPOINT ,该错误会导致崩溃。
- SQLITE_SOURCE_ID:“2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e”
- sqlite3.c 的 SHA1:becd16877f4f9b281b91c97e106089497d71bb47
2011-09-19 (3.7.8)
- 在非常大的表上 创建索引的数量级性能改进。
- 改进windows VFS,更好地抵御杀毒软件的干扰。
- 改进了存在 DISTINCT 关键字时的查询计划优化。
- 允许在 unix VFS 中覆盖更多系统调用 - 为 chromium 沙箱提供更好的支持。
- 将超前缓存行的默认大小从 100 字节增加到 128 字节。
- 增强了 test_quota.c 模块,使其可以跟踪先前存在的文件。
- 错误修复:虚拟表现在可以正确处理 IS NOT NULL 约束。
- 错误修复:正确处理与 WHERE 子句中的索引一起使用的嵌套相关子查询。
- SQLITE_SOURCE_ID:“2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177”
- sqlite3.c 的 SHA1:bfcd74a655636b592c5dba6d0d5729c0f8e3b4de
2011-06-28 (3.7.7.1)
- 修复了导致 使用 sqlite3_prepare() 编译的PRAGMA case_sensitive_like语句失败并出现SQLITE_SCHEMA错误的错误。
- SQLITE_SOURCE_ID:“2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f”
- sqlite3.c 的 SHA1:d47594b8a02f6cf58e91fb673e96cb1b397aace0
2011-06-23 (3.7.7)
- 添加对URI 文件名的支持
- 添加sqlite3_vtab_config()接口以支持带有虚拟表的ON CONFLICT子句。
- 在虚拟表中添加xSavepoint、xRelease和xRollbackTo方法以 支持虚拟表的SAVEPOINT。
- 更新内置的FTS3/FTS4和RTREE虚拟表以支持 ON CONFLICT子句和REPLACE。
- 避免对数据库模式进行不必要的重新分析。
- 添加了对FTS4 前缀选项和FTS4 顺序选项的支持。
- 只要存在现有的读/写连接,就 允许WAL 模式数据库以只读方式打开。
- 添加了对短文件名的支持。
- SQLITE_SOURCE_ID:“2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2”
- sqlite3.c 的 SHA1:5bbe79e206ae5ffeeca760dbd0d66862228db551
2011-05-19 (3.7.6.3)
- 修复WAL 模式的问题,如果cache_size设置得非常小(小于 10)并且 SQLite 处于内存压力 下,该问题可能导致事务静默回滚。
2011-04-17 (3.7.6.2)
- 修复 open(2) 系统调用的函数原型以符合 POSIX。如果没有此修复,pthreads 将无法在 NetBSD 上正常工作。
- SQLITE_SOURCE_ID:“2011-04-17 17:25:17 154ddbc17120be2915eb03edc52af1225eb7cb5e”
- sqlite3.c 的 SHA1:806577fd524dd5f3bfd8d4d27392ed2752bc9701
2011-04-13 (3.7.6.1)
- 修复 3.7.6 中的一个错误,该错误仅在SQLITE_FCNTL_SIZE_HINT 文件控件与使用 HAVE_POSIX_FALLOCATE 编译时选项且已关闭 SQLITE_ENABLE_LOCKING_MODE 的 SQLite 构建一起使用时出现。
- SQLITE_SOURCE_ID:“2011-04-13 14:40:25 a35e83eac7b185f4d363d7fa51677f2fdfa27695”
- sqlite3.c 的 SHA1:b81bfa27d3e09caf3251475863b1ce6dd9f6ab66
2011-04-12 (3.7.6)
- 添加了sqlite3_wal_checkpoint_v2()接口并增强了 wal_checkpoint pragma以支持阻塞检查点。
- 查询计划器的改进,使其可以更好地估计计划成本,从而更好地选择正确的计划,尤其是在使用SQLITE_ENABLE_STAT2时。
- 修复了一个错误,该错误在运行外键约束的另一条语句之前未由一个外键约束失败的语句调用 sqlite3_finalize()时阻止强制执行延迟外键约束。
- 会导致溢出的整数算术运算现在改为使用浮点数执行。
- 将VFS 对象的版本号增加到 3,并添加了用于进行全覆盖测试的新方法 xSetSysCall、xGetSysCall 和 xNextSysCall。
- 将SQLITE_MAX_ATTACHED的最大值从 30 增加到 62(尽管默认值保持为 10)。
- FTS4 的增强功能:
- 添加了fts4aux表
- 添加了对压缩的 FTS4 内容的支持
- 增强ANALYZE命令以支持将索引名称作为其参数,以便仅分析该索引。
- 在 unix 和类 unix 平台上添加了“unix-excl”内置 VFS。
- SQLITE_SOURCE_ID:“2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7”
- sqlite3.c 的 SHA1:f38df08547efae0ff4343da607b723f588bbd66b
2011-02-01 (3.7.5)
- 添加了sqlite3_vsnprintf()接口。
- 为sqlite3_db_status()接口 添加了SQLITE_DBSTATUS_LOOKASIDE_HIT、 SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE和 SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL选项 。
- 添加了SQLITE_OMIT_AUTORESET编译时选项。
- 添加了SQLITE_DEFAULT_FOREIGN_KEYS编译时选项。
- 更新sqlite3_stmt_readonly()以便它的结果对于所有准备好的语句都有明确的定义,并且可以与VACUUM一起使用。
- 在命令行 shell中添加了“-heap”选项
- 修复一个涉及频繁更改进出 WAL 模式和 VACUUM 的错误,该错误可能(理论上)导致数据库损坏。
- 增强sqlite3_trace()机制,以便显示嵌套的 SQL 语句(例如可能由虚拟表生成)但显示在注释中并且没有参数扩展。这极大地改进了使用 FTS3/4 和/或 RTREE 虚拟表时的跟踪输出。
- 更改所有内置 VFS 上的 xFileControl() 方法,以返回 SQLITE_NOTFOUND而不是SQLITE_ERROR以获取无法识别的操作代码。
- 如果数据库将PRAGMA 同步设置为 OFF ,则SQLite 核心调用对 VFS 的SQLITE_FCNTL_SYNC_OMITTED 文件控制 来代替对 xSync 的调用 。
2010-12-07 (3.7.4)
- 添加了sqlite3_blob_reopen()接口以允许将现有的 sqlite3_blob对象重新绑定到新行。
- 使用新的sqlite3_blob_reopen()接口来提高 FTS 的性能。
- 如果PRAGMA locking_mode设置为 EXCLUSIVE, 则允许不支持共享内存的 VFS 访问WAL数据库。
- EXPLAIN QUERY PLAN的增强功能。
- 添加了sqlite3_stmt_readonly()接口。
- 添加了 PRAGMA checkpoint_fullfsync。
- 向sqlite3_file_control()添加了SQLITE_FCNTL_FILE_POINTER选项。
- 添加了对FTS4的支持并增强了 FTS matchinfo()函数。
- 添加了 test_superlock.c 模块,该模块提供了用于获取回滚或 WAL 数据库的独占锁的示例代码。
- 添加了 test_multiplex.c 模块,该模块提供了一个 VFS 示例,该 VFS 提供 DB 的多路复用(分片),将其拆分为多个固定大小的文件。
- 与或优化相关的一个非常模糊的错误是固定的。
2010-10-08 (3.7.3)
- 添加了包含析构函数回调 的sqlite3_create_function_v2()接口。
- 添加了对使用应用程序提供的回调例程来定义查询区域边界的 自定义 r-tree 查询的支持。
- 默认页面缓存会更加努力地避免使用超出SQLITE_CONFIG_PAGECACHE分配给它的内存。或者,如果使用页面缓存是从堆中分配的,它会努力避免超过sqlite3_soft_heap_limit64(),即使 未设置 SQLITE_ENABLE_MEMORY_MANAGEMENT 。
- 添加了sqlite3_soft_heap_limit64()接口作为 sqlite3_soft_heap_limit() 的替代 品。
- ANALYZE命令现在收集表的统计信息,即使它们没有索引。
- 调整查询计划器以帮助它更好地为每个查询找到最有效的查询计划。
- 增强了内部文本到数字的转换例程,以便它们可以使用 UTF8 或 UTF16,从而避免一些 UTF16 到 UTF8 的文本转换。
- 修复了导致 win32 系统中 大型WAL事务使用过多内存的问题。
- VDBE 和 B-Tree 层之间的接口得到增强,使得 VDBE 向 B-Tree 层提供提示,让 B-Tree 层知道何时可以安全地使用哈希而不是 B-Tree 来处理临时表。
- 杂项文档增强功能。
2010-08-24 (3.7.2)
- 修复一个 旧的且非常模糊的错误,该错误可能导致使用incremental_vacuum时数据库可用页面列表损坏。
2010-08-23 (3.7.1)
- 向sqlite3_db_status()接口添加了新命令SQLITE_DBSTATUS_SCHEMA_USED和 SQLITE_DBSTATUS_STMT_USED,以便报告用于保存连接的模式和准备好的语句的内存量。
- 将数据库页面的最大大小从 32KiB 增加到 64KiB。
- 即使右侧字符串不包含通配符,也要 使用LIKE 优化。
- 将SQLITE_FCNTL_CHUNK_SIZE动词添加到 unix 和 windows 的sqlite3_file_control() 接口,以导致数据库文件以大块增长,以减少磁盘碎片。
- 修复了查询规划器中的一个错误,该错误导致在某些复杂连接上相对于 3.6.23.1 性能下降。
- 修复了 OS/2 后端中的拼写错误。
- 重构了寻呼机模块。
- SQLITE_MAX_PAGE_SIZE 编译时选项现在被忽略。最大页面大小被硬编码为 65536 字节。
2010-08-04 (3.7.0.1)
- 修复 3.7.0 版和 3.6.23.1 版交替写入同一数据库文件时可能发生的潜在数据库损坏错误。 门票 [51ae9cad317a1]
- 修复与版本 3.7.0 的查询规划器增强相关的性能回归。
2010-07-21 (3.7.0)
- 添加了对预写日志记录的支持。
- 查询规划器增强 - 这样做会减少估计的查询时间,从而创建自动瞬态索引。
- 查询规划器增强 - 如果查询还包含强制正确输出顺序的 GROUP BY 子句,则 ORDER BY 变为空操作。
- 为sqlite3_db_status()添加SQLITE_DBSTATUS_CACHE_USED动词。
- 逻辑数据库大小现在存储在数据库头中,以便可以将字节附加到数据库文件的末尾而不会损坏它,这样 SQLite 就可以在不支持 ftruncate() 的系统上正常工作。
2010-03-26 (3.6.23.1)
- 修复FTS3的 offsets() 函数中的错误
- 修复缺少的“同步”,如果在 ROLLBACK 操作完成时发生电源故障或操作系统崩溃,当省略该同步时可能会导致数据库损坏。
2010-03-09 (3.6.23)
- 添加了secure_delete pragma。
- 添加了sqlite3_compileoption_used()和 sqlite3_compileoption_get()接口以及 compile_options pragma和sqlite_compileoption_used()和 sqlite_compileoption_get() SQL 函数。
- 将sqlite3_log()接口与 SQLITE_CONFIG_LOG动词一起添加到sqlite3_config()。“.log”命令被添加到命令行界面。
- FTS3的改进。
- 支持SQLITE_OMIT_FLOATING_POINT的改进和错误修复。
- integrity_check pragma得到增强以检测乱序的 rowid 。
- “.genfkey”运算符已 从命令行界面中删除。
- 共同托管的Lemon LALR(1) 解析器生成器的更新。(这些更新不影响 SQLite。)
- 各种小错误修复和性能增强。
2010-01-06 (3.6.22)
- 修复在查询的 WHERE 子句中使用 CAST 或 OR 运算符时可能(很少)导致不正确查询结果的错误。
- 持续增强和改进FTS3。
- 其他杂项错误修复。
2009-12-07 (3.6.21)
- sqlite3_trace()产生的 SQL 输出现在被修改为包括绑定参数的值。
- 针对来自 SQLite 的单个高调用户的特定用例的性能优化。CPU 操作数减少了 12%(由 Valgrind 测量)。实践中的实际性能改进可能因工作负载而异。变化包括:
- ifnull ()和coalesce() SQL 函数现在使用内联 VDBE 代码而不是调用外部函数来实现,因此永远不需要评估未使用的参数。
- 如果substr() SQL 函数仅计算前缀,则它不会费心测量其整个输入字符串的长度
- 不必要的 OP_IsNull、OP_Affinity 和 OP_MustBeInt VDBE 操作码被抑制
- 各种代码重构以提高性能
- FTS3 扩展进行了重大返工和清理。新的FTS3 文档现已可用。
- SQLITE_SECURE_DELETE编译时选项已修复,以确保即使在应用截断优化时也会删除内容。
- 命令行界面中“点命令”处理的改进 。
- 其他小错误修复和文档增强。
2009-11-04 (3.6.20)
- 优化器增强:当 LIKE 运算符的 RHS 上的绑定更改或SQLITE_ENABLE_STAT2下的任何范围约束更改时,准备好的语句将自动重新编译。
- 各种小错误修复和文档增强。
2009-10-30 (3.6.16.1)
- 3.6.16 版的一个小补丁,用于修复 OP_If 错误。
2009-10-14 (3.6.19)
- 添加了对外键约束的支持。默认情况下禁用外键约束。使用foreign_keys pragma打开它们。
- 将 IS 和 IS NOT 运算符广义化为在其右侧采用任意表达式。
- 当 针对 TCL 8.6 或更高版本链接时 , TCL 接口已得到增强,可以使用 TCL 解释器的 非递归引擎 (NRE)接口。
- 修复 3.6.18 中引入的错误,该错误在尝试写入只读数据库时可能导致段错误。
2009-09-11 (3.6.18)
- SQLite 源代码的版本控制已从 CVS 过渡到 Fossil。
- 查询规划器增强功能。
- SQLITE_ENABLE_STAT2编译时选项导致ANALYZE命令 收集每个索引的小直方图,以帮助 SQLite 更好地选择竞争范围查询索引。
- 可以使用PRAGMA recursive_triggers 语句启用递归触发器。
- 当由于REPLACE 冲突解决而删除行时,删除触发器会触发 。此功能仅在启用递归触发器时启用。
- 为sqlite3_open_v2()添加了SQLITE_OPEN_SHAREDCACHE和SQLITE_OPEN_PRIVATECACHE 标志,用于覆盖单个数据库连接的全局 共享缓存模式设置。
- 添加了改进的版本识别功能:C 预处理器宏SQLITE_SOURCE_ID、C/C++ 接口sqlite3_sourceid()和 SQL 函数sqlite_source_id()。
- 触发器上的模糊错误修复 ( [efc02f9779] )。
2009-08-10 (3.6.17)
- 公开sqlite3_strnicmp()接口以供扩展和应用程序使用。
- 取消对虚拟表和共享缓存模式的限制。现在可以同时使用虚拟表和共享缓存。
- 许多代码简化和模糊错误修复支持提供100% 分支测试覆盖率。
2009-06-27 (3.6.16)
- 修复了一个错误(票证 #3929),该错误偶尔会导致 INSERT 或 UPDATE 操作在具有自修改触发器的索引表上失败。
- 其他小错误修复和性能优化。
2009-06-15 (3.6.15)
- 重构 SQL 表达式的内部表示,以便它们在嵌入式平台上使用更少的内存。
- 减少使用的堆栈空间量
- 修复 HP/UX 和 Sparc 上的 64 位对齐错误
- sqlite3_create_function()系列接口现在在传递无效参数组合时返回 SQLITE_MISUSE而 不是SQLITE_ERROR 。
- 当使用 CREATE TABLE ... AS SELECT ... 创建新表时,列的数据类型是简化的 SQLite 数据类型(TEXT、INT、REAL、NUMERIC 或 BLOB),而不是源表中原始数据类型的副本.
- 检查热回滚日志时解决竞争条件。
- sqlite3_shutdown()接口释放 windows 下 的所有互斥量。
- 增强了对损坏数据库文件的稳健性
- 对测试套件的持续改进和修复,以掩盖测试套件改进所揭示的错误和不一致。
2009-05-25 (3.6.14.2)
- 修复版本 3.6.14中引入的代码生成器错误。此错误可能会在模糊的情况下导致不正确的查询结果。门票#3879。
2009-05-19 (3.6.14.1)
- 修复group_concat()中的错误,工单 #3841
- 修复寻呼机缓存中的性能错误,工单 #3844
- 修复sqlite3_backup实现中可能导致备份数据库损坏的错误。门票#3858。
2009-05-07 (3.6.14)
- 添加了可选的异步 VFS模块。
- 增强了查询优化器,使虚拟表能够在 WHERE 子句中使用 OR 和 IN 运算符。
- btree 和 pager 层的速度改进。
- 添加了SQLITE_HAVE_ISNAN编译时选项,这将导致使用标准数学库中的 isnan() 函数,而不是 SQLite 自己的自制 NaN 检查器。
- 无数的小错误修复、文档改进、新的和改进的测试用例以及代码简化和清理。
2009-04-13 (3.6.13)
- 修复了3.6.12 版本中在空数据库的 sqlite_master 表上运行 count(*) 时导致段错误的错误。门票#3774。
- 修复了版本 3.6.12中的一个错误,该错误导致在使用默认值插入到表中时出现段错误,其中有一个函数作为默认值表达式的一部分。门票#3791。
- 修复 Sparc 上的数据结构对齐问题。门票#3777。
- 其他小错误修复。
2009-03-31 (3.6.12)
- 修复了在内存数据库中回滚incremental_vacuum时导致数据库损坏的错误。门票#3761。
- 添加了sqlite3_unlock_notify()接口。
- 添加了reverse_unordered_selects pragma。
- Windows 上的默认页面大小会自动调整以匹配底层文件系统的功能。
- 在CLI中添加新的“.genfkey”命令以生成触发器以实现外键约束。
- “count(*)”查询的性能改进。
- 减少使用的堆内存量,尤其是 TRIGGER。
2009-02-18 (3.6.11)
2009-01-15 (3.6.10)
- 修复可能导致数据库损坏的缓存一致性问题。门票#3584。
2009-01-14 (3.6.9)
- 修复两个错误,这两个错误合并后可能会导致查询结果不正确。这两个错误本身都是无害的。只有当他们组队时,他们才会引起问题。门票#3581。
2009-01-12 (3.6.8)
- 添加了对嵌套事务的支持
- 增强了查询优化器,使其能够使用多个索引有效地处理 WHERE 子句中的OR 连接约束 。
- 使用SQLITE_ENABLE_FTS3_PARENTHESIS编译时选项在 FTS3 查询模式中添加了对括号的支持 。
2008-12-16 (3.6.7)
- 在 os_unix.c 中重组 Unix 接口
- 在 Mac OS X 上添加了对“代理锁定”的支持。
- 以向后兼容的方式更改了sqlite3_auto_extension()接口的原型,但这可能会在使用该接口的应用程序的新构建中引起警告。
- 以向后兼容但可能导致编译器警告的方式更改了sqlite3_vfs对象的 xDlSym 方法的签名。
- 添加了多余的强制转换和变量初始化,以抑制令人讨厌的编译器警告。
- 修复各种小错误。
2008-11-26 (3.6.6.2)
- 修复 b-tree 删除算法中的一个错误,该错误看起来可能会导致数据库损坏。该错误最初是在 2008 年 11 月 13日通过签入 [5899]在版本 3.6.6中引入的。
- 修复磁盘 I/O 错误后可能发生的内存泄漏。
2008-11-22 (3.6.6.1)
- 修复了页面缓存中的一个错误,该错误可能导致回滚后数据库损坏。这个错误是在版本 3.6.4中首次引入的。
- 另外两个非常小的错误修复
2008-11-19 (3.6.6)
- 修复阻止memsys5编译的 #define
- 修复导致 FTS3 崩溃的虚拟表提交机制中的问题。门票#3497。
- 添加应用程序定义的页面缓存
- 添加了对 VxWorks 的内置支持
2008-11-12 (3.6.5)
- 将 MEMORY 选项添加到journal_mode pragma。
- 添加了sqlite3_db_mutex()接口。
- 添加了SQLITE_OMIT_TRUNCATE_OPTIMIZATION编译时选项。
- 修复了截断优化,以便sqlite3_changes()和 sqlite3_total_changes()接口以及count_changes pragma 返回正确的值。
- 添加了sqlite3_extended_errcode()接口。
- 即使存在挂起的查询,COMMIT 命令现在也会成功。如果有待处理的增量 BLOB I/O 请求 ,它返回SQLITE_BUSY 。
- 当在一个或多个查询仍未决时尝试ROLLBACK时,错误代码更改为SQLITE_BUSY(而不是SQLITE_ERROR )。
- 放弃对实验性内存分配器memsys4 和 memsys6的所有支持。
- 添加了SQLITE_ZERO_MALLOC编译时选项。
2008-10-15 (3.6.4)
- 在DELETE和 UPDATE语句上添加对 LIMIT 和 ORDER BY 子句的选项支持。仅当使用 SQLITE_ENABLE_UPDATE_DELETE_LIMIT编译 SQLite 时才有效。
- 添加了用于性能监控的sqlite3_stmt_status()接口。
- 添加INDEXED BY子句。
- LOCKING_STYLE 扩展现在在 Mac OS X 上默认启用
- 为PRAGMA journal_mode添加了 TRUNCATE 选项
- B 树层中树平衡逻辑的性能增强。
- 添加了 genfkey程序的 源代码和 文档,用于自动生成触发器以强制执行外键约束。
- 添加了SQLITE_OMIT_TRUNCATE_OPTIMIZATION编译时选项。
- SQL 语言文档被转换为使用 语法图而不是 BNF。
- 其他小错误修复
2008-09-22 (3.6.3)
- 修复了先前版本引入的 SELECT DISTINCT 逻辑中的错误。
- 其他小错误修复
2008-08-30 (3.6.2)
- 将 pager 子系统拆分为单独的 pager 和 pcache 子系统。
- 将标识符解析过程分解为单独的文件。
- Bug修复
2008-08-06 (3.6.1)
- 添加了后备内存分配器,使某些工作负载的速度提高了 15% 以上。(你的旅费可能会改变。)
- 将SQLITE_CONFIG_LOOKASIDE动词添加到sqlite3_config()以控制默认后备配置。
- 添加动词SQLITE_STATUS_PAGECACHE_SIZE和 SQLITE_STATUS_SCRATCH_SIZE到sqlite3_status()接口。
- 修改了SQLITE_CONFIG_PAGECACHE和SQLITE_CONFIG_SCRATCH以删除缓冲区大小计算中的“+4”幻数。
- 添加了sqlite3_db_config()和sqlite3_db_status()接口,用于在每个 数据库连接上分别控制和监视后备分配器。
- 许多其他性能增强
- 其他小错误修复
2008-07-16(3.6.0 测试版)
- 修改虚拟文件系统接口以支持更广泛的嵌入式系统。有关其他信息,请参阅35to36.html。 *** 可能不兼容的更改 ***
- 所有用于控制编译时选项的 C 预处理器宏现在都以前缀“SQLITE_”开头。这可能需要更改使用自己的 makefile 和自定义编译时选项编译 SQLite 的应用程序,因此我们将其标记为 *** 潜在不兼容的更改 ***
- 不再支持 SQLITE_MUTEX_APPDEF 编译时选项。现在可以使用带有SQLITE_CONFIG_MUTEX动词 的sqlite3_config()接口在运行时添加替代互斥实现。*** 可能不兼容的更改 ***
- 在右侧表达式中包含 NULL 的 IN 和 NOT IN 运算符的处理符合 SQL 标准和其他 SQL 数据库引擎。这是一个错误修复,但由于它有可能破坏依赖于旧错误行为的遗留应用程序,我们将其标记为 *** 潜在不兼容的更改 ***
- 为复合子查询生成的结果列名已简化为仅显示原始表的列名并省略表名。这使得 SQLite 的操作更像其他 SQL 数据库引擎。
- 添加了sqlite3_config()接口,用于对整个 SQLite 库进行运行时配置。
- 添加了sqlite3_status()接口,用于查询有关整个 SQLite 库及其子系统的运行时状态信息。
- 添加了sqlite3_initialize()和sqlite3_shutdown()接口。
- SQLITE_OPEN_NOMUTEX选项已添加到sqlite3_open_v2 ()。
- 添加了PRAGMA page_count命令。
- 添加了sqlite3_next_stmt()接口。
- 添加了一个新的R*Tree 虚拟表
2008-05-14 (3.5.9)
- 添加了对journal_mode PRAGMA 和持久日志的实验性 支持。
- 日志模式 PERSIST是 排他锁定模式下的默认行为。
- 修复在版本 3.5.8中错误引入的 LEFT JOIN 的性能回归(参见票 #3015)。
- 性能增强:重新设计用于解释和呈现可变长度整数的内部例程。
- 修复sqlite3_mprintf()中的缓冲区溢出问题,该问题在将不带零终止符的字符串传递给“%.*s”时发生。
- 在处理过程中始终将 IEEE 浮点 NaN 值转换为 NULL。(工单#3060)
- 确保当 RESERVED 锁上的连接阻塞时,它能够在释放锁后继续。(工单#3093)
- “配置”脚本现在应该自动配置 Unix 系统以支持大文件。改进了遇到大文件和禁用大文件支持时的错误消息。
- 避免因磁盘已满或 I/O 错误而导致缓存页面泄漏
- 并且,还有更多小错误修复和性能增强......
2008-04-16 (3.5.8)
- 通过sqlite3_randomness()接口公开 SQLite 的内部伪随机数生成器 (PRNG)
- 新接口sqlite3_context_db_handle()返回 已调用应用程序定义的 SQL 函数的数据库连接句柄。
- 新接口sqlite3_limit()允许在每个连接的基础上和在运行时设置大小和长度限制。
- 改进的崩溃鲁棒性:将数据库页面大小写入回滚日志标题。
- 允许VACUUM命令更改数据库文件的页面大小。
- VFS 的 xAccess() 方法允许返回 -1 以表示内存分配错误。
- 性能改进:OP_IdxDelete 操作码使用未打包的记录,无需为每个删除的索引记录调用一个 OP_MakeRecord 操作码。
- 性能改进:常量子表达式被排除在循环之外。
- 性能改进:重复使用 OP_Column 的结果,而不是发出多个 OP_Column 操作码。
- 修复 RTRIM 整理序列中的错误。
- 修复 SQLITE_SECURE_DELETE 选项中导致 Firefox 崩溃的错误。安排在每次发布之前始终测试 SQLITE_SECURE_DELETE。
- 其他杂项性能增强。
- 其他杂项小错误修复。
2008-03-17 (3.5.7)
- 修复复合选择的寄存器分配中的错误(票号 #2927)——由 3.5.5 版中的新 VM 代码引入。
- ALTER TABLE 使用双引号而不是单引号来引用文件名。
- 使用 WHERE 子句减少 UPDATE 或 DELETE 语句中物化 VIEW 的大小。(优化)
- 如果外部查询是聚合且内部查询包含 ORDER BY,则不要应用展平优化。(工单#2943)
- 额外的 OS/2 更新
- 添加了一个实验性的二次幂,最先适合的内存分配器。
- 从代码中删除 sprintf() 的所有实例
- 接受“Z”作为日期字符串末尾的祖鲁时区
- 修复 LIKE 优化器中第一个通配符之前的最后一个字符为大写“Z”时发生的错误
- 添加了“bitvec”对象以跟踪哪些页面已被记录。提高速度并减少内存消耗,尤其是对于大型数据库文件。
- 让 SQLITE_ENABLE_LOCKING_STYLE 宏在 Mac OS X 上再次工作。
- 将语句日志存储在临时文件目录中,而不是与数据库文件并置。
- 配置脚本的许多改进和清理
2008-02-06 (3.5.6)
- 修复阻止虚拟表在 LEFT JOIN 中工作的错误(票证 #2913)。该问题是在 3.5.5 发布前不久引入的。
- 使 OS/2 移植层保持最新。
- 添加新的sqlite3_result_error_code() API 并在 ATTACH 的实现中使用它,以便在ATTACH失败时返回正确的错误代码。
2008-01-31 (3.5.5)
- 将底层虚拟机转换为基于寄存器的机器而不是基于堆栈的机器。唯一用户可见的变化是在 EXPLAIN 的输出中。
- 添加内置 RTRIM 整理序列。
2007-12-14 (3.5.4)
- 修复当 OR REPLACE 子句或触发器导致同一表中的行作为副作用被删除时发生的 UPDATE 或 DELETE 中的严重错误。(请参阅票证 #2832。)此错误最有可能的结果是分段错误,但也有可能导致数据库损坏。
- 在结果别名和表列名冲突的情况下,将 ORDER BY 的处理符合 SQL 标准。正确的行为是更喜欢结果别名。旧版本的 SQLite 错误地选择了表列。(参见票证 #2822。)
- VACUUM命令保留 legacy_file_format pragma的设置。(票证 #2804。)
- 产品化并正式支持 group_concat() SQL 函数。
- 更好地优化某些 IN 运算符表达式。
- 添加 通过设置 auto_vaccum pragma 和 VACUUMing 数据库来更改数据库的auto_vacuum状态的能力。
- FTS3 中的前缀搜索效率更高。
- 放宽 CLI 中的 SQL 语句长度限制,以便可以回放具有非常大的 BLOB 和字符串的数据库的“.dump”输出以重新创建数据库。
- 其他小错误修复和优化。
2007-11-27 (3.5.3)
- 将网站和文档文件从源代码树中移出到单独的 CM 系统中。
- 修复 INSERT INTO ... SELECT ... 语句中 SELECT 是复合的一个长期存在的错误。
- 修复在 BEFORE 触发器中使用的 RAISE(IGNORE) 中长期存在的错误。
- 修复了 ~ 运算符的运算符优先级。
- 在 Win32 上,尝试删除不存在的文件时不会返回错误。
- 允许引用整理序列名称。
- 修改 TCL 接口以使用sqlite3_prepare_v2()。
- 修复 malloc() 失败后可能发生的多个错误。
- sqlite3_step()返回SQLITE_MISUSE而不是在使用 NULL 参数调用时崩溃。
- FTS3 现在专门使用 SQLite 内存分配器。FTS3 合并现在可以附加到 SQLite 合并以生成包含两者的超级合并。
- DISTINCT 关键字现在有时会使用 INDEX,如果有合适的索引可用并且优化器认为使用它可能是有利的。
2007-11-05 (3.5.2)
- 删除了对SQLITE_OMIT_MEMORY_ALLOCATION编译时选项的支持。
- 在 Windows 下始终使用 FILE_FLAG_RANDOM_ACCESS 打开文件。
- 内置 SUBSTR() 函数的第三个参数现在是可选的。
- 错误修复:在架构更改后重新解析架构时不要调用授权方。
- 在 mem3.c 中添加了实验性的无 malloc 内存分配器。
- 虚拟机以二进制而不是文本形式存储 64 位整数和浮点常量以提高性能。
- 修复 test_async.c 中的竞争条件。
- 在 CLI 中添加了“.timer”命令
2007-10-04 (3.5.1)
- Nota Bene:我们在这个版本中没有使用术语“alpha”或“beta”,因为代码是稳定的,因为如果我们使用这些术语,没有人会升级。但是,我们仍然保留在未来版本中对新 VFS 接口进行不兼容更改的权利。
- 修复了可能导致数据库损坏的SQLITE_FULL错误处理中的错误。门票#2686。
- test_async.c 驱动器现在可以进行完整的文件锁定,并且在同一数据库上的多个进程同时使用时可以正常工作。
- CLI 忽略行尾的空格(包括注释)
- 确保查询优化器检查对复合 SELECT 语句的所有术语的依赖性。门票#2640。
- 添加演示代码,展示如何为没有文件系统的原始大容量存储构建 VFS。
- 向 VFS 层的 xGetTempname() 方法添加了一个输出缓冲区大小参数。
- 寻呼机中的粘性SQLITE_FULL或SQLITE_IOERR错误会在新事务启动时重置。
2007-09-04 (3.5.0) 阿尔法
- 重新设计操作系统接口层。有关详细信息,请参阅 34to35.html。 *** 可能不兼容的更改 ***
- sqlite3_release_memory()、sqlite3_soft_heap_limit ()和sqlite3_enable_shared_cache()接口现在可以跨进程中的所有线程工作,而不仅仅是调用它们的单个线程。 *** 可能不兼容的更改 ***
- 添加了sqlite3_open_v2()接口。
- 重新实现内存分配子系统并使其在编译时可替换。
- 创建了一个新的互斥子系统并使其在编译时可复制。
- 同一个数据库连接现在可以被不同的线程同时使用。
2007-08-13 (3.4.2)
- 修复在自动真空模式下执行 ROLLBACK 命令 并设置非常小的sqlite3_soft_heap_limit时可能发生的数据库损坏错误。门票#2565。
- 添加使用小的sqlite3_soft_heap_limit运行完整回归测试的能力 。
- 修复使用小软堆限制的其他小问题。
- GCC 错误 32575的解决 方法。
- 改进了对滥用聚合函数的错误检测。
- 改进了合并生成器脚本,以便所有符号都以 SQLITE_PRIVATE 或 SQLITE_API 为前缀。
2007-07-20 (3.4.1)
- 修复 VACUUM 中的一个错误,如果两个进程同时连接到数据库并且一个 VACUUM 然后另一个然后修改数据库,该错误可能导致数据库损坏。
- 在计算用于表达式的整理序列时,表达式“+column”现在被视为与“column”相同。
- 在TCL 语言接口中,“@variable”而不是“$variable”总是绑定为一个 blob。
- 添加了PRAGMA freelist_count 以确定空闲列表的当前大小。
- PRAGMA auto_vacuum=incremental设置现在是持久的。
- Unix下所有打开的文件都加上FD_CLOEXEC。
- 修复应用于降序索引时 min()/max() 优化中的错误。
- 确保 TCL 语言接口在 64 位机器上能正确处理 64 位整数。
- 允许值 -9223372036854775808 作为 SQL 语句中的整数文字。
- 在虚拟表中添加“隐藏”列的功能。
- 在合并中的所有内部函数上使用宏 SQLITE_PRIVATE(默认为“静态”)。
- 向 FTS2添加可插入标记器和ICU标记化支持
- 其他小错误修复和文档增强
2007-06-18 (3.4.0)
- 修复了一个错误,如果SQLITE_BUSY错误发生在显式事务的中间并且该事务稍后被提交,则该错误可能导致数据库损坏。门票#2409。
- 修复一个错误,如果 autovacuum 模式打开并且 malloc() 失败遵循 CREATE TABLE 或 CREATE INDEX 语句,该语句本身遵循事务内的缓存溢出,则该错误可能导致数据库损坏。请参见票 #2418。
- 为 SQLite 可以处理的事物的大小和数量添加了明确的上限。此更改可能会导致极端使用 SQLite 的应用程序出现兼容性问题,这就是为什么当前版本是 3.4.0 而不是 3.3.18。
- 添加了对增量 BLOB I/O的支持。
- 添加了sqlite3_bind_zeroblob() API 和zeroblob() SQL 函数。
- 添加了对 增量真空的支持。
- 添加了 SQLITE_MIXED_ENDIAN_64BIT_FLOAT 编译时选项以支持具有愚蠢字节顺序的 ARM7 处理器。
- 从核心库中删除了 sprintf() 和 strcpy() 的所有实例。
- 在全文搜索扩展中 添加了 对 Unicode 国际组件 (ICU)的支持。
- 在 Windows 操作系统驱动程序中,如果尝试获取 EXCLUSIVE 锁失败,则重新获取 SHARED 锁。门票 #2354
- 修复 REPLACE() 函数,使其在第二个参数为空字符串时返回 NULL。门票#2324。
- 记录sqlite3_column_blob() 和相关 API中类型转换的危害 。修复不必要的类型转换。票 #2321。
- TRIM() 函数的国际化。门票 #2323
- 在可能重叠的内存区域之间移动时,使用 memmove() 而不是 memcpy() 。门票 #2334
- 修复了涉及复合 SELECT 中子查询的优化器错误,该复合 SELECT 具有 ORDER BY 和 LIMIT 子句。门票#2339。
- 如果缓冲区大小小于 1,请确保sqlite3_snprintf()接口不会以零终止缓冲区。Ticket #2341
- 修复内置的 printf 逻辑,以便它为浮点 NaN 打印“NaN”而不是“Inf”。门票 #2345
- 将 BLOB 转换为 TEXT 时,使用主数据库的文本编码。门票 #2349
- 转换为 NUMERIC 时保持整数的完整精度(如果可能)。门票 #2364
- 修复处理 UTF16 代码点 0xE000 的错误
- 在查询优化器中将 WHERE 约束与索引匹配时,请考虑显式整理子句。门票 #2391
- 修复查询优化器以正确处理 LEFT JOIN 的 ON 子句中的常量表达式。门票 #2403
- 修复查询优化器以正确处理 rowid 与 NULL 的比较。门票 #2404
- 修复许多可能由恶意 SQL 语句引起的潜在段错误。
2007-04-25 (3.3.17)
- 当数据库头的“write_version”值大于库理解的值时,将数据库设置为只读而不是不可读。
- 其他小错误修复
2007-04-18 (3.3.16)
- 如果 NULL 出现在 UNIQUE 列中,修复导致 VACUUM 失败的错误。
- 恢复在 版本 3.3.14中添加但在版本 3.3.15 中退化的性能改进。
- 修复子查询中复合 SELECT 语句的 ORDER BY 表达式处理问题。
- 在多线程环境中销毁 WinCE 上的锁时修复潜在的段错误。
- 文档更新。
2007-04-09 (3.3.15)
- 修复了 3.3.14 中引入的错误,该错误导致 CREATE TEMP TABLE 回滚以保留数据库连接。
- 修复了当降序查询因数据库更改而中断时导致返回额外 NULL 行的错误。
- 触发器上的 FOR EACH STATEMENT 子句现在会导致语法错误。它曾经被默默地忽略。
- 修复一个模糊且相对无害的问题,该问题可能会在 I/O 错误后导致资源泄漏。
- 对测试套件的许多改进。测试覆盖率现已超过 98%
2007-04-02 (3.3.14)
- 修复了一个错误(票证 #2273),当 IN 运算符被用于两列索引的一个术语并且 IN 运算符的右侧包含 NULL 时,该错误可能导致段错误。
- 添加了一个新的操作系统接口方法来确定底层媒体的扇区大小:sqlite3OsSectorSize()。
- 一种用于 INSERT INTO table1 SELECT * FROM table2形式的语句的新算法 更快并且减少了碎片。VACUUM 使用这种形式的语句,因此运行速度更快,碎片整理效果更好。
- 通过减少磁盘 I/O 提高性能:
- 删除行时不要读取溢出链的最后一页 - 只需将该页添加到空闲列表即可。
- 不要将被删除的页面存储在回滚日志中。
- 不要阅读从自由列表中提取的页面的(无意义的)内容。
- 不要刷新页面缓存(从而避免缓存重新填充),除非另一个进程更改了底层数据库文件。
- 在独占访问模式下提交事务或提交 TEMP 数据库时,截断而不是删除回滚日志。
- 使用“PRAGMA locking_mode=EXCLUSIVE”添加了对独占访问模式的支持
- 在寻呼机中为大缓冲区使用堆空间而不是堆栈空间 - 在具有堆栈空间限制的嵌入式平台上很有用。
- 添加一个 makefile 目标“sqlite3.c”,在单个文件中构建包含核心 SQLite 库 C 代码的合并。
- 在使用 GCC 选项“-fstrict-aliasing”编译时使库正常工作。
- 删除了残留的 SQLITE_PROTOCOL 错误。
- 测试覆盖率的改进、其他小错误的修复、内存泄漏的堵塞、代码重构和/或推荐的地方更容易阅读。
2007-02-13 (3.3.13)
- 在 sqlite3_analyzer 的输出中添加“碎片”测量。
- 添加用于显式设置表达式使用的整理顺序的 COLLATE 运算符。此功能被认为是实验性的,等待额外测试。
- 一个连接中最多允许 64 个表——旧的限制是 32 个。
- 添加了两个新的实验函数: randomBlob()和 hex()。它们的预期用途是促进生成 UUID。
- 修复了 PRAGMA count_changes导致带有触发器的表更新结果不正确的问题
- 修复了连接的 ORDER BY 子句优化器中的错误,其中连接中最左边的表受 UNIQUE 索引约束。
- 修复了 TCL 界面的“复制”方法中的错误。
- fts1 和 fts2 模块中的错误修复。
2007-01-27 (3.3.12)
- 修复 3.3.9 版本中添加的 IS NULL 优化中的另一个错误。
- 修复发生在深层嵌套视图上的断言错误。
- 限制PRAGMA integrity_check 生成的输出量 。
- 微小的语法更改以支持更多种类的编译器。
2007-01-22 (3.3.11)
- 修复新 sqlite3_prepare_v2() API 实现中的另一个错误。我们最终会做对的...
- 修复版本 3.3.9 中添加的 IS NULL 优化中的错误 - 该错误导致某些 LEFT JOIN 的结果不正确,这些 LEFT JOIN 包含在 WHERE 子句中,用于 LEFT JOIN 的右表的 IS NULL 约束。
- 将 AreFileApisANSI() 设为 WinCE 中的无操作宏,因为 WinCE 不支持此函数。
2007-01-09 (3.3.10)
- 修复新 sqlite3_prepare_v2() API 的实现中可能导致段错误的错误。
- 修复 strftime() 函数中的 1 秒舍入错误
- 增强 Windows 操作系统层以提供详细的错误代码
- 解决 win2k 问题以便 SQLite 可以使用单字符数据库文件名
- user_version 和 schema_version编译指示在结果集中正确设置了它们的列名
- 文档更新
2007-01-04 (3.3.9)
- 修复 pager.c 中如果两个进程同时尝试恢复热日志可能导致数据库损坏的错误
- 添加了sqlite3_prepare_v2() API。
- 修复了命令行 shell 中的“.dump”命令以再次显示索引、触发器和视图。
- 更改 table_info pragma,以便在没有默认值时返回 NULL 作为默认值
- 支持 win95 文件名中的非 ASCII 字符
- 查询优化器增强功能:
- 优化器更好地使用索引来满足在整数主键上排序的 ORDER BY 子句
- 在 WHERE 子句中使用索引来满足 IS NULL 运算符
- 修复导致优化器错过 OR 优化机会的错误
- 即使存在 LEFT 连接,优化器也可以更自由地对 FROM 子句中的表进行重新排序。
- 扩展加载支持添加到 WinCE
- 允许在表定义中的 DEFAULT 子句上使用约束名称
- 在命令行 shell 中添加了“.bail”命令
- 使命令行 shell 的 CSV(逗号分隔值)输出更符合公认的做法
- 添加了实验性 FTS2 模块
- 使用 sqlite3_mprintf() 而不是 strdup() 来避免 libc 依赖
- VACUUM 使用官方 TEMP 文件夹中的临时文件,与原始数据库不在同一目录中
- Windows 上临时文件名的前缀从“sqlite”更改为“etilqs”。
2006-10-09 (3.3.8)
- 支持使用 FTS1 模块(测试版)进行全文搜索
- 添加了 Mac OS X 锁定补丁(测试版 - 默认禁用)
- 引入扩展错误码,增加各种I/O错误的错误码。
- 添加了对 IF EXISTS on CREATE/DROP TRIGGER/VIEW 的支持
- 修复回归测试套件,使其适用于 Tcl8.5
- 增强 sqlite3_set_authorizer() 以提供调用 SQL 函数的通知。
- 添加了实验性 API:sqlite3_auto_extension()
- 各种小错误修复
2006-08-12 (3.3.7)
2006-06-06 (3.3.6)
- 在 Windows 上更好地使用病毒扫描程序
- 更快:内存:数据库
- 修复 UTF-8 到 UTF-16 转换中的模糊段错误
- 为 OS/2 添加了驱动程序
- 为聚合查询返回的正确列元信息
- EXPLAIN QUERY PLAN 的增强输出
- LIMIT 0 现在适用于子查询
- 查询优化器中的错误修复和性能增强
- 正确处理 ATTACH 和 DETACH 中的 NULL 文件名
- 改进了解析器中的语法错误消息
- 修复 IN 运算符的类型强制规则
2006-04-05 (3.3.5)
- CHECK 约束正确使用冲突解决算法。
- SUM() 函数在整数溢出时引发错误。
- 从最左边的 SELECT 而不是最右边的 SELECT 选择复合查询中的列名。
- sqlite3_create_collation() 函数支持 SQLITE_UTF16_ALIGNED 标志。
- SQLITE_SECURE_DELETE 编译时选项导致删除用零覆盖旧数据。
- 检测 abs() 中的整数溢出。
- random() 函数提供 64 位随机性而不是仅 32 位。
- 解析器检测并报告自动机堆栈溢出。
- 更改 round() 函数以返回 REAL 而不是 TEXT。
- 允许 LEFT OUTER JOIN 左表上的 WHERE 子句项包含聚合子查询。
- 跳过文本到数字转换中的前导空格。
- 各种小错误和文档拼写错误修复和性能增强。
2006-02-11 (3.3.4)
- 修复 Unix 互斥实现中的一个错误,该错误可能导致多线程系统出现死锁。
- 修复 64 位机器上的对齐问题
- 添加了 fullfsync pragma。
- 修复了一个优化器错误,该错误可能会导致一些不寻常的 LEFT OUTER JOIN 给出不正确的结果。
- SUM 函数检测整数溢出并转换为使用浮点数累加近似结果
- 为了与 SQL Server 兼容,主机参数名称可以以“@”开头。
- 其他杂项错误修复
2006-01-31 (3.3.3)
- 删除了对 CREATE INDEX 上的 ON CONFLICT 子句的支持 - 它从未正常工作,因此这不应该出现任何向后兼容性问题。
- 授权者回调现在通知 ALTER TABLE ADD COLUMN 命令
- 在对 TEMP 数据库模式进行任何更改后,所有准备好的语句都将失效,必须使用对 sqlite3_prepare() 的新调用重新创建
- 为 3.3 版的第一个稳定版本做准备的其他小错误修复
2006-01-24(3.3.2 测试版)
- 错误修复和速度改进。改进的测试覆盖率。
- 操作系统层接口的更改:互斥锁现在必须是递归的。
- 停止使用线程特定数据进行内存不足异常处理
2006-01-16(3.3.1 阿尔法)
- 无数错误修复
- 速度改进
- 数据库连接现在可以由多个线程使用,而不仅仅是创建它们的线程。
2006-01-11(3.3.0 阿尔法)
- 检查约束
- CREATE/DROP TABLE/INDEX 上的 IF EXISTS 和 IF NOT EXISTS 子句。
- DESC指数
- 更有效的布尔值编码导致更小的数据库文件
- 更激进的 SQLITE_OMIT_FLOATING_POINT
- 分离 INTEGER 和 REAL 亲和力
- 为操作系统接口添加了一个虚拟功能层
- “存在”方法添加到 TCL 接口
- 改进了对内存不足错误的响应
- 数据库缓存可以选择在同一个线程中的连接之间共享
- 可选的 READ UNCOMMITTED 隔离(而不是默认的 SERIALIZABLE 隔离级别)和数据库连接共享公共缓存时的表级锁定。
2005-12-19 (3.2.8)
- 修复在以下异常情况下可能导致数据库损坏的模糊错误:作为更大事务的一部分的大型 INSERT 或 UPDATE 语句由于唯一性约束而失败,但包含的事务已提交。
2005-12-19 (2.8.17)
- 修复在以下异常情况下可能导致数据库损坏的模糊错误:作为更大事务的一部分的大型 INSERT 或 UPDATE 语句由于唯一性约束而失败,但包含的事务已提交。
2005-09-24 (3.2.7)
- GROUP BY 现在认为 NULL 再次相等,因为它应该
- 现在可以在 Solaris 和 OpenBSD 以及其他缺少 fdatasync() 函数的 Unix 变体上编译
- 现在再次在 MSVC++6 上编译
- 修复未初始化的变量导致各种模糊查询出现故障
- 正确计算仅在左表上受约束的 LEFT OUTER JOIN
2005-09-17 (3.2.6)
- 修复了一个错误,如果 VACUUM(或 autovacuum)失败并在大于 1GiB 的数据库上回滚,该错误可能导致数据库损坏
- LIKE 优化现在适用于具有 COLLATE NOCASE 的列
- ORDER BY 和 GROUP BY 现在使用有界内存
- 添加了对 COUNT(DISTINCT expr) 的支持
- 更改 SUM() 处理 NULL 值的方式以符合 SQL 标准
- 尽可能使用 fdatasync() 而不是 fsync() 以稍微加快提交速度
- 在连接中使用 CROSS 关键字会关闭表重新排序优化
- 添加了实验性和未记录的 EXPLAIN QUERY PLAN 功能
- 在 Windows 中使用 unicode API
2005-08-27 (3.2.5)
- 修复影响 DELETE 和 UPDATE 语句更改超过 40960 行的错误。
- 更改 makefile,使其不再需要 GNUmake 扩展
- 修复配置脚本中的 --enable-threadsafe 选项
- 修复当 IN 运算符的左侧为常量且右侧为 SELECT 语句时发生的代码生成器错误
- 除了正常的回滚日志之外,PRAGMA synchronous=off 语句现在禁用主日志文件的同步
2005-08-24 (3.2.4)
- 修复了在为复杂的 WHERE 子句生成代码时可能导致段错误的先前版本中引入的错误。
- 允许浮点文字以小数点开头或结尾。
2005-08-21 (3.2.3)
- 添加了对 CAST 运算符的支持
- Tcl 接口允许将 BLOB 值传输到用户定义的函数
- 在 Tcl 接口中添加了“交易”方法
- 允许列的 DEFAULT 值调用具有常量操作数的函数
- 添加了用于收集索引统计信息并在优化器中选择索引时使用这些统计信息的 ANALYZE 命令
- 删除 WHERE 子句中术语数量的限制(以前为 100)
- IN 运算符的右侧现在可以是表达式列表,而不仅仅是常量列表
- 重新设计优化器,使其能够更好地利用索引
- 连接中表的顺序会自动调整以更好地利用索引
- IN 运算符现在是优化的候选对象,即使左侧不是索引的最左侧项。多个 IN 运算符可用于同一索引。
- 使用 BETWEEN 和 OR 的 WHERE 子句表达式现在是优化的候选对象
- 添加了“case_sensitive_like”pragma 和 SQLITE_CASE_SENSITIVE_LIKE 编译时选项以将其默认值设置为“on”。
- 当启用 case_sensitive_like pragma 时,也使用索引来帮助处理 GLOB 表达式和 LIKE 表达式
- 添加了对重音引号的支持以与 MySQL 兼容
- 改进的测试覆盖率
- 数十个小错误修复
2005-06-12 (3.2.2)
- 添加了 sqlite3_db_handle() API
- 添加了 sqlite3_get_autocommit() API
- 向解析器添加了 REGEXP 运算符。在标准构建中没有备份此运算符的函数,但用户可以使用 sqlite3_create_function() 添加自己的函数
- 提高速度并减少库占用空间。
- 修复 64 位架构上的字节对齐问题。
- 许多很多小错误修复和文档更新。
2005-03-29 (3.2.1)
- 修复新的 ADD COLUMN 注释中的内存分配错误。
- 文档更新
2005-03-21 (3.2.0)
- 添加了对 ALTER TABLE ADD COLUMN 的支持。
- 添加了对 ISO-8601 日期/时间字符串中“T”分隔符的支持。
- 改进了对 Cygwin 的支持。
- 许多错误修复和文档更新。
2005-03-17 (3.1.6)
- 修复了将记录插入大约 125 列的表时可能导致数据库损坏的错误。
- sqlite3_step() 现在更有可能调用繁忙的处理程序并且不太可能返回 SQLITE_BUSY。
- 修复过去在 malloc() 失败后发生的内存泄漏。
2005-03-11 (3.1.5)
- Mac OS X 上控制同步到磁盘的 ioctl 是 F_FULLFSYNC,而不是 F_FULLSYNC。之前的版本是错误的。
2005-03-11 (3.1.4)
- 修复 autovacuum 中的错误,如果 CREATE UNIQUE INDEX 由于违反约束而失败,该错误可能会导致数据库损坏。仅当启用 3.1 版中引入的新 autovacuum 功能时才会出现此问题。
- F_FULLSYNC ioctl(目前仅在 Mac OS X 上支持)在同步 pragma 设置为“full”以外的值时被禁用。
- 为未来的 3.2 版数据库文件格式添加额外的向前兼容性。
- 修正 WHERE 形式的子句中的错误 (rowid<'2')
- 添加了新的SQLITE_OMIT_...编译时选项
- 更新手册页
- 从 shell 中删除 strcasecmp() 的使用
- Windows DLL 导出符号 Tclsqlite_Init 和 Sqlite_Init
2005-02-19 (3.1.3)
- 修复数据库上的 VACUUM 问题,其中包含 AUTOINCREMENT 的表已被删除。
- 添加对未来版本 3.2 数据库文件格式的向前兼容性。
- 文档更新
2005-02-15 (3.1.2)
- 修复了一个错误,如果有两个打开的连接到同一个数据库并且一个连接执行 VACUUM 而第二个连接对数据库进行一些更改,则该错误可能导致数据库损坏。
- 允许 ”?” LIMIT 子句中的参数。
- 修复 VACUUM,使其与 AUTOINCREMENT 一起工作。
- 修复 AUTOVACUUM 中可能导致数据库损坏的竞争条件
- 将数字版本号添加到 sqlite3.h 包含文件。
- 其他小错误修复和性能增强。
2005-02-15 (2.8.16)
- 修复了一个错误,如果有两个打开的连接到同一个数据库并且一个连接执行 VACUUM 而第二个连接对数据库进行一些更改,则该错误可能导致数据库损坏。
- 正确处理 CREATE INDEX 语句中引用的名称。
- 修复 sqlite.h 和 sqlite3.h 之间的命名冲突。
- 复制表达式时避免过多的堆使用。
- 其他小错误修复。
2005-02-01(3.1.1 测试版)
- TCL接口中预处理语句的自动缓存
- ATTACH 和 DETACH 以及其他一些操作会导致现有的准备好的语句过期。
- 许多小错误修复
2005-01-21(3.1.0 阿尔法)
- 添加了 Autovacuum 支持
- 添加了 CURRENT_TIME、CURRENT_DATE 和 CURRENT_TIMESTAMP
- 添加了对 EXISTS 子句的支持。
- 添加了对相关子查询的支持。
- 在 LIKE 运算符上添加了 ESCAPE 子句。
- 支持 ALTER TABLE ... RENAME TABLE ... 添加
- INTEGER PRIMARY KEY 支持 AUTOINCREMENT 关键字
- 许多 SQLITE_OMIT_ 宏插入以在编译时省略功能并减少库占用空间。
- 添加了 REINDEX 命令。
- 如果引擎可以从索引中获取所需的所有信息,它就不再查询主表。
- 许多令人讨厌的错误已修复。
2004-10-12 (3.0.8)
- 添加对 DEFERRED、IMMEDIATE 和 EXCLUSIVE 事务的支持。
- 允许在已有一个或多个预编译 SQL 语句时创建新的用户定义函数。
- 修复 MinGW/MSYS 的可移植性问题。
- 修复 64 位 Sparc 机器上的字节对齐问题。
- 修复 shell 的“.import”命令,使其忽略行尾的 \r 字符。
- shell 中的“csv”模式选项将字符串放在双引号内。
- 修复文档中的拼写错误。
- 将代码中的数组常量转换为“const”类型。
- 许多代码优化,特别是旨在使代码占用空间更小的优化。
2004-09-18 (3.0.7)
- BTree 模块使用 malloc() 而不是堆栈分配大缓冲区,以便在堆栈空间有限的机器上更好地发挥作用。
- 修复了命名冲突,以便可以在同一个 ANSI-C 源文件中链接和使用 2.8 版和 3.0 版。
- 新接口:sqlite3_bind_parameter_index()
- 添加对以下形式的通配符参数的支持:“?nnn”
- 修复在 64 位系统上发现的问题。
- 从 3.0 版源代码树中删除了 encode.c 文件(包含未使用的例程)。
- sqlite3_trace() 回调发生在每条语句执行之前,而不是语句编译时。
- Makefile 更新和其他错误修复。
2004-09-02(3.0.6 测试版)
- 更好地检测和处理损坏的数据库文件。
- 如果由于锁定而无法提交更改,sqlite3_step() 接口将返回 SQLITE_BUSY
- 将 LIKE 和 GLOB 的实现组合到一个模式匹配子例程中。
- 杂项代码大小优化和错误修复
2004-08-29(3.0.5 测试版)
- 支持“:AAA”风格的绑定参数名称。
- 添加了新的 sqlite3_bind_parameter_name() 接口。
- 支持嵌入在 TCL 绑定中的 SQL 语句中的 TCL 变量名称。
- TCL 绑定无需转换为字符串即可传输数据。
- TEMP 表的数据库只有在需要时才会创建。
- 添加使用“sqlite_temp_directory”全局变量指定替代临时文件目录的功能。
- 编译时选项 (SQLITE_BUSY_RESERVED_LOCK) 导致在争用 RESERVED 锁时调用繁忙的处理程序。
- 各种错误修复和优化
2004-08-09(3.0.4 测试版)
- CREATE TABLE 和 DROP TABLE 现在可以作为准备好的语句正常工作。
- 修复 VACUUM 和 UNIQUE 索引中的错误。
- 将“.import”命令添加到命令行 shell。
- 修复了当尝试删除表的行被挂起的查询阻止时可能导致索引损坏的错误。
- 库大小优化。
- 其他小错误修复。
2004-07-22 (2.8.15)
- 这只是一个维护版本。修复了各种小错误并添加了一些可移植性增强功能。
2004-07-22(3.0.3 测试版)
- SQLite 3.0 的第二个测试版。
- 添加对“PRAGMA page_size”的支持以调整数据库的页面大小。
- 各种错误修复和文档更新。
2004-06-30(3.0.2 测试版)
- SQLite 3.0 的第一个测试版。
2004-06-22(3.0.1 阿尔法)
- *** Alpha 版本 - 仅供研究和测试使用 ***
- 许多错误修复。
2004-06-18(3.0.0 阿尔法)
- *** Alpha 版本 - 仅供研究和测试使用 ***
- 支持国际化,包括 UTF-8、UTF-16 和用户定义的整理序列。
- 新的文件格式,对于典型使用来说要小 25% 到 35%。
- 改进的并发性。
- ATTACHed 数据库的原子提交。
- 从 API 中删除 cruft。
- BLOB 支持。
- 64 位行标识。
- 更多信息。
2004-06-09 (2.8.14)
- 修复 min() 和 max() 优化器,使其在 FROM 子句包含子查询时起作用。
- 忽略“.”末尾的多余空格。外壳中的命令。
- 将 sqlite_encode_binary() 和 sqlite_decode_binary() 与库捆绑在一起。
- TEMP_STORE 和 DEFAULT_TEMP_STORE pragma 现在可以工作了。
- 代码更改为使用 OpenWatcom 进行干净编译。
- 修复 INSTEAD OF 触发器和 IN 运算符中的 NULL 的 VDBE 堆栈溢出问题。
- 添加全局变量 sqlite_temp_directory 如果设置它定义存储临时文件的目录。
- sqlite_interrupt() 与 VACUUM 配合得很好。
- 其他小错误修复。
2004-03-08 (2.8.13)
- 重构部分代码以使代码占用空间更小。代码现在也快了一点。
- sqlite_exec() 现在作为 sqlite_compile() 和 sqlite_step() 的包装器实现。
- 内置的 min() 和 max() 函数现在支持 NUMERIC 和 TEXT 数据类型之间的区别。以前,min() 和 max() 总是假设它们的参数是 NUMERIC 类型。
- 内置日期/时间函数的新 HH:MM:SS 修饰符。
- 添加了实验性 sqlite_last_statement_changes() API。修复了 last_insert_rowid() 函数,使其与触发器一起正常工作。
- 为数据库加密 API 添加函数原型。
- 修复几个令人讨厌的错误。
2004-02-08 (2.8.12)
- 修复了一个错误,如果在提交过程中发生电源故障或外部程序停止,该错误可能会损坏回滚日志。损坏的日志在回滚时会导致数据库损坏。
- 减小大小并提高各种模块的速度,尤其是虚拟机。
- 允许“<expr> IN <table>”作为“<expr> IN (SELECT * FROM <table>”) 的简写。
- 对 sqlite_mprintf() 例程的优化。
- 确保 MIN() 和 MAX() 优化在子查询中起作用。
2004-01-14 (2.8.11)
- 修复 IN 运算符如何处理子查询中的 NULL 的错误。该错误是由先前版本引入的。
2004-01-14 (2.8.10)
- 修复了 Unix 上一个潜在的数据库损坏问题,该问题由以下事实引起:每当您关闭()一个文件时,所有 POSIX 建议锁都会被清除。围绕它的工作是在锁未完成时禁止所有 close() 调用。
- COUNT(*) 的某些极端情况的性能增强。
- 如果 malloc() 失败,请确保内存后端响应正常。
- 允许从用户定义的 SQL 函数中调用 sqlite_exec()。
- 使用“long double”提高了浮点转换的准确性。
- 实验性日期/时间函数中的错误修复。
2004-01-06 (2.8.9)
- 修复了一个 32 位整数溢出问题,如果将大的负数(小于 -2147483648)插入到索引数字列中,该问题可能会导致数据库中的索引损坏。
- 修复多线程 Linux 实现上的锁定问题。
- 始终使用“。” 而不是“,”作为小数点,即使语言环境要求“,”。
- 添加 UTC 到本地时间转换到实验性日期/时间函数。
- 日期/时间函数的错误修复。
2003-12-18 (2.8.8)
- 修复 2.8.0 中引入的一个可能导致数据库损坏的严重错误。
- 修复不使用索引的 3 向连接的问题
- VACUUM 命令现在可以与非回调 API 一起使用
- 对“PRAGMA integrity_check”命令的改进
2003-12-04 (2.8.7)
- 添加了实验性 sqlite_bind() 和 sqlite_reset() API。
- 如果数据库的名称是空字符串,则在临时文件中打开一个新数据库,该临时文件在数据库关闭时自动删除。
- Lemon生成的解析器中的性能增强
- 修改了实验日期/时间函数。
- 禁止永久表上的临时索引。
- 文档更新和拼写错误修复
- 添加了实验性的 sqlite_progress_handler() 回调 API
- 删除了对 Oracle8 外连接语法的支持。
- 允许 GLOB 和 LIKE 运算符作为函数工作。
- 其他次要文档和 makefile 更改以及错误修复。
2003-08-22 (2.8.6)
- 将 CVS 存储库移至 www.sqlite.org
- 更新 NULL 处理文档。
- 添加了实验性日期/时间函数。
- 错误修复:正确评估视图的视图而不会出现段错误。
- 错误修复:如果删除与表同名的触发器,则防止数据库损坏。
- 错误修复:在设置 EMPTY_RESULT_CALLBACKS pragma 后允许在空数据库上进行 VACUUM(无段错误)。
- 错误修复:如果整数值不适合 32 位 int,请将其存储在 double 中。
- 错误修复:确保在写入数据库文件之前将日志文件目录条目提交到磁盘。
2003-07-22 (2.8.5)
- 使 LIMIT 对复合 SELECT 语句起作用。
- LIMIT 0 现在不显示任何行。使用 LIMIT -1 查看所有行。
- 正确处理 INTEGER PRIMARY KEY 和浮点数之间的比较。
- 修复新的 ATTACH 和 DETACH 命令中的几个重要错误。
- 更新了NULL 处理文档。
- 在 sqlite_compile() 和 sqlite_step() 中允许 NULL 参数。
- 许多小错误修复
2003-06-29 (2.8.4)
- 增强了“PRAGMA integrity_check”命令以验证索引。
- 为新的 ATTACH 和 DETACH 命令添加了授权挂钩。
- 许多文档更新
- 许多小错误修复
2003-06-04 (2.8.3)
- 如果您对包含 INTEGER PRIMARY KEY 加上一个或多个索引的表执行 INSERT OR REPLACE 或 UPDATE OR REPLACE,修复将损坏表上的索引的问题。
- 修复 Windows 锁定代码中的错误,以便在 Win95 和 WinNT 系统同时访问时锁定正常工作。
- 添加 INSERT 和 UPDATE 语句引用“rowid”(或“_rowid_”或“oid”)列的能力。
- 其他重要错误修复
2003-05-17 (2.8.2)
- 如果您从具有 TEMP 索引的主数据库中删除表,则修复会损坏数据库文件的问题。
2003-05-17 (2.8.1)
- 重新激活回收数据库文件中未使用磁盘空间的 VACUUM 命令。
- 添加了 ATTACH 和 DETACH 命令以允许同时与多个数据库文件进行交互。
- 添加了对 TEMP 触发器和索引的支持。
- 添加了对内存数据库的支持。
- 删除了实验性的 sqlite_open_aux_file()。它的功能包含在新的 ATTACH 命令中。
- ON CONFLICT 子句的优先顺序已更改,因此 BEGIN 语句上的 ON CONFLICT 子句的优先级高于约束上的 ON CONFLICT 子句。
- 许多错误修复和兼容性增强。
2003-02-16 (2.8.0)
- 修改了日志文件格式,使其更能抵抗操作系统崩溃或电源故障后可能发生的损坏。
- 添加了一个新的 C/C++ API,它不使用回调来返回数据。
2003-01-25 (2.7.6)
- 性能改进。图书馆现在快多了。
- 添加了sqlite_set_authorizer() API。尚未编写正式文档 - 有关如何使用此功能的说明,请参阅源代码注释。
- 修复 GLOB 运算符中的一个错误,该错误阻止它使用大写字母。
- 各种小错误修复。
2002-12-28 (2.7.5)
- 修复 pager.c 中一个未初始化的变量,它可能(概率为 40 亿分之一)导致数据库损坏。
2002-12-17 (2.7.4)
- 数据库文件现在可以增长到 2^41 字节。旧限制是 2^31 字节。
- 如果这样做将满足 ORDER BY ... DESC 子句,优化器现在将反向扫描表。
- 即使将相对路径传递到 sqlite_open() 中,现在也会记住数据库文件的完整路径名。这允许库在 chdir() 之后继续正确运行。
- VDBE 中的速度改进。
- 许多小错误修复。
2002-10-31 (2.7.3)
- 各种编译器兼容性修复。
- 修复“expr IN ()”运算符中的错误。
- 接受括号中的列名称。
- 修复 VDBE 中字符串内存管理的问题
- 修复“table_info”pragma 中的错误
- 导出 Windows DLL 中的 sqlite_function_type() API 函数
- 修复 Windows 下的锁定行为
- 修复 LEFT OUTER JOIN 中的错误
2002-09-25 (2.7.2)
- 防止日志文件在大量交易中溢出。
- 修复 sqlite_open() 失败时发生的内存泄漏。
- 遵守 SELECT 的 ORDER BY 和 LIMIT 子句,即使结果集用于 INSERT。
- 不要在用于保存 TEMP 表的文件上放置写锁。
- 添加了关于 SELECT DISTINCT 和 SQLite 如何处理 NULL 的文档。
- 修复了当通过单个 sqlite_exec() 调用执行数千条 SQL 语句时导致性能不佳的问题。
2002-08-31 (2.7.1)
- 修复 2.7.0 版本中引入的 ORDER BY 逻辑错误
- 分词器现在接受 C 风格的注释。
- 当源是 SELECT 语句时,INSERT 运行得更快一些。
2002-08-25 (2.7.0)
- 排序时区分数字值和文本值。文本值根据 memcmp() 排序。数值按数字顺序排序。
- 通过模拟 Win95/98/ME 中缺少的读取器/写入器锁,允许在 Windows 下同时进行多个读取器。
- 如果另一个事务已经处于活动状态,则在尝试启动事务时现在会返回错误。
2002-08-13 (2.6.3)
- 添加读取小端和大端数据库的能力。因此,在 SunOS 或 Mac OS X 下创建的数据库可以在 Linux 或 Windows 下读写,反之亦然。
- 转换到新网站:http://www.sqlite.org/
- 允许事务跨越 Linux 线程
- GROUP BY 查询的 ORDER BY 子句处理中的错误修复
2002-07-31 (2.6.2)
- COPY 命令读取的文本文件现在可以具有 LF、CRLF 或 CR 行终止符。
- 如果在数据库初始化期间遇到 SQLITE_BUSY,则可以正确处理。
- 修复了 TEMP 表上的 UPDATE 触发器。
- 文档更新。
2002-07-19 (2.6.1)
- 在响应 RCS“ident”命令并包含库版本号的库中包含一个静态字符串。
- 修复在打开“count_changes”杂注的情况下删除表的所有行时发生的断言失败。
- 在自动 2.5.6 到 2.6.0 数据库格式升级期间出现问题时更好的错误报告。
2002-07-18 (2.6.0)
- 更改索引格式以更正 2.1.0 版中的设计缺陷。 *** 这是不兼容的文件格式更改 *** 当 2.6.0 或更高版本的库尝试打开由 2.5.6 或更早版本创建的数据库文件时,它将自动且不可逆地转换文件格式。 在使用 2.6.0 版库打开旧数据库文件之前制作它们的备份副本。
2002-07-07 (2.5.6)
- 修复更多回滚问题。增强测试套件以广泛执行回滚逻辑,以防止将来出现任何问题。
2002-07-06 (2.5.5)
- 修复在回滚期间可能导致数据库损坏的错误。这个错误是由 checkin [410] 的自由列表优化在 2.4.0 版中引入的。
- 修复视图聚合函数中的错误。
- 其他小的变化和增强。
2002-07-01 (2.5.4)
- 再次使“AS”关键字可选。
- 列的数据类型现在出现在回调的第四个参数中。
- 添加了sqlite_open_aux_file() API,尽管它大部分仍未记录且未经测试。
- 添加了额外的测试用例并修复了这些测试用例发现的一些错误。
2002-06-25 (2.5.3)
- 错误修复:由于版本 2.4.0 中引入的优化(签入 [410]),可能会发生数据库损坏。现在应该解决该问题。不建议使用版本 2.4.0 到 2.5.2。
2002-06-25 (2.5.2)
- 添加了新的SQLITE_TEMP_MASTER表,它以与SQLITE_MASTER对持久表相同的方式记录临时表的模式。
- 为 UNION ALL 添加了优化
- 修复了 LEFT OUTER JOIN 处理中的一个 bug
- LIMIT 子句现在适用于子选择
- ORDER BY 适用于子选择
- 有一个新的 TypeOf() 函数用于确定表达式是数字还是文本。
- 自动增量现在适用于 SELECT 中的 INSERT。
2002-06-19 (2.5.1)
- 查询优化器现在尝试使用索引实现 ORDER BY 子句。如果没有合适的索引可用,仍然使用排序。
2002-06-17 (2.5.0)
- 添加了对行触发器的支持。
- 添加了符合 SQL-92 的 NULL 处理。
- 添加对完整 SQL-92 连接语法和 LEFT OUTER JOIN 的支持。
- 双引号字符串解释为列名而不是文本文字。
- 解析(但不实现)外键。
- 解析器、分页器和 WHERE 子句代码生成器的性能改进。
- 使 LIMIT 子句适用于子查询。(不过,ORDER BY 仍然不起作用。)
- 向 sqlite_*_printf() 添加了“%Q”扩展。
- 错误修复不胜枚举(请参阅更改日志)。
2002-05-10 (2.4.12)
- 添加了逻辑来检测库 API 例程何时被乱序调用。
2002-05-08 (2.4.11)
- 错误修复:结果集中的列名没有为某些(相当复杂的)视图正确生成。在某些情况下,这可能会导致段错误。
2002-05-03 (2.4.10)
- 错误修复:当复合 SELECT 用作子查询时生成正确的列标题。
- 将 sqlite_encode_binary() 和 sqlite_decode_binary() 函数添加到源代码树。但它们尚未链接到库中。
- 文档更新。
- 从 Windows DLL 导出 sqlite_changes() 函数。
- 错误修复:不要尝试对缺少 FROM 子句的查询进行子查询扁平化优化。这样做会导致段错误。
2002-04-22 (2.4.9)
- 修复了导致 SQLITE.EXE 的预编译二进制文件在 Windows 98 下报告“内存不足”的错误。
2002-04-20 (2.4.8)
- 确保在 shell 中.dump命令的输出中,在相应的 TABLE 之后创建 VIEW。
- 速度改进:不要对 TEMP 表进行同步更新。
- 外壳的许多改进和增强。
- 使 GLOB 和 LIKE 运算符函数可以被程序员覆盖。例如,这允许将 LIKE 运算符更改为区分大小写。
2002-04-12 (2.4.7)
- 添加将 TABLE.* 放入 SELECT 语句的列列表中的功能。
- 允许没有 FROM 子句的 SELECT 语句。
- 添加了last_insert_rowid() SQL 函数。
- 不要将发生 IGNORE 冲突解决的行计入行数。
- 确保 INSERT 的 VALUES 子句中的函数表达式是正确的。
- 添加了sqlite_changes() API 函数以返回在最近操作中更改的行数。
2002-04-02 (2.4.6)
- 错误修复:正确处理连接的 WHERE 子句中不包含比较运算符的术语。
2002-04-02 (2.4.5)
- 错误修复:正确处理出现在连接的 WHERE 子句中的函数。
- 设置 PRAGMA vdbe_trace=ON 时,当 P3 操作数值是指向结构的指针而不是指向字符串的指针时,正确打印 P3 操作数值。
- 将显式 NULL 插入 INTEGER PRIMARY KEY 时,自动将 NULL 值转换为唯一键。
2002-03-30 (2.4.4)
- 允许“VIEW”作为列名
- 添加了对 CASE 表达式的支持(来自 Dan Kennedy 的补丁)
- 在交付中添加了 RPMS(来自 Doug Henry 的补丁)
- 修复文档中的拼写错误
- 将配置管理切换到具有自己的 CVSTrac 错误跟踪系统的新 CVS 存储库。
2002-03-23 (2.4.3)
- 修复了当复合 SELECT 用作 SELECT 的 FROM 中的子查询时出现的 SELECT 错误。
- sqlite_get_table ()函数现在返回一个错误,如果你给它两个或多个返回不同列数的 SELECT。
2002-03-20 (2.4.2)
- 错误修复:修复了当 ROWID 是视图上 SELECT 语句中的列时发生的断言失败。
- 错误修复:修复了 VDBE 中可能导致断言失败的未初始化变量。
- 使 os.h 头文件在检测何时为 Windows 编译以及何时为 Unix 编译时更加可靠。
2002-03-13 (2.4.1)
- 在 FROM 子句中使用未命名的子查询会导致段错误。
- 解析器现在坚持在执行语句之前看到分号或输入结束。如果 WHERE 关键字在 UPDATE 或 DELETE 语句中拼写错误,这可以避免意外灾难。
2002-03-11 (2.4.0)
- 将 sanity_check PRAGMA 的名称更改为integrity_check 并使其在所有编译中可用。
- 没有 WHERE 或 GROUP BY 子句的索引列的 SELECT min() 或 max() 被处理为避免完整表扫描的特殊情况。
- 自动生成的 ROWID 现在是连续的。
- 不允许命令行 shell 的点命令出现在真正的 SQL 命令中间。
- 修改Lemon 解析器生成器,使解析器表小 4 倍。
- 添加了对在 C 中实现的用户定义函数的支持。
- 添加了对新函数的支持:coalesce()、lower()、 upper()和random()
- 添加了对视图的支持。
- 添加了子查询展平优化器。
- 修改了 B-Tree 和 Pager 模块,以便不包含实际数据的磁盘页面(空闲页面)不会被记录下来,并且在更改时不会从内存写回磁盘。这不会影响数据库完整性,因为页面不包含实际数据,但它确实使大型 INSERT 操作快约 2.5 倍,大型 DELETE 操作快约 5 倍。
- 使 CACHE_SIZE pragma 持久化
- 添加了 SYNCHRONOUS pragma
- 修复了当数据库包含临时表时导致事务内部更新失败的错误。
2002-02-19 (2.3.3)
- 允许在方括号中引用标识符,以与 MS-Access 兼容。
- 在 SELECT 的 FROM 子句中添加了对子查询的支持。
- 在 Windows 下更有效地实现 sqliteFileExists()。(乔尔·鲁西)
- INSERT 的 VALUES 子句现在可以包含表达式,包括标量 SELECT 子句。
- 添加了对 CREATE TABLE AS SELECT 的支持
- 错误修复:在单个事务中创建和删除一个表是行不通的。
2002-02-14 (2.3.2)
- 错误修复:pager.c 中有一个不正确的 assert()。真正的代码都是正确的(就目前所知),所以如果您使用 -DNDEBUG=1 编译,一切都应该正常。如果未禁用断言,则可能会出现错误。
2002-02-13 (2.3.1)
- 错误修复:如果“PRAGMA full_column_names=ON;”则断言失败 已设置,您执行了一个使用 rowid 的查询,如下所示:“SELECT rowid, * FROM ...”。
2002-02-03 (2.3.0)
- 修复 INSERT 命令中的一个严重错误,如果数据源是 SELECT 并且 INSERT 子句以默认顺序以外的某种顺序指定其列,则该错误会导致数据进入错误的列。
- 添加了解决约束冲突的能力,而不是中止和回滚。有关详细信息,请参阅有关“ON CONFLICT”子句的文档。
- 临时文件现在会在关闭时由操作系统自动删除。程序崩溃时不再有悬空的临时文件。(如果操作系统崩溃,在Unix下重启后fsck会删除文件,我不知道在Windows下会发生什么。)
- 遵守 NOT NULL 约束。
- COPY 命令将 NULL 放入数据为“\N”的列中。
- 在 COPY 命令中,反斜杠现在可用于转义换行符。
- 添加了 SANITY_CHECK pragma。
2002-01-28 (2.2.5)
- 重要错误修复:如果左侧或右侧是从 INTEGER PRIMARY KEY 派生的,则 IN 运算符不起作用。
- 不要在 sqlite命令行访问程序的输出中转义反斜杠“\”字符。
2002-01-22 (2.2.4)
- SELECT 列列表中 AS 右侧的标签现在可以用作 WHERE、ORDER BY、GROUP BY 和/或 HAVING 子句中表达式的一部分。
- 修复了sqlite命令的-separator命令行选项中的错误 。
- 修复了将大写字符串与大于“Z”但小于“a”的字符进行比较时的排序顺序问题。
- 如果 ORDER BY 或 GROUP BY 表达式是常量,则报告错误。
2002-01-16 (2.2.3)
- 修复 VC++ 7.0 中的警告消息。(来自 nicolas352001 的补丁)
- 使库线程安全。(代码在那里并且似乎可以工作但没有被强调。)
- 添加了新的sqlite_last_insert_rowid() API 函数。
2002-01-14 (2.2.2)
- 错误修复:当带有索引的临时表与由单独进程创建的永久表同名时,断言失败。
- 错误修复:更新包含 INTEGER PRIMARY KEY 和索引的表可能会失败。
2002-01-09 (2.2.1)
- 错误修复:当不存在这样的 rowid 时,尝试删除带有“ROWID=x”的 WHERE 子句的表的单行会导致错误。
- 错误修复:将 NULL 作为第三个参数传递给sqlite_open() 有时会导致核心转储。
- 错误修复:DROP TABLE 后跟一个具有相同名称的 CREATE TABLE 都在单个事务中导致核心转储。
- 来自 A. Rottmann 的 Makefile 更新
2001-12-22 (2.2.0)
- INTEGER PRIMARY KEY 类型的列实际上用作表的底层 B-Tree 表示中的主键。
- 在实现上一个项目符号的整数主键更改时,发现并修复了几个模糊的、不相关的错误。
- 添加了在 SELECT 语句的结果部分中将“*”指定为更大列列表的一部分的功能。例如:
“ SELECT rowid, * FROM table1; ” 。 - 评论和文档的更新。
2001-12-15 (2.1.7)
- 修复CREATE TEMPORARY TABLE中的错误,该错误导致表最初分配在主数据库文件中,而不是在单独的临时文件中。这个错误可能导致库遭受断言失败,并可能导致主数据库文件中的“页面泄漏”。
- 修复 b-tree 子系统中的一个错误,该错误有时会导致在数据库扫描期间重复表的第一行。
2001-12-14 (2.1.6)
- 再次修复锁定机制以防止 sqlite_exec()不必要地返回 SQLITE_PROTOCOL。这次错误是锁定代码中的竞争条件。此更改会影响 POSIX 和 Windows 用户。
2001-12-06 (2.1.5)
- 修复有时导致sqlite_exec()不必要地返回 SQLITE_PROTOCOL的另一个问题(与 2.1.4 中修复的问题无关)。这次错误出现在 POSIX 锁定代码中,应该不会影响 Windows 用户。
2001-12-05 (2.1.4)
- 有时sqlite_exec()会在它应该返回 SQLITE_BUSY 时返回 SQLITE_PROTOCOL。
- 对先前错误的修复发现了一个死锁,该死锁也已修复。
- 添加将单个 .command 放在 sqlite shell 的第二个参数中的功能
- 常见问题解答更新
2001-11-24 (2.1.3)
- 修复比较运算符(例如:“ < ”、“ == ”等)的行为,以便它们与索引中条目的顺序一致。
- 正确处理 SQL 表达式中大于机器整数所能表示的整数。
2001-11-23 (2.1.2)
- 更改以支持 64 位架构。
- 修复锁定协议中的错误。
- 修复了一个错误,该错误可能(很少)导致数据库在 DROP TABLE 之后由于 SQLITE_MASTER 表损坏而变得不可读。
- 更改代码,以便即使 SQLITE_MASTER 表(轻微)损坏,也可以通过该版本的库读取因上述错误而无法读取的版本 2.1.1 数据库。
2001-11-13 (2.1.1)
- 错误修复:有时,当列的实际值为 NULL 时,任意字符串会传递给回调函数。
2001-11-12 (2.1.0)
- 更改数据记录的格式,以便可以存储最大 16MB 的记录。
- 更改索引的格式以允许更好的查询优化。
- 在 SELECT 语句上实施“LIMIT ... OFFSET ...”子句。
2001-11-03 (2.0.8)
- 将 API 函数中的选定参数设为 const。这应该是完全向后兼容的。
- 文档更新
- 通过将排序器和列表的数量限制为 1 来简化 VDBE 的设计。在实践中,无论如何都不会使用超过一个排序器和一个列表。
2001-10-22 (2.0.7)
- 任何 UTF-8 字符或 ISO8859 字符都可以用作标识符的一部分。
- 来自 Christian Werner 的补丁可提高 ODBC 兼容性并修复 round() 函数中的错误。
- 插入一些在 malloc() 失败时会发生的内存泄漏。只要 malloc() 有效,我们就一直并将继续保持无内存泄漏。
- 更改一些测试脚本,使它们除了可以在 Unix 上运行外,还可以在 Windows 上运行。
2001-10-19 (2.0.6)
- 添加了 EMPTY_RESULT_CALLBACKS pragma
- 支持列名和表名中的 UTF-8 和 ISO8859 字符。
- 错误修复:使用 FULL_COLUMN_NAMES pragma 计算正确的表名已打开。
2001-10-15 (2.0.5)
- 添加了 COUNT_CHANGES 编译指示。
- 更改 FULL_COLUMN_NAMES pragma 以帮助 ODBC 驱动程序。
- 错误修复:“SELECT count(*)”为空表返回 NULL。现在它返回 0。
2001-10-13 (2.0.4)
- 错误修复:一个模糊且相对无害的错误导致其中一个测试在打开 gcc 优化时失败。此版本修复了该问题。
2001-10-13 (2.0.3)
- 错误修复:sqlite_busy_timeout()函数在失败之前延迟了 1000 次太久。
- 错误修复:如果保存数据库文件的磁盘已满或由于其他原因停止接受写入,则断言失败。添加了新测试以检测将来的类似问题。
- 添加了新的运算符:&(按位与) | (按位或)、~(补码)、 <<(左移)、>>(右移)。
- 添加了新功能:round()和abs()。
2001-10-09 (2.0.2)
- 修复锁定协议中的两个错误。(一个在掩盖另一个。)
- 删除了一些未使用的“#include
" 导致 VC++ 出现问题。 - 修复了 sqlite.h以便它可以在 C++ 中使用
- 添加了 FULL_COLUMN_NAMES pragma。当设置为“ON”时,列的名称将作为 TABLE.COLUMN 而不仅仅是 COLUMN 报告回来。
- 添加了 TABLE_INFO() 和 INDEX_INFO() pragma 以帮助支持 ODBC 接口。
- 添加了对 TEMPORARY 表和索引的支持。
2001-10-02 (2.0.1)
- 从 btree.c 中删除一些 C++ 风格的注释,以便它可以使用 gcc 以外的编译器进行编译。
- 如果数据中的任何地方都有嵌入的换行符,则 shell 的“.dump”输出将不起作用。这是一个从 1.0 版本继承下来的老错误。为了修复它,“.dump”输出不再使用 COPY 命令。它而是生成 INSERT 语句。
- 除了“expr NOTNULL”(没有空格)之外,扩展表达式语法以支持“expr NOT NULL”(在“NOT”和“NULL”之间有一个空格)。
2001-09-28 (2.0.0)
- 自动为 Linux 和 Windows 构建二进制文件并将它们放在网站上。
2001-09-28 (2.0-alpha-4)
- 合并来自 A. Rottmann 的 makefile 补丁以使用 LIBTOOL
2001-09-27 (2.0-alpha-3)
- SQLite 现在支持 CREATE UNIQUE INDEX 中的 UNIQUE 关键字。主键必须是唯一的。
- 文件格式改回 alpha-1 的格式
- 修复回滚和锁定行为
2001-09-20 (2.0-alpha-2)
- 2.0 版的初始版本。将库重命名为“SQLus”的想法被放弃,取而代之的是保留“SQLite”名称并增加主版本号。
- pager 和 btree 子系统重新添加。它们现在是唯一可用的后端。
- 删除了 Dbbe 抽象和 GDBM 以及内存驱动程序。
- 放弃所有代码的版权。该图书馆现在属于公共领域。
2001-07-23 (1.0.32)
- Pager 和 btree 子系统已删除。这些将在名为“SQLus”的后续 SQL 服务器库中使用。
- 添加在表达式中使用带引号的字符串作为表名和列名的功能。
2001-04-15 (1.0.31)
- 寻呼机子系统已添加但尚未使用。
- 更稳健地处理内存不足错误。
- 添加到测试套件的新测试。
2001-04-06 (1.0.30)
- 删除之前版本中引入的sqlite_encoding TCL 变量。
- 将选项-encoding和-tcl -uses-utf添加到 sqlite TCL 命令。
- 添加测试以确保 tclsqlite 是使用匹配的 Tcl 头文件和库编译的。
2001-04-05 (1.0.29)
- 如果为配置提供 --enable-utf8 选项,库现在假定数据存储为 UTF-8。默认行为是采用 iso8859-x,一如既往。这只会对 LIKE 和 GLOB 运算符以及 LENGTH 和 SUBSTR 函数产生影响。
- 如果库未配置为 UTF-8,并且 Tcl 库是内部使用 UTF-8 的较新库之一,则在 TCL 接口内部完成从 UTF-8 到 iso8859 的转换,然后再返回。
2001-04-04 (1.0.28)
- 添加了对事务的有限支持。此时,事务将在 GDBM 后端进行表锁定。还不支持回滚或原子提交。
- 添加了特殊的列名称 ROWID、OID 和 _ROWID_,它们引用与每个表的每一行关联的唯一随机整数键。
- 向回归套件添加了额外的测试,以涵盖新的 ROWID 功能和下面提到的 TCL 接口错误。
- 更改Lemon 解析器生成器以帮助它在使用 MSVC 编译时更好地工作。
- Oleg Oleinick 确定的 TCL 界面中的错误修复。
2001-03-20 (1.0.27)
- 在做DELETE和UPDATE时,库用于将要删除或更新的记录的记录数写入一个临时文件。这已更改,以便记录编号保存在内存中。
- 不带 WHILE 子句的 DELETE 命令只是从磁盘中删除数据库文件,而不是逐条删除记录。
2001-03-20 (1.0.26)
- 在 Windows 上修复了一个严重的错误。Windows 用户应该升级。对 Unix 没有影响。
2001-03-15 (1.0.25)
- 修改测试脚本以识别依赖于系统负载和处理器速度的测试,并警告用户其中一个(罕见的)测试失败并不一定意味着库出现故障。没有更改代码。
2001-03-14 (1.0.24)
- 修复导致 UPDATE 命令在“malloc(0)”返回 NULL 的系统上失败的错误。该问题不会出现在 Windows、Linux 或 HPUX 上,但会导致库在 QNX 上失败。
2001-02-20 (1.0.23)
- 修复了 Mark Muranwski 的一个不相关(和次要)错误。用于确定将“内存:”数据库的临时文件放在哪里的算法工作不正常。
2001-02-19 (1.0.22)
- 之前的修复不太正确。这个似乎效果更好。
2001-02-19 (1.0.21)
- 当 WHERE 子句包含一些可以使用索引满足的条款和其他不能满足的条款时,UPDATE 语句不起作用。固定的。
2001-02-11 (1.0.20)
- 将开发更改合并到主干中。未来使用 BTree 文件结构的工作将使用单独的 CVS 源代码树。此 CVS 树将继续仅支持 SQLite 的 GDBM 版本。
2001-02-06 (1.0.19)
- 修复导致 QNX 出现问题的奇怪(但有效)的 C 声明。没有逻辑上的变化。
2001-01-04 (1.0.18)
- 发生错误时打印有问题的 SQL 语句。
- CREATE TABLE 语句中的约束之间不需要逗号。
- 向 shell 添加了“-echo”选项。
- 修改评论。
2000-12-10 (1.0.17)
- 重写了sqlite_complete ()以使其更快。
- 对其他代码进行微调,使其运行得更快。
- 为sqlite_complete()和内存泄漏添加了新测试。
2000-11-28 (1.0.16)
- 文档更新。主要是修正拼写错误和拼写错误。
2000-10-23 (1.0.15)
- 文档更新
- 从 vdbe.c 的内部循环中删除了一些完整性检查代码,以帮助库运行得更快一些。只有在使用 -DNDEBUG 编译时才会删除代码。
2000-10-19 (1.0.14)
- 添加了一个“内存:”后端驱动程序,将其数据库存储在内存中的哈希表中。
2000-10-19 (1.0.13)
- 将 GDBM 驱动程序分解为一个单独的文件,以期添加新的驱动程序。
- 允许数据库名称以驱动程序类型为前缀。目前,唯一的驱动程序类型是“gdbm:”。
2000-10-17 (1.0.12)
- 修复了导致新 sqlite_..._printf()例程的“%q”格式指令中出现核心转储的差一错误。
- 添加了sqlite_interrupt()接口。
- 在 shell 中,当用户按下 Control-C 时调用sqlite_interrupt()
- 修复了sqlite_exec()返回错误错误代码的一些情况。
2000-10-11 (1.0.10)
- 添加了关于如何为 Windows95/98 编译的注释。
- 删除了一些未使用的变量。等等。
2000-10-09 (1.0.9)
- 添加了sqlite_..._printf()接口例程。
- 修改了sqlite shell 程序以使用新的接口例程。
- 如果明确要求,修改sqlite shell 程序以打印内置 SQLITE_MASTER 表的模式。
2000-09-30 (1.0.8)
- 开始编写有关 TCL 接口的文档。
2000-09-29(未发布)
- 添加了sqlite_get_table() API
- 由于上述更改,更新了文档。
- 修改了sqlite shell 以使用新的 sqlite_get_table() API 以在多列中打印表列表,类似于“ls”打印文件名的方式。
- 修改了sqlite shell 以在“.schema”命令的输出中的每个 CREATE 语句末尾打印一个分号。
2000-09-21(未发布)
- 如果未指定回调脚本,请更改 tclsqlite“eval”方法以返回结果列表。
- 更改 tclsqlite.c 以使用 Tcl_Obj 接口
- 将 tclsqlite.c 添加到 libsqlite.a 库
2000-09-14 (1.0.5)
- 将浮点值的打印格式从“%g”更改为“%.15g”。
- 更改了比较函数,以便指数表示法中的数字(例如:1.234e+05)按数字顺序排序。
2000-08-28 (1.0.4)
- 添加了函数length()和substr()。
- 修复当输出模式为“列”且第一行数据包含 NULL 时导致 coredump的sqlite shell 程序中的错误。
2000-08-22 (1.0.3)
- 在 sqlite shell 中,将“Database opened READ ONLY”消息打印到 stderr 而不是 stdout。
- 在 sqlite shell 中,现在在初始启动时打印版本号。
- 将sqlite_version[]字符串常量添加到库中
- 生成文件更新
- 错误修复:针对以下情况生成了不正确的 VDBE 代码:对包含 WHERE 子句的索引表的查询以及 IN 运算符在其右侧具有子查询。
2000-08-18 (1.0.1)
- 修复配置脚本中的错误。
- 对网站进行小幅修改。
2000-08-17 (1.0)
- 更改sqlite程序,使其可以读取没有写入权限的数据库。(如果它不能写,它过去常常拒绝所有访问。)
2000-08-09
- 将回车视为空格。
2000-08-08
- 在“sqlite”命令外壳中为“.table”命令添加了模式匹配。
2000-08-04
- 文档更新
- 向 Tcl 接口添加了“busy”和“timeout”方法
2000-08-03
- 文件格式版本号被多次存储在 sqlite_master.tcl 中。这是无害的,但没有必要。现在已修复。
2000-08-02
- 索引的文件格式略有改变,以解决当存在具有相同键的许多条目的大型索引时 GDBM 有时会出现的低效率问题。 ** 不兼容的更改 **
2000-08-01
- 解析器的堆栈在非常长的 UPDATE 语句上溢出。现在已修复。
2000-07-31
- 完成VDBE 教程。
- 添加了有关编译为 WinNT 的文档。
- 修复 WinNT 的配置程序。
- 修复 HPUX 的配置问题。
2000-07-29
- 结果的列名上有更好的标签。
2000-07-28
- 添加了sqlite_busy_handler() 和sqlite_busy_timeout()接口。
2000-06-23
- 开始编写VDBE 教程。
2000-06-21
- 清理注释和变量名。文档的更改。代码没有功能更改。
2000-06-19
- UPDATE 语句中的列名区分大小写。这个错误现在已经被修复了。
2000-06-18
- 添加了连接字符串运算符 (||)
2000-06-12
- 向 SQL 解释器添加了 fcnt() 函数。fcnt() 函数返回已发生的数据库“获取”操作的数量。此函数旨在用于测试脚本,以验证查询是否高效且经过适当优化。据我所知,Fcnt() 没有其他有用的用途。
- 添加了更多利用新 fcnt() 函数的测试。新测试没有发现任何新问题。
2000-06-08
- 添加了许多新的测试用例
- 修复一些在添加测试用例时发现的错误
- 开始添加大量新文档
2000-06-06
- 添加了复合选择运算符:UNION、UNION ALL、 INTERSECT和EXCEPT
- 添加了对在表达式中使用(SELECT ...)的支持
- 添加了对IN和BETWEEN运算符的支持
- 添加了对GROUP BY和HAVING的支持
- NULL 值现在作为 NULL 指针而不是空字符串报告给回调。
2000-06-03
- 添加了对表列默认值的支持。
- 改进的测试覆盖率。修复了改进测试发现的一些模糊错误。
2000-06-02
- 现在,在对任何文件进行任何更改之前,所有要通过 UPDATE、INSERT 或 DELETE 修改的数据库文件都已锁定。这使得从多个进程同时访问同一个数据库变得安全(我认为)。
- 代码看起来很稳定,所以我们现在称它为“测试版”。
2000-06-01
- 更好地支持文件锁定,以便两个或多个进程(或线程)可以同时访问同一个数据库。不过,这方面还需要做更多的工作。
2000-05-31
- 在 SELECT 语句中添加了对聚合函数(例如:COUNT(*)、MIN(...) )的支持。
- 添加了对SELECT DISTINCT ...
2000-05-30
- 添加了LIKE运算符。
- 添加了一个GLOB运算符:类似于LIKE 但它使用 Unix shell 通配符而不是 SQL 的“%”和“_”通配符。
- 添加了仿照PostgreSQL的COPY命令, 以便 SQLite 现在可以读取 PostgreSQL 的pg_dump数据库转储实用程序的输出。
- 添加了对基础数据库文件调用 gdbm_reorganize()函数的VACUUM命令。
- 还有很多很多错误修复......
2000-05-29
- 首次公开发布 Alpha 代码