SQLite 3.9.2 版 是一个修补版本,修复了两个模糊的错误。(详情:(1),(2))。 只有在遇到问题时才需要升级。
SQLite 3.9.1 版 是对 3.9.0 版 的一个 小补丁,其中包含一些简单的构建脚本和 #ifdef 调整,使代码更容易在更多平台上编译。除了 json1 扩展 中的一个 小错误修复 外,没有功能上的更改,该修复使 json1 扩展符合 RFC7159,不再将换页符(ASCII 0x0c)识别为空格字符。
SQLite 3.9.0 版是一个定期维护版本。主要更改包括
请参阅 变更日志,以获取更完整、更详细的更改列表。
- 开始使用 语义化版本控制。
- JSON SQL 函数
- FTS5 全文搜索引擎
- 支持 表达式索引
- 支持 表值函数
SQLite 3.8.11.1 版是一个修补版本,修复了 3.8.11 发布后不久报告的两个深奥问题。 只有在极少数情况下,其中一个模糊的问题影响到您的代码时,才需要从 3.8.11 升级。
SQLite 3.8.11 版是一个定期维护版本。 请参阅 变更日志 以获取详细信息。
糟糕!在一系列有效的 SQL 语句之后索引损坏!
自从类似于 这个错误 的问题潜入官方 SQLite 版本已经过去了很多年了。但在过去的七个月里(从 3.8.7 版 到 3.8.10.1 版),如果您在精心设计的架构中执行 INSERT 操作,其中有两个嵌套的触发器将索引键值从 TEXT 转换为 INTEGER,然后再转换回 TEXT,则 INTEGER 值可能会插入为索引键而不是正确的 TEXT,导致索引损坏。此修补版本添加了一行代码来修复此问题。
如果您确实遇到了此问题,则在损坏的索引上运行 REINDEX 将会清除它。
3.8.10 版本没有将新的 SQLITE_ENABLE_DBSTAT_VTAB 编译时选项添加到 sqlite3_compileoption_used() 接口中。此修补版本修复了此遗漏。并且,相关的 dbstat 虚拟表 进行了轻微增强,并修复了一个无害的编译器警告。
除非您正在使用新的 SQLITE_ENABLE_DBSTAT_VTAB 编译时选项,否则没有理由从 3.8.10 版本升级。
SQLite 3.8.10 版是一个定期维护版本。此版本具有性能改进、AFL fuzzer 发现的几个深奥错误的修复、新的“sqldiff.exe”命令行实用程序、文档改进以及其他增强功能。 请参阅 发行说明 以获取更多信息。
SQLite 3.8.9 版是一个定期维护版本。此版本的新功能包括 PRAGMA index_xinfo 命令、 sqlite3_status64() 接口以及 命令行 shell 的“.dbinfo”命令。 请参阅 发行说明 以获取更多信息。
3.8.8.3 修补版本修复了 SQLite 代码生成器中的一个模糊问题,该问题可能导致在 LEFT JOIN 的 ON 子句中使用 部分索引 的限定表达式时出现不正确的结果。此问题从 3.8.0 版首次添加对部分索引的支持以来就存在于代码中。但是,很难想象将限定约束放在 LEFT JOIN 的 ON 子句中的有效理由,因此此问题以前从未出现过。
任何易受此错误影响的应用程序都可能已经遇到问题。因此,从以前的版本升级是可选的。
3.8.8.2 修补版本修复了一个次要问题:它确保 sqlite3_wal_checkpoint(TRUNCATE) 操作始终截断 预写日志,即使日志已被重置且不包含新内容。目前尚不清楚这是否是错误修复还是新功能。
类似这样的更改通常会进入下一个定期发布的版本,但一位知名的 SQLite 用户急需此更改,因此我们很乐意通过此修补程序快速发布。
除非您确实需要 sqlite3_wal_checkpoint(TRUNCATE) 的增强行为,否则没有理由升级。
在发布 3.8.8 版后的几个小时内,就 10 个月前的 3.8.4 版报告了一个错误。由于该错误存在于所有后续版本中,因此决定在 3.8.8 广泛使用之前对其发布一个小补丁。
请参阅工单 f97c4637102a3ae72b7911 以了解有关该错误的描述。
3.8.8 版和 3.8.8.1 版之间的更改非常少。
SQLite 3.8.8 版 是 SQLite 的定期维护版本。
此版本中没有重大的新功能或性能增强,只是增量改进。此版本的大部分性能提升来自重构 B 树重新平衡逻辑,以避免不必要的 memcpy() 操作。新功能包括 PRAGMA data_version 语句以及能够接受 VALUES 子句,而对行数没有任意限制。修复了几个模糊的错误,包括一些多线程竞争条件和一些 Mac 上的编译器错误的解决方法。
请参阅 变更日志,以获取更长的增强功能和错误修复列表。
SQLite 3.8.7.4 版 是一个计划外的错误修复版本。与先前版本和 3.8.7 版 的更改非常少。
此版本修复了 3.8.7.3 修补程序的更改所需但意外遗漏的互斥锁。互斥锁不是任何内部 SQLite 测试所必需的,但 Firefox 在没有它的情况下会崩溃。已添加测试用例以确保互斥锁永远不会再次丢失。
SQLite 3.8.7.3 版 是一个计划外的错误修复版本。与先前版本和 3.8.7 版 的更改非常少。
此版本修复了两个可能导致查询结果不正确和/或应用程序崩溃的模糊错误,但(据我们所知)不是安全漏洞。这两个错误在多个先前版本中都潜伏在代码中,并且从未遇到过,因此不太可能导致问题。尽管如此,发布这两个错误的修复程序似乎还是谨慎的做法。请参阅变更日志以获取详细信息。
SQLite 3.8.7.2 版 是一个修补程序和错误修复版本。与先前版本的更改非常少。
此版本的主要原因是增强 ROLLBACK 命令,使其允许在同一数据库连接上继续运行查询,只要 ROLLBACK 不更改架构即可。在 SQLite 的所有先前版本中,ROLLBACK 会导致挂起的查询立即停止并返回 SQLITE_ABORT 或 SQLITE_ABORT_ROLLBACK。如果 ROLLBACK 更改数据库架构,挂起的查询仍会中止,但从此修补版本开始,如果架构未修改,则允许查询继续运行。
除了 ROLLBACK 增强功能外,此修补版本还包含三个模糊错误的修复程序。请参阅 变更日志 以获取详细信息。
SQLite 3.8.7.1 版 是一个错误修复版本。
此错误修复版本的主要原因是解决使用 ALTER TABLE ADD COLUMN 添加的表末尾字段的值更新问题。此问题 1 首次出现在 3.8.7 版本中。
3.8.7 版本中的另一个小问题是 Android 版本尝试使用标准 C 库中的 strchrnul() 函数,但该函数在 Android 上不可用。Android 版本必须添加 -DHAVE_STRCHRNUL=0 来解决此问题。此修补程序修复了此问题,因此 Android 版本现在应该无需任何更改即可工作。
PRAGMA journal_mode=TRUNCATE 的操作已得到增强,以便在 PRAGMA synchronous=FULL 时截断日志文件后调用 fsync()。这有助于在提交后不久发生断电的情况下保持事务持久性。
最后,修复了几个与在视图上运行 UPDATE 和 DELETE 相关的长期存在且模糊的问题。
与 3.8.7 的更改 非常少。
SQLite 3.8.7 版 是一个定期维护版本。建议从所有先前版本升级。
与先前版本的大多数更改都是微优化,旨在帮助 SQLite 运行得更快。每个单独的优化对性能的影响都微不足道。但改进累积起来。在使用 Linux 上的 cachegrind 并使用 gcc 4.8.1 和 -Os 在 x64 linux 上编译的特定工作负载(SQLite 开发人员将其用作典型应用程序工作负载的代理)上进行测量时,与先前版本相比,当前版本在相同数量的 CPU 周期内执行的工作量增加了 20% 以上。Cachegrind 不是真正的 CPU,用于测量的负载只是一个代理。因此,您的性能可能会有所不同。我们预计在实际应用中会看到大约一半的测量和报告的改进。10% 小于 20%,但我们认为仍然相当不错。
此版本包含一组新的 C 语言接口,这些接口具有无符号 64 位而不是有符号 32 位长度参数。新 API 没有提供任何新功能。但它们确实使编写更能抵抗整数溢出漏洞的应用程序变得更容易。
此版本还包含一个新的排序程序,该排序程序能够使用多个线程来帮助处理大型排序操作。(排序操作有时需要实现 ORDER BY 和/或 GROUP BY 子句,并且几乎总是需要创建索引。)多线程排序程序默认情况下处于关闭状态,必须使用 PRAGMA threads SQL 命令启用。请注意,多线程排序程序为大型排序提供了更快的实时性能,但它也使用更多的 CPU 周期和更多的能量。
SQLite 3.8.6 版 是一个定期维护版本。建议从所有先前版本升级。
此版本包含了一些常规的、难以察觉的错误修复。然而,其中一个错误值得特别关注。从CREATE INDEX命令开始,在3.8.2版本(2013-12-06)中出现了一个问题,在某些情况下,允许在非唯一列上创建唯一索引。一旦创建了索引,就不能插入新的非唯一条目,但现有的非唯一条目将保留。有关更多信息,请参阅工单9a6daf340df99ba93c。除了修复此错误外,PRAGMA integrity_check命令也得到了增强,可以检测唯一索引中的非唯一性,因此,如果此错误确实在数据库中引入了任何问题,则可以轻松检测到这些问题。
其他值得注意的更改包括增加了对十六进制整数(例如:0x1234)的支持,以及对IN运算符的性能增强,根据邮件列表报告,这有助于某些查询的运行速度提高五倍。
根据valgrind和test/speedtest1.c测试程序,3.8.6版本比大约一年前的3.8.0版本使用的CPU周期减少了25%。另一方面,3.8.6版本的编译二进制文件比3.8.0版本大约大了5%。大小增加部分是由于添加了新功能,例如WITHOUT ROWID表和公共表表达式。
SQLite 3.8.5版本是一个定期计划的维护版本。建议从先前版本升级。
3.8.5版本修复了十几个难以察觉的错误。这些错误都不应该对现有应用程序造成问题。这些错误也不代表任何安全漏洞。尽管如此,仍建议升级以防止将来出现问题。
除了错误修复外,3.8.5版本还改进了查询计划器,特别是在使用索引进行排序以及处理WITHOUT ROWID表的WHERE子句中的OR项方面。".system"和".once"点命令已添加到命令行界面。并且对FTS4和RTREE虚拟表进行了增强。有关详细信息,请参阅更改日志。
3.8.4版本中添加的优化导致某些涉及FROM子句、DISTINCT和ORDER BY子句中子查询的查询产生错误的结果。有关详细信息,请参阅工单98825a79ce145。此版本对一行代码进行了一个字符更改来修复此问题。
3.8.4版本中导致性能改进的代码更改遗漏了一个缓冲区溢出测试,这可能导致在搜索以特定方式损坏的数据库时读取缓冲区的末尾。 3.8.4.2版本使用一行补丁修复了该问题。
我们不知道3.8.4版本在处理格式良好的数据库文件时是否存在任何问题。此版本修复的问题仅在读取损坏的数据库文件时才会出现。
SQLite 3.8.4.1版本是对3.8.4版本的修补程序,修复了两个小问题
这两个问题都在标记上一个版本后几分钟内被发现。这两个问题都不严重,但可能会令人烦恼。因此,决定进行快速补丁版本以解决这两个问题。
- 解决C预处理器宏冲突,该冲突会导致某些Visual Studio配置的编译问题。
- 调整跳过扫描优化的成本计算以提高性能。
SQLite 3.8.4版本是一个维护版本,包含性能增强功能以及许多难以察觉的错误修复。SQLite 3.8.4版本没有重大新功能。但是,执行许多常见操作所需的CPU周期(由valgrind测量)与上一个版本相比减少了约12%,与大约一年前的3.7.16版本相比减少了约25%。
SQLite 3.8.4版本修复了自上一个版本发布以来发现的几个极端情况下的错误。这些错误在实践中不太可能出现,并且没有一个代表安全漏洞。尽管如此,仍然鼓励开发人员从所有先前版本升级。
SQLite 3.8.3.1版本修复了3.8.1、3.8.2和3.8.3版本中存在的一个错误,该错误可能导致查询省略有效的输出行。建议从这些版本升级。
仅当SQLite使用SQLITE_ENABLE_STAT3或SQLITE_ENABLE_STAT4编译时选项进行编译时才会出现此问题。在这种情况下,如果查询的WHERE子句包含以下表达式
WHERE (expr1 OR expr2 OR ... OR exprN) AND column IS NOT NULL其中expr1到exprN都适合索引使用,那么在查询计划期间,SQLite可能会错误地将“column IS NOT NULL”项转换为“column>NULL”。但后一个项永远为假,因此查询将不返回任何行。此错误的工单为[4c86b126f2]。建议所有用户升级以避免此问题。
SQLite 3.8.3版本是一个定期计划的维护版本。从先前版本升级是可选的。
3.8.3版本中最明显的更改是增加了对公共表表达式的支持。现在可以使用单个SELECT语句查询树或图,使用深度优先搜索或广度优先搜索。单个SQLite查询甚至可以解决数独难题或计算曼德勃罗集。作为此更改的一部分,SQLite现在接受VALUES子句,在任何SELECT语句有效的位置。
此版本还包含许多小的性能增强功能,这些功能应该会略微提高旧版应用程序的速度。还有一些其他小的增强功能,例如添加了printf() SQL函数。有关详细信息,请参阅更改日志。
SQLite 3.8.2版本是一个定期计划的维护版本。从先前版本升级是可选的。
3.8.2版本增加了对WITHOUT ROWID表的支持。这是SQLite的一个重大扩展。包含WITHOUT ROWID表的数据库文件无法被先前版本的SQLite读取或写入,但是不使用WITHOUT ROWID表的数据库完全向后和向前兼容。
3.8.2版本包含一个可能不兼容的更改。在所有先前版本的SQLite中,从非常大的正浮点数到整数的强制转换会导致最小的负整数。换句话说,CAST(+99.9e99 to INT)将产生-9223372036854775808。这种行为出现是因为它是x86/x64硬件对C语言中等效强制转换所执行的操作。但这种行为很奇怪。因此,从本版本开始,它已更改,以便从浮点数到整数的强制转换返回浮点值与零之间最接近浮点值的整数。因此,CAST(+99.9e99 to INT)现在返回+9223372036854775807。由于像sqlite3_column_int64()这样的例程如果正在访问的值实际上是浮点数,则会执行隐式强制转换,因此它们也会受到此更改的影响。
除了上面提到的两个更改外,3.8.2版本还包含许多性能增强功能。跳过扫描优化现在可用于已由ANALYZE处理的数据库。常量SQL函数现在已从内部循环中分解出来,这可以大大加快包含像“date>datetime('now','-2 days')”这样的WHERE子句项的查询的速度。并且各种高运行内部例程已重构以减少CPU负载。
SQLite 3.8.1版本是一个定期计划的维护版本。从先前版本升级是可选的,但是如果您正在使用部分索引,则应该升级,因为先前版本中存在一个与部分索引相关的错误,该错误可能导致count(*)查询的结果不正确。
在上一个版本中首次推出的下一代查询计划器继续运行良好。新的查询计划器在本版本中进行了轻微调整,以帮助它在某些情况下做出更好的决策,但基本上保持不变。添加了两个新的SQL函数likelihood()和unlikely(),以允许开发人员向查询计划器提供提示,而无需强制查询计划器做出特定决策。
3.8.1版本是第一个在选择查询计划时考虑表和索引行估计大小的SQLite版本。行大小估计基于列的声明数据类型。例如,类型为VARCHAR(1000)的列被认为比类型为INT的列使用更多的空间。可以通过将表单“sz=NNN”(其中NNN是以字节为单位的平均行大小)的项附加到表的sqlite_stat1.stat记录的末尾来覆盖基于数据类型的行大小估计或索引。目前,行大小仅用于帮助查询计划器在执行表扫描或count(*)操作时在表或其索引之一之间进行选择,尽管未来的版本可能会在其他上下文中使用估计的行大小。新的PRAGMA stats语句可用于查看行大小估计。
3.8.1版本添加了SQLITE_ENABLE_STAT4编译时选项。STAT4与STAT3非常相似,因为它使用索引中的样本尝试猜测索引中有多少行将满足WHERE子句约束。不同之处在于STAT4对索引的所有列进行采样,而旧的STAT3仅对最左边的列进行采样。鼓励STAT3的用户升级到STAT4。应用程序开发人员应谨慎使用STAT3和STAT4,因为这两个选项都违反了查询计划器稳定性保证,这使得更难确保广泛部署的大规模生产嵌入式应用程序的性能一致性。
SQLite 3.8.0.2版本包含对尝试从查询中省略未使用的LEFT JOIN的新优化中的错误进行的一行修复。
SQLite 3.8.0.1版本修复了3.8.0版本中用户发现的一些难以察觉的错误。与3.8.0版本的更改很少。
不要害怕零!
SQLite 3.8.0 版本 本可以轻松地命名为“3.7.18”。但是,此版本包含了 新一代查询计划器 或 NGQP 的切换,并且存在少量可能性会导致 破坏依赖于先前 SQLite 版本中未定义行为的旧版程序,因此出于这个原因,次版本号已递增。但风险很低,并且提供了一个 查询计划器检查清单 供应用程序开发人员使用,以帮助避免问题。
SQLite 3.8.0 版本 实际上是 SQLite 有史以来测试最充分的版本之一。数千个测试版副本已被下载,并且大概进行了测试,并且没有收到任何问题报告。
除了 新一代查询计划器 之外,3.8.0 版本还增加了对 部分索引 的支持,以及其他几个新功能。请参阅 更改日志 以获取更多详细信息。
SQLite 3.7.17 版本 是一个定期计划的维护版本。请访问 更改日志 以全面了解此版本中的更改。3.7.17 版本中修复了许多错误。但这并不表示 3.7.16 版本存在问题。3.7.17 版本中的所有错误都比较模糊,不太可能影响任何特定应用程序。并且,3.7.17 版本中修复的大多数错误早于 3.7.16 版本,并且已存在于代码中数年而未被发现。尽管如此,由于修复的数量众多,建议所有用户在可能的情况下进行升级。
SQLite 3.7.16.2 版本 修复了 Windows 操作系统接口中一个长期存在的缺陷,该缺陷在罕见的竞争条件下可能导致数据库损坏。请参阅 https://www.sqlite.org/src/info/7ff3120e4f 以全面了解此问题。据我们所知,此错误从未在实际环境中出现过。SQLite 开发人员在为 SQLite 的另一个组件编写压力测试时发现了此问题。这些压力测试尚未发现其旨在验证的组件存在任何问题,但确实发现了此补丁版本中所解决的错误。
除了版本号更新外,此版本与 3.7.16.1 版本之间的唯一区别是在单个标识符中进行了两个字符的更改,该标识符包含在特定于 Windows 的操作系统接口逻辑中。此版本中(版本号除外)对 Windows 以外的平台没有任何更改。
SQLite 3.7.16.1 版本 是一个错误修复版本,修复了先前版本中存在的一些问题。3.7.16.1 版本的主要动机是修复查询优化器中的一个错误,该错误作为 3.7.15 版本 的一部分引入。查询优化器在优化某些 ORDER BY 子句时过于积极,这导致在需要排序才能获得正确答案的情况下偶尔省略排序。请参阅工单 a179fe7465 以获取详细信息。
除了 ORDER BY 修复之外,此版本还包含其他一些补丁,用于修复模糊(且大部分无害)的错误以及修复源代码注释中的拼写错误。
SQLite 3.7.16 版本 是 SQLite 的定期计划版本。此版本包含一些语言增强功能以及对查询优化器的改进。可以在 更改日志 上查看主要增强功能和优化的列表。有一个重要的错误修复(请参阅 工单 fc7bd6358f),该修复解决了在三路连接中可能发生的错误查询结果,其中连接约束将 INTEGER 列与 TEXT 列进行比较。此问题已存在于代码中很长时间,并且从未被报告过,因此我们推测它非常模糊。尽管如此,建议所有用户进行升级以避免将来与此问题相关的任何问题。
SQLite 3.7.15.2 版本 是一个补丁版本,修复了 3.7.15 版本 中引入的一个错误。此修复是对一行代码进行了 4 个字符的编辑。除了此 4 个字符的更改和版本号的更新外,与 3.7.15.1 版本 相比没有任何更改。
SQLite 3.7.15.1 版本 是一个补丁版本,修复了 3.7.15 版本 中引入的一个错误。此修复涉及更改两行代码并添加一个断言。此版本还包含一些新的测试用例以防止错误的回归,当然版本号也已增加。但除此之外,与 3.7.15 版本 相比没有任何更改。
SQLite 3.7.15 版本 是 SQLite 的定期计划版本。此版本包含对查询计划器和优化器的一些改进以及一个重要的错误修复。这是第一个正式支持 Windows 8 Phone 的版本。重要的错误修复是一个问题,该问题在使用 共享缓存模式 在包含 COLLATE 运算符 的架构中时会导致段错误,该运算符位于 CHECK 约束 或 视图 中。排序函数与各个数据库连接相关联。但是,指向排序函数的指针也缓存在表达式中。如果表达式是架构的一部分并包含缓存的排序函数,则它将指向最初解析架构的数据库连接中的排序函数。如果该数据库连接在继续使用相同共享缓存的其他数据库连接关闭时关闭,则其他数据库连接将尝试使用已释放的数据库连接中的排序函数。3.7.15 版本中的修复是不缓存表达式结构中的排序函数指针,而是每次准备新语句时都查找它们。
此版本还包含对查询计划器的一些重要增强功能,这些增强功能(我们希望)可以使某些查询运行得更快。增强功能包括
SQLite 3.7.14.1 版本 是一个补丁版本。与基线版本 3.7.14 的更改最少,并且仅限于修复三个错误。其中一个已修复的错误是 TCL 接口中长期存在的问题。另一个是 SQLite 仅仅规避的外部编译器错误,如果您使用 VisualStudio-2012 编译器在启用了优化的 ARM 上生成 WinRT 应用程序,则只会出现此错误。第三个问题是 SQLite 核心错误,它是在 3.7.14 版本中引入的,如果查询包含在 ON 子句中包含 OR 的 LEFT JOIN,则可能会导致段错误。
SQLite 3.7.14 版本 是 SQLite 的定期计划维护版本。先前版本继续运行良好。升级是可选的。3.7.14 版本放弃了对 OS/2 的原生支持。我们不知道有任何正在 OS/2 上使用 SQLite 的活动项目,并且由于 SQLite 开发人员无法在 OS/2 上进行测试,因此似乎是时候从 SQLite 树中删除 OS/2 代码了。如果存在仍然需要 SQLite 支持的 OS/2 项目,他们可以继续维护自己的私有 VFS,该 VFS 可以使用 sqlite3_vfs_register() 接口在启动时链接到 SQLite。
已添加 sqlite3_close_v2() 接口。sqlite3_close_v2() 接口与 sqlite3_close() 接口的不同之处在于,它旨在更好地适用于使用垃圾回收器的宿主语言。对于旧的 sqlite3_close() 接口,必须在数据库连接之前销毁关联的 预处理语句 和 sqlite3_backup 对象。对于较新的 sqlite3_close_v2() 接口,可以按任意顺序销毁这些对象。
此版本还包含对用于实现 ORDER BY 和 CREATE INDEX 的排序算法的性能改进。并且查询计划器已得到增强,可以更好地在 WHERE 子句中使用 OR 项的查询中使用覆盖索引。
SQLite 3.7.13 版本 添加了对 Microsoft Windows 8 的 WinRT 和 Metro 风格应用程序的支持。3.7.13 版本的发布比通常在先前版本发布后的时间要早,以便将此新功能提供给开发人员。要在 Metro 风格应用程序中使用 SQLite,请使用 -DSQLITE_OS_WINRT 标志进行编译。由于 WinRT 提高了应用程序的安全性和安全性要求,因此所有数据库文件名都应为完整路径名。请注意,SQLite 无法访问安装目录和应用程序数据目录之外的数据库。此限制是 WinRT 的另一个安全性和安全功能。除了这些限制之外,SQLite 在 WinRT 上的工作方式应该与在其他任何系统上完全相同。此版本中还包括:当使用 URI 文件名 打开数据库并且 mode=memory 查询参数时,数据库将成为内存数据库,就像它的名称为“:memory:”一样。但是,如果启用了共享缓存模式,则指定相同 URI 文件名的所有其他数据库连接都将连接到相同的内存数据库。这允许两个或多个数据库连接(在同一进程中)共享相同的内存数据库。
此版本还包含一些模糊但对 SQLite 用户的重要子集而言很重要的极端情况性能优化。快速发布这些性能优化是使此版本在先前版本之后如此快发布的另一个原因。
SQLite 的下一个版本计划在通常的 2 或 3 个月间隔后发布。
SQLite 3.7.12.1 版本 是 3.7.12 版本 的补丁版本,修复了 错误,该错误是在 3.7.12 版本中引入的,并且可能会导致某些模糊的嵌套聚合查询出现段错误。3.7.12.1 版本中的更改很少,仅当应用程序执行嵌套聚合查询时才需要升级。
SQLite 3.7.12 版本 是定期计划的维护版本。此版本包含一些新的优化和错误修复,建议升级。请参阅 更改摘要 以获取详细信息。
SQLite 3.7.11 版本 是一个定期维护版本,由于之前版本中引入的查询优化器错误而提前发布。此错误比较隐蔽——在某些情况下,当存在三路连接并在 WHERE 子句中存在 OR 条件时,它会将 LEFT JOIN 转换为 INNER JOIN。但它被认为足够严重,需要紧急修复。除了这个问题之外,SQLite 3.7.10 版本 没有出现任何问题。从 3.7.6.3、3.7.7、3.7.7.1、3.7.8 或 3.7.9 版本升级到 3.7.11 版本 是可选的。建议从其他版本(包括之前版本 3.7.10)升级。此版本中的其他增强功能在 更改日志 中列出。
SQLite 3.7.10 版本 是一个定期维护版本。从 3.7.6.3、3.7.7、3.7.7.1、3.7.8 或 3.7.9 版本升级是可选的。建议从其他版本升级。SQLITE_CONFIG_PCACHE 机制已被 SQLITE_CONFIG_PCACHE2 替换。如果您不知道此机制是什么(它是一个极端的情况,很少使用),那么此更改不会对您有任何影响。
新数据库文件的默认 模式格式编号 已从 1 更改为 4。SQLite 已经能够生成和读取使用模式格式 4 的数据库文件六年了。但直到现在,默认模式格式一直是 1,以便旧版本的 SQLite 可以读取和写入新版本 SQLite 生成的数据库。但是,这些旧版本的 SQLite 现在已经变得非常稀少了,因此将新格式设置为默认格式似乎是合理的。
SQLite 正在更改其在突然断电期间对磁盘驱动器和闪存设备行为的一些假设。此更改对应用程序完全透明。阅读有关 断电安全覆盖 属性以获取更多信息。
此版本中添加了许多新的接口
- sqlite3_db_release_memory()
- PRAGMA shrink_memory
- sqlite3_db_filename()
- sqlite3_stmt_busy()
- sqlite3_uri_boolean()
- sqlite3_uri_int64()
PRAGMA cache_size 语句得到了增强。以前,您使用此语句来告诉 SQLite 它应该一次将其缓存中保存多少个数据库文件页面。总内存需求将取决于数据库页面大小。现在,如果您为 PRAGMA cache_size 提供一个负值 -N,它将分配大约 N 千字节 的内存用于缓存,并根据页面大小进行划分。此增强功能允许程序更轻松地控制其内存使用情况。
有一些模糊的错误修复。一个值得注意的错误,工单 ff5be73dee,理论上可能会导致数据库文件损坏,如果在异常暴躁的磁盘驱动器上恰好在错误的时刻发生断电。但这主要是一个理论上的问题,在实践中极不可能发生。该错误是在实验室测试中发现的,从未在实际环境中观察到发生过。
SQLite 3.7.9 版本 是一个定期维护版本。从 3.7.6.3、3.7.7、3.7.7.1 和 3.7.8 版本升级是可选的。建议从其他版本升级。SQLITE_ENABLE_STAT2 编译时选项现在是一个无操作选项。以前使用 SQLITE_ENABLE_STAT2 可用的增强查询规划器功能现在可通过 SQLITE_ENABLE_STAT3 获得。增强的查询规划默认情况下仍然处于禁用状态。但是,SQLite 的未来版本可能会将 STAT3 从启用选项转换为禁用选项,以便它默认可用,并且仅在请求时才会省略。
FTS4 全文搜索引擎得到了增强,以便搜索字符串中以“^”开头的标记必须是它们各自列中的第一个标记才能匹配。以前,搜索字符串中的“^”字符被简单地忽略。因此,如果遗留应用程序在 FTS4 搜索字符串中包含“^”字符,认为它们将始终被忽略,那么这些遗留应用程序可能会在此更新后中断。修复方法是简单地从搜索字符串中删除“^”字符。
有关与此版本相关的其他更改,请参阅 更改摘要。
SQLite 3.7.8 版本 是一个季度维护版本。从 3.7.6.3、3.7.7 或 3.7.7.1 版本升级是可选的。建议从其他版本升级。此版本提供了一种新的“外部合并排序”算法,用于实现 ORDER BY 和 GROUP BY,以及预排序索引内容以用于 CREATE INDEX。新算法执行的比较和 I/O 次数与之前大致相同,但 I/O 更具顺序性,因此当要排序的集合的大小大于文件系统缓存时,运行时间大大减少。性能改进可能非常显著——对于大型 CREATE INDEX 命令,速度提高了几个数量级。另一方面,对于小型 CREATE INDEX,代码速度略有下降(1% 或 2%)。由于 CREATE INDEX 不是通常在速度关键路径上发生的运算,因此我们认为这种权衡是好的。小型 CREATE INDEX 语句的轻微速度下降可能会在将来的版本中恢复。ORDER BY 和 GROUP BY 操作现在应该在所有情况下(大和小)都更快。
查询规划器得到了增强,可以更好地处理 SELECT 语句上的 DISTINCT 关键字。
默认 VFS 方面做了很多工作。Unix VFS 已得到增强,包含更多可覆盖的系统调用——Chromium 请求的功能,以便于将 SQLite 构建到沙箱中。Windows VFS 已得到增强,使其更能抵御防病毒软件的干扰。
每个版本的 SQLite 测试都比前一个版本更好,3.7.8 也不例外。3.7.8 版本已被 SQLite 团队用于关键任务功能,并且运行完美。当然,它也通过了我们严格的 测试 程序,没有发现任何问题。建议所有新开发都使用 3.7.8 版本。
SQLite 3.7.7.1 版本 为 3.7.7 添加了一个单行错误修复,以修复 一个问题,该问题导致使用旧版 sqlite3_prepare() 接口编译的 PRAGMA case_sensitive_like 语句失败并出现 SQLITE_SCHEMA 错误。因为 sqlite3_exec() 在内部使用 sqlite3_prepare(),所以此问题也会影响 sqlite3_exec()。仅当应用程序使用“PRAGMA case_sensitive_like”和 sqlite3_prepare()(或 sqlite3_exec())接口时,才需要从 3.7.7 升级。
SQLite 3.7.7 版本 是一个定期双月维护版本。从 3.7.6.3 版本升级是可选的。建议从所有先前版本升级。此版本添加了对使用 URI 文件名 命名数据库文件的功能的支持。URI 文件名默认情况下处于禁用状态(为了向后兼容),但鼓励应用程序启用它们,因为不兼容性极不可能出现,并且此功能很有用。有关详细信息,请参阅 URI 文件名文档。
此版本中的大多数其他增强功能都涉及 虚拟表。虚拟表接口得到了增强,以支持 SAVEPOINT 和 ON CONFLICT 子句处理,并且内置的 RTREE 和 FTS3/FTS4 已得到增强以利用此新功能。这意味着,例如,现在可以在 FTS3/FTS4 和 RTREE 表上使用 REPLACE 命令。
FTS4 全文索引扩展已得到增强,以支持 FTS4 前缀选项 和 FTS4 顺序选项。提供这两个增强功能是为了支持边输入边搜索的界面,其中搜索结果在“搜索”框中输入第一个键击后开始出现,并在每次后续键击时进行细化。实现方法是在每次按键后执行单独的全文搜索,并在当前键入的单词末尾添加“*”通配符。因此,例如,如果到目前为止键入的文本是“fast da”,并且接下来键入的字符是“t”,则应用程序对模式“fast dat*”执行全文搜索并显示结果。此功能一直存在。新功能是 FTS4 前缀选项 允许搜索非常快(几毫秒),即使对于“t*”或“th*”等困难情况也是如此。
在此版本中,FTS4 模块进行了大量工作。但是核心 SQLite 代码变化很小,并且之前的版本没有出现任何问题,因此我们预计这将是一个非常稳定的版本。
SQLite 3.7.6.3 版本 是一个修补程序版本,修复了与 WAL 模式 相关的 单个错误。自添加 WAL 以来,SQLite 中一直存在此错误,但此问题非常隐蔽,因此之前没有人注意到。尽管如此,仍鼓励所有用户升级到 3.7.6.3 或更高版本。错误如下:如果 cache_size 设置得很小(小于 10),并且 SQLite 遇到内存压力,如果启动了一个多语句事务,其中 COMMIT 之前的最后一个语句是 SELECT 语句,并且如果在事务提交后立即发生 检查点,则可能会发生事务会静默回滚而不是提交。
cache_size 的默认设置为 2000。因此,在大多数情况下,此错误永远不会出现。但有时程序员会在小工具和其他低内存设备上将 cache_size 设置为非常小的值以节省内存空间。此类应用程序容易受到影响。请注意,此错误不会导致数据库损坏。在某些情况下,它就像运行了 ROLLBACK 而不是 COMMIT 一样。
错误详情
事务在 WAL 模式下提交,方法是在 WAL(预写日志)的末尾添加一条包含“提交”标志的记录。因此,要提交事务,SQLite 会获取在该事务期间更改的所有页面,并将它们追加到 WAL,并在最后一个页面上设置提交标志。现在,如果 SQLite 遇到内存压力,它可能会尝试通过在提交之前将更改的页面写入 WAL 来释放内存空间。我们称之为将缓存“溢出”到 WAL。将缓存溢出到 WAL 并没有什么错。但是,如果内存压力很大,则到运行COMMIT时,事务的所有更改页面可能已经溢出到 WAL,并且没有页面剩余可以写入 WAL。如果没有未写入的页面,则无法在上面设置提交标志。如果没有提交标志,则事务最终会被回滚。
解决此问题的方法是,如果在开始提交时所有更改的页面都已写入 WAL,则数据库的第 1 页将再次写入 WAL,以便始终有一个可用的页面来设置提交标志。
SQLite 版本 3.7.6.2 对 3.7.6.1 进行了一行代码的错误修复,使 pthreads 能够在 NetBSD 上正常工作。问题在于 open 系统调用的函数签名有误。此问题似乎不会对除 NetBSD 之外的任何其他系统产生任何不利影响。仅在 NetBSD 上需要从版本 3.7.6.1 升级。
SQLite 版本 3.7.6.1 修复了 3.7.6 中的一个错误,该错误可能导致在 Unix 构建上使用SQLITE_FCNTL_SIZE_HINT且 SQLITE_ENABLE_LOCKING_MODE 设置为 0 并使用 HAVE_POSIX_FALLOCATE 编译时出现段错误。仅受上述特定于配置的错误影响的用户才需要从 3.7.6 升级。代码没有其他更改。
SQLite 版本 3.7.6 是 SQLite 定期安排的双月维护版本。从版本 3.7.5 升级是可选的。建议升级 3.7.5 之前的版本。
SQLite 版本 3.7.5 是 SQLite 定期安排的双月维护版本。由于发现了可能导致数据库损坏的一个模糊的错误并进行了修复,因此建议从 SQLite 的所有先前版本升级。此错误是在代码审查期间发现的,并且在实际环境中尚未观察到。此版本为sqlite3_db_status() 接口添加了新的操作码,以便更精确地衡量备用内存分配器 的执行情况,这对于在内存限制非常严格的应用程序中进行调整很有用。
添加了sqlite3_vsnprintf() 接口。此例程只是长期存在的sqlite3_snprintf() 接口的可变参数版本。
已增强sqlite3_trace() 接口的输出,使其在使用递归扩展(如FTS3 或RTREE)的系统中运行得更好(更快)。
使用 Valgrind 进行的测试表明,此版本的 SQLite 在大多数操作中比先前版本快约 1% 或 2%。
现在可以在http://System.Data.SQLite.org/ 上获得名为 System.Data.SQLite 的流行 SQLite ADO.NET 适配器的分支。System.Data.SQLite 的创建者 Robert Simpson 了解此分支,并表示赞同,并且在新的 Fossil 存储库中拥有提交权限。SQLite 开发团队打算在未来维护 System.Data.SQLite。
SQLite 版本 3.7.4 是 SQLite 定期安排的双月维护版本。从版本 3.7.2 和版本 3.7.3 升级是可选的。建议从所有其他 SQLite 版本升级。此版本具有全文搜索增强功能。旧的FTS3 虚拟表仍然完全受支持,并且应该运行得更快。此外,添加了新的FTS4 虚拟表。FTS4 遵循与 FTS3 相同的语法,但保存了其他元数据,这有助于提高某些性能并提供更高级的matchinfo() 输出。在后续版本中寻找更多全文搜索增强功能。
此外,在此版本中,已增强EXPLAIN QUERY PLAN 输出并提供了新的文档,以便应用程序开发人员可以更轻松地了解 SQLite 如何执行其查询。
感谢来自http://www.devio.us/ 的人员的帐户,OpenBSD 已添加到我们在每次发布之前测试 SQLite 的平台列表中。该平台列表现在包括
- Linux x86 & x86_64
- MacOS 10.5 & 10.6
- MacOS 10.2 PowerPC
- WinXP 和 Win7
- Android 2.2
- OpenBSD 4.7
SQLite 的先前版本(版本 3.7.3)已被证明非常健壮。发现的唯一严重问题是工单 80ba201079,该工单描述了在非常不寻常的情况下可能发生的错误查询结果。工单描述包含问题的详细信息。在此处只需说问题非常模糊,不太可能影响大多数应用程序,因此升级是可选的。当然,此版本已修复了此问题。
SQLite 版本 3.7.3 是 SQLite 定期安排的双月维护版本。从版本 3.7.2 升级是可选的。建议从所有其他版本升级。此版本添加了两个新接口(实际上只是现有接口的变体)。sqlite3_create_function_v2() 接口为应用程序数据指针添加了析构函数。新的sqlite3_soft_heap_limit64() 接口允许将软堆限制设置为大于 231 的值。
RTREE 扩展已增强,可以具有应用程序定义的查询区域。例如,这可用于查找摄像头视野内的所有对象。
3.7.3 版本还包含一些性能增强功能,包括查询计划程序改进、文档更新以及一些非常模糊的错误修复。
SQLite 版本 3.7.2 修复了一个长期存在的错误,该错误可能导致数据库空闲页面列表 损坏,如果多次使用incremental_vacuum 来部分减小包含数百个未使用的数据库页面的数据库文件的大小。原始的错误报告以及修复它的补丁链接可以在此处查看。此错误至少存在一年,甚至可能更久。此错误与版本 3.7.1 或 3.7.0 或任何其他最近版本无关。错误是在 3.7.1 版本发布后几小时内发现(并修复)的事实纯粹是巧合。
如果不使用incremental_vacuum,则不可能遇到此错误,即使使用 incremental_vacuum 也非常难以遇到。并且此错误导致的损坏类型通常可以通过简单地运行VACUUM 来修复。但是,由于此错误可能导致数据库损坏,因此建议所有 SQLite 用户升级到版本 3.7.2 或更高版本。
SQLite 版本 3.7.1 是 3.7.x 系列的稳定版本。除了在版本 3.7.0.1 中修复的文件大小在标题中的错误之外,在 3.7.0 中没有发现任何主要问题。已修复了一些次要的极端情况下的性能回归。已修复了 OS/2 接口中的错别字。3.7.1 版本的最大一部分是对 SQLite 中分页器模块的清理和重构。此重构不应产生任何应用程序可见的影响。目的是以更易于证明正确性的方式重新组织代码。
3.7.1 版本添加了用于获取更详细的内存使用信息和控制数据库文件碎片的新实验方法。并且查询计划程序现在可以更好地优化LIKE 和GLOB 运算符。
此版本将数据库页面的最大大小从 32KiB 增加到 64KiB。具有 64KiB 页面的数据库将无法被旧版本的 SQLite 读取或写入。请注意,页面大小的进一步增加是不可行的,因为文件格式 使用 16 位偏移量指向每个页面内的结构。
SQLite 版本 3.7.0.1 是一个补丁版本,用于修复SQLite 文件格式 的新文件大小在标题中的功能中的错误,如果使用版本 3.7.0 和版本 3.6.23.1 或更早版本交替写入同一个数据库文件,则可能会导致数据库损坏。此版本还修复了性能回归。
SQLite 版本 3.7.0 是 SQLite 的一个主要版本,它具有使用预写日志 或WAL 的新的事务控制机制。传统的回滚日志仍用作默认值,因此对于旧版程序应该没有可见的变化。但是,较新的程序可以通过启用 WAL 日志记录模式来利用改进的性能和并发性。SQLite 版本 3.7.0 还包含一些查询计划程序增强功能和一些模糊的错误修复,但唯一真正重大的变化是添加了 WAL 模式。
SQLite 版本 3.6.23.1 是一个补丁版本,用于根据 Mozilla 的请求修复FTS3 中 offsets() 函数的错误。
SQLite 版本 3.6.23 是 SQLite 的定期双月版本。从先前版本升级纯粹是可选的。此版本包含新的 pragma:secure_delete pragma 和compile_options pragma。有新的 SQL 函数:sqlite_compileoption_used() 和sqlite_compileoption_get()。新的 C/C++ 接口:sqlite3_compileoption_used()、sqlite3_compileoption_get()、SQLITE_CONFIG_LOG 和sqlite3_log()。
此版本还包含一些次要的错误修复和性能改进。对SQLITE_OMIT_FLOATING_POINT 的支持得到了增强。FTS3 正在不断改进。
已删除命令行界面 中的“.genfkey”命令。SQLite 自版本 3.6.19 以来一直支持标准 SQL外键约束,因此“.genfkey”命令被视为过时。
SQLite 版本 3.6.22 是一个错误修复版本。已修复了两个可能导致查询结果错误的错误。这两个错误都很模糊,但由于它们可能在应用程序部署后出现,因此建议所有应用程序将 SQLite 升级到版本 3.6.22。
- 工单31338dca7e 描述了具有以下形式的 WHERE 子句的查询存在的问题:(x AND y) OR z,其中 x 和 z 来自联接的一个表,而 y 来自另一个表。
- 工单eb5548a849 描述了一个问题,即如果在 WHERE 子句中将列转换为新数据类型,并且在同一 WHERE 子句中未进行转换也使用了该列,则使用 CAST 运算符可能会导致结果错误。
此版本还包含其他次要的错误修复和性能增强功能,尤其是在FTS3 扩展中。
SQLite 3.6.21 版本 主要关注性能优化。对于某些特定的跟踪,此版本使用的 CPU 指令比上一个版本减少了 12%(通过 Valgrind 测量)。此外,FTS3 扩展已经过大量的清理和重构,并且 sqlite3_trace() 接口已修改为在其输出中插入 绑定参数 值。
SQLite 3.6.20 版本 是一个常规维护版本。查询计划器得到了增强,可以更好地处理 LIKE 和 GLOB 运算符以及范围约束中的绑定参数,并且修复了各种小错误。从 3.6.19 升级是可选的。
SQLite 3.6.19 版本 添加了对 外键约束 的原生支持,包括延迟约束和级联删除。为了向后兼容,默认情况下禁用外键的强制执行,必须使用 foreign_keys pragma 来启用。3.6.19 版本还添加了对 IS 和 IS NOT 运算符 的支持。以前,SQLite(与大多数其他 SQL 数据库引擎一样)支持 IS NULL 和 IS NOT NULL。IS 和 IS NOT 运算符是允许右侧为任意表达式的泛化。IS 和 IS NOT 的工作方式与 ==(等于)和 !=(不等于)相同,不同之处在于,对于 IS 和 IS NOT,NULL 值彼此相等。
从本版本开始,SQLite 源代码使用 Fossil 分布式配置管理系统进行跟踪和管理。SQLite 以前使用 CVS 进行版本控制。整个 CVS 历史记录已导入到 Fossil 中。旧的 CVS 存储库仍然保留在网站上,但为只读状态。SQLite 3.6.18 版本有两个主要增强功能。第一个是对查询计划器进行了一系列改进,帮助 SQLite 为连接选择更好的计划,而过去它选择的是次优的查询计划。SQLITE_ENABLE_STAT2 编译时选项已添加,以便在运行 ANALYZE 命令时,SQLite 收集索引上的直方图数据。使用直方图可以进一步提高查询计划性能。
第二个主要增强功能是 SQLite 现在支持递归触发器。触发器的旧版非递归行为仍然是默认行为。递归触发器使用 recursive_triggers pragma 激活。除了允许触发器自身调用(直接或间接)之外,新功能还会在由于 REPLACE 冲突解决处理而从表中删除的行上触发 DELETE 触发器。
非递归触发器仍然是默认行为,因为这最不可能导致现有应用程序出现问题。但是,我们预计从 3.7.0 版本开始,触发器将默认变为递归。届时,希望继续使用旧版非递归触发器行为的应用程序将需要使用 recursive_triggers pragma 来禁用递归触发器。
此版本的 SQLite 还包含错误修复,尽管没有一个错误是严重的,并且所有错误都很模糊,因此升级是可选的。
SQLite 核心继续保持 100% 的分支测试覆盖率,因此尽管此版本中进行了许多更改,但开发人员认为此版本的 SQLite 稳定且已准备好投入生产使用。
这是一个每月维护版本,重点关注错误修复、性能改进和测试覆盖率的提高。这是自 SQLite 核心实现 100% 的分支测试覆盖率 以来 SQLite 的第一个版本。此外,还提供了一个新的接口 sqlite3_strnicmp(),以方便扩展编写者使用。
此版本中修复的错误都不严重。所有错误都很模糊。升级是可选的。
通过 gcov 测量 TH3 测试套件的一个子集,以提供 100% 的分支测试覆盖率,覆盖 SQLite 核心(不包括 VFS 后端和 FTS3 和 RTREE 等扩展),在 x86 上的 SuSE 10.1 Linux 上编译。SQLite 开发人员承诺在所有将来的版本中保持 100% 的分支测试覆盖率。正在进行的工作将努力在操作系统后端和扩展上实现 100% 的分支测试覆盖率。
SQLite 3.6.16 版本 是另一个常规维护版本,包含性能和鲁棒性增强功能。修复了一个明显的错误(工单 #3929)。此错误可能导致在具有修改同一表和索引的 AFTER 触发器的索引表上 INSERT 或 UPDATE 语句失败。
SQLite 3.6.15 版本 是一个常规维护版本,包含性能和鲁棒性增强功能,以及对各种模糊错误的修复。
SQLite 3.6.14.2 版本 修复了 SQLite 代码生成器(工单 #3879)部分中的一个模糊错误,该错误可能导致查询结果不正确。先前版本的更改仅包含此错误修复、检入 [6676] 和版本号文本的更改。此错误是在 3.6.14 版本中引入的。建议 3.6.14 和 3.6.14.1 版本的用户升级到此版本。应用程序不太可能遇到此错误,但由于很难预测哪些应用程序可能会遇到,哪些应用程序可能不会遇到,因此我们建议所有 3.6.14 和 3.5.14.1 的用户升级到此版本。
SQLite 3.6.14.1 版本 是对 3.6.14 版本 的修补版本,包含最少的更改,修复了三个错误。仅当用户受到其中一个或多个错误的影响时才需要升级。
SQLite 3.6.14 版本 在 btree 和 pager 层以及查询优化器中提供了新的性能增强功能。某些工作负载的速度可以达到上一个版本的两倍,尽管 10% 的速度提升更为常见。针对 虚拟表 的查询,其 WHERE 子句中包含 OR 和 IN 运算符,现在能够使用索引。
Unix 和 Windows 现在提供了一个新的可选 异步 I/O 后端。异步后端通过将缓慢的写操作推送到后台线程来营造更快的响应时间的假象。更快的响应时间的权衡是需要更多内存(用于保存挂起的写操作的内容),如果发生电源故障或程序崩溃,则某些看起来已提交的事务最终可能会在重新启动时回滚。
此版本还包含许多次要的错误修复、文档增强、新的测试用例以及对源代码的清理和简化。
如果先前的版本正常工作,则没有令人信服的理由从 3.6.12 或 3.6.13 版本升级。尽管许多用户可能会从改进的性能中受益。
SQLite 3.6.7 版本 包含对 Unix 驱动程序的主要清理,以及对 Mac OS X 上新的代理锁定机制的支持。尽管 Unix 驱动程序已重新组织,但其功能相同,因此应用程序不应该注意到任何差异。
此版本修复了引入 SQLite 3.6.6 版本 中的一个错误,该错误似乎可能导致数据库损坏。此错误是在压力测试期间检测到的。它尚未在现实环境中出现。对问题的分析表明,此错误可能导致数据库损坏,但是迄今为止,为找到实际导致数据库损坏的真实案例所做的集中努力均未成功。因此,此错误导致问题的可能性很低。尽管如此,我们还是出于谨慎起见决定发布一个紧急分支版本。3.6.6.2 版本 还修复了在磁盘 I/O 错误后可能发生的模糊内存泄漏。
此版本修复了引入 SQLite 3.6.4 版本 中的一个错误,该错误在模糊情况下可能导致数据库损坏。此错误从未在现实环境中出现;它最初是由内部压力测试检测到的,并且需要大量的分析才能证明它可能导致损坏。因此,我们认为 SQLite 3.6.4、3.6.5 和 3.6.6 版本可安全用于开发工作。但在部署包含 SQLite 的产品之前,建议升级到此修补版本或更高版本。我们采取了发布修补版本的非常规步骤,以便快速将此错误的修复程序传播开来。SQLite 3.6.7 版本将继续按照其正常的开发路径进行,预计将于 12 月中旬发布。
SQLite 3.6.5 版本 发布。这是一个快速周转的版本,修复了虚拟表和 FTS3 中的一个错误,该错误潜入了 3.6.5 版本 中。此版本还添加了新的应用程序定义页面缓存机制。
SQLite 3.6.5 版本 发布。包含各种次要的功能增强和许多模糊的错误修复。更改日志 包含详细信息。升级是可选的。
SQLite 开发人员荣幸地宣布 Bloomberg 已加入 SQLite 联盟。
SQLite 3.6.4 版本添加了旨在帮助应用程序检测何时未在查询中使用索引的新功能。还有一些重要的性能改进。升级是可选的。
SQLite 3.6.3 版本修复了先前版本中引入的 SELECT DISTINCT 中的一个错误。没有添加新功能。建议所有使用 DISTINCT 的应用程序进行升级。
SQLite 3.6.2 版本包含对页面缓存子系统以及在 SQL 语句中将标识符与表列匹配的过程的重写。这些更改旨在更好地模块化代码,并使其在未来更易于维护和可靠。与上一个版本相比,近 5000 行非注释核心代码(约 11.3%)发生了变化。尽管如此,除了错误修复之外,不应有任何应用程序可见的更改。
SQLite 3.6.1 版本是稳定性和性能增强版本。
3.6.0 版本对 VFS 对象进行了更改,以便更容易地将 SQLite 移植到更广泛的平台。与某些旧版应用程序存在潜在的不兼容性。有关详细信息,请参阅 35to36.html 文档。3.6.0 版本引入了许多新接口。代码经过了非常充分的测试,适用于稳定系统。我们只附加了“测试版”的标识,以便我们可以在下一个版本中对新接口进行调整,而无需声明不兼容性。
3.5.9 版本添加了一个新的实验性 PRAGMA:journal_mode。将日志模式设置为 PERSIST 可以提高在删除文件代价高昂的系统上的性能。PERSIST 日志模式仍被认为是实验性的,应谨慎使用,并在进一步测试后使用。3.5.9 版本旨在成为 3.6.0 版本之前的最后一个稳定版本。3.6.0 版本将对 sqlite3_vfs VFS 层进行不兼容的更改,以解决原始设计中的缺陷。这些不兼容性只会影响编写自己的自定义 VFS 层的程序员(通常是嵌入式设备构建者)。计划中的 VFS 更改将比去年 9 月发生的 3.4.2 到 3.5.0 事务 中发生的更改小得多。
此版本的 SQLite 被认为是稳定的,并已准备好投入生产使用。
版本 3.5.8 包含了一些重要的虚拟机代码生成器性能优化,包括常量子表达式分解和公共子表达式消除。此版本还创建了新的公共接口:sqlite3_randomness() 提供对 SQLite 内部伪随机数生成器的访问,sqlite3_limit() 允许在运行时以每个连接为基础设置大小限制,以及 sqlite3_context_db_handle() 是一个便利例程,允许应用程序定义的 SQL 函数实现检索其 数据库连接 处理。此版本的 SQLite 被认为是稳定的,并已准备好投入生产使用。
版本 3.5.7 修复了几个小的和不明显的错误,尤其是在 autoconf 生成的 Makefile 中。升级是可选的。此版本的 SQLite 被认为是稳定的,可以用于生产环境。
版本 3.5.6 修复了 3.5.5 中的一个小回归 - 一个与虚拟机向基于寄存器的设计的大规模更改无关的回归。新虚拟机没有报告任何问题。此版本的 SQLite 被认为是稳定的,可以用于生产环境。
版本 3.5.5 更改了 SQLite 核心源代码的 8% 以上,以便将内部虚拟机从基于栈的设计转换为基于寄存器的设计。此更改将允许未来的优化,并将避免过去导致问题的整个类别的栈溢出错误。即使此更改很大,广泛的测试也未发现新虚拟机中的任何错误,因此我们认为这是一个非常稳定的版本。
版本 3.5.4 修复了 UPDATE 和 DELETE 中一个长期存在但并不明显的错误,该错误可能导致数据库损坏。(参见工单 #2832。)建议所有用户升级。此版本还使 ORDER BY 语句的处理符合标准 SQL。理论上,这可能会对依赖于旧有错误行为的现有应用程序造成问题。有关更多信息,请参见工单 #2822。
SQLite 联盟今天正式启动,Mozilla 和 Symbian 成为创始成员。如 新闻稿 中所述,联盟的目标是促进 SQLite 的持续活力和独立性。
这是一个增量版本,修复了几个小问题。升级是可选的。如果版本 3.5.2 或 3.5.1 对您来说运行良好,那么没有必要更改到 3.5.3。在 下载 页面上找到的预构建二进制文件和合并文件包含 FTS3 全文搜索扩展模块。我们正在实验性地执行此操作,并且不承诺将来提供包含 FTS3 的预构建二进制文件。
这是一个增量版本,修复了几个小问题,添加了一些模糊的功能,并提供了一些性能调整。升级是可选的。实验性的编译时选项 SQLITE_OMIT_MEMORY_ALLOCATION 现已不再支持。另一方面,现在可以编译 SQLite,使其使用静态数组来满足其所有动态内存分配需求,并且从不调用 malloc。预计在未来的版本中,内存分配子系统将出现更多激进的更改。
修复了一个长期存在的错误,如果在事务中间发生磁盘满错误并且该事务未回滚,则该错误可能会导致数据库损坏。工单 #2686。新的 VFS 层是稳定的。但是,如果需要,我们仍然保留调整 VFS 接口定义的权利。
SQLite 中的操作系统接口层和内存分配子系统已重新实现。发布的 API 大致保持不变,但(未发布的)操作系统接口已进行了广泛修改。实现自己的操作系统接口的应用程序需要修改。有关详细信息,请参阅 34to35.html。这是一个很大的变化。大约 10% 的源代码被修改了。我们将此第一个版本称为“alpha”,以便为用户社区提供时间来测试和评估更改,然后再冻结新设计。
在对 soft_heap_limit 功能进行压力测试时,发现并修复了一个可能导致数据库损坏的错误。尽管此错误的后果很严重,但在典型应用程序中遇到它的可能性很小。仅当您使用 sqlite3_soft_heap_limit 接口时才建议升级。
此版本修复了 VACUUM 中的一个错误,该错误可能导致数据库损坏。该错误是在版本 3.3.14 中引入的。建议所有用户升级。此外,还包含大量其他更常规的 增强功能和错误修复。
此版本修复了两个独立的错误,这两个错误都可能导致数据库损坏。强烈建议升级。如果您必须继续使用旧版本的 SQLite,请至少阅读有关如何避免这些错误的信息,请参阅 CorruptionFollowingBusyError 和工单 #2418。此版本还在 SQLite 将处理的事物的大小和数量上添加了明确的 限制。新的限制可能会导致使用过长字符串、BLOB、表或 SQL 语句的现有应用程序出现兼容性问题。可以在编译时增加新的限制以解决出现的任何问题。尽管如此,此版本的版本号为 3.4.0 而不是 3.3.18,以便提请注意可能的兼容性问题。
还有一些新功能,包括 增量 BLOB I/O 和 增量 vacuum。有关更多信息,请参阅 更改日志。
此版本修复了 SQLite 正向兼容性逻辑中的一个错误,该错误会导致数据库在应该处于只读状态时变得不可读。仅当您计划部署到可能需要将来升级的产品中时,才从 3.3.16 升级。对于日常使用,它可能无关紧要。
在 3.3.14 中添加但在 3.3.15 中错误地关闭的性能改进已恢复。修复了一个错误,该错误阻止了 VACUUM 在唯一列中存在 NULL 值时运行。
修复了 3.3.14 中引入的一个烦人的错误。测试套件也进行了许多增强。
此版本侧重于性能改进。如果您使用 GCC 选项 -O3 重新编译合并文件(预编译的二进制文件使用 -O2),则根据您的工作负载,与版本 3.3.13 相比,您可能会看到性能提高 35% 或更多。此版本还增加了对 独占访问模式 的支持。
此版本修复了 ORDER BY 优化器中一个微妙的错误,该错误可能在使用连接时发生。还有一些小改进。建议升级。
先前版本的第一个发布版本使用了错误的源文件集。因此,许多人下载了一个标记为“3.3.11”但实际上是 3.3.10 的版本。发布版本 3.3.12 用于消除歧义。还修复了几个错误,并且 PRAGMA integrity_check 已得到增强。
版本 3.3.11 修复了版本 3.3.9 中的几个问题,版本 3.3.10 未能捕获这些问题。建议升级。
版本 3.3.10 修复了先前版本引入的几个错误。建议升级。
版本 3.3.9 修复了在模糊且难以重现的情况下可能导致数据库损坏的错误。有关详细信息,请参阅 wiki 中的 DatabaseCorruption。此版本还添加了新的 sqlite3_prepare_v2() API,并在命令行 shell 中包含重要的错误修复以及查询优化器的增强功能。建议升级。
版本 3.3.8 添加了使用 FTS1 模块进行全文搜索的支持。还有一些小错误修复。仅当您想尝试新的全文搜索功能或遇到 3.3.7 的问题时才升级。
版本 3.3.7 包括对可加载扩展和虚拟表的支持。但这两个功能仍被认为是“beta”,其 API 可能会在将来的版本中发生更改。此版本主要用于提供自 3.3.6 以来累积的小错误修复。没有必要升级。仅当您遇到已修复的模糊错误之一或想要尝试新功能时才进行升级。
SQLite 权威指南,Mike Owens 和 Grant Allen 合著的第二版书籍,现已可从 Apress 获取。本书涵盖了最新的 SQLite 内部结构以及本机 C 接口和 PHP、Python、Perl、Ruby、Tcl 和 Java 的绑定。推荐。
更改包括提高对 Windows 病毒扫描程序的容忍度以及更快的 :memory: 数据库。还修复了几个模糊的错误。如果您遇到问题,请升级。
此版本修复了许多小错误和文档错别字,并提供了一些小的新功能和性能增强。仅当您遇到问题或需要其中一项新功能时才升级。
此版本修复了几个错误,包括一个可能在多线程系统上导致死锁的错误。在多线程环境中使用 SQLite 的任何人都应该升级。
版本 3.3.2 中没有发现任何重大问题,因此我们特此宣布新的 API 和语言功能已稳定并得到支持。
随着我们向生产就绪的版本 3.3.x 迈进,更多错误修复和性能改进。
上周 alpha 版本中发现的许多错误现已修复,并且库的运行速度再次提高了很多。现在可以在线程之间移动数据库连接,只要连接在移动时不持有任何锁即可。因此,现在支持维护数据库连接池并将其传递给瞬态工作线程的常用范例。请帮助测试此新功能。有关更多信息,请参阅 MultiThreading wiki 页面。
版本 3.3.0 添加了对 CHECK 约束、DESC 索引、单独的 REAL 和 INTEGER 列亲和性、新的操作系统接口层设计以及许多其他更改的支持。代码通过了回归测试,但仍应视为 alpha。如有任何问题,请报告。版本 3.3.0 的文件格式略有更改,以支持降序索引和更有效的布尔值编码。SQLite 3.3.0 将读取和写入使用任何先前版本的 SQLite 3 创建的旧版数据库。但是,版本 3.3.0 创建的数据库将无法被早期版本的 SQLite 读取或写入。对于那些罕见需要旧文件格式的情况,可以在编译时指定它。
这些版本对 3.2.7 和 2.8.16 进行了一行更改,以修复自 2002 年 3 月和版本 2.4.0 以来一直存在的错误。如果多语句事务中的大型 INSERT 或 UPDATE 语句由于唯一性约束而失败但包含的事务提交,则该错误可能会导致数据库损坏。
此版本修复了几个小的和不明显的错误。仅当您遇到问题时才升级。
此版本修复了一个错误,该错误可能导致数据库损坏,如果对 1GB 或更大的数据库执行 VACUUM 操作失败(可能是由于磁盘空间不足或意外断电),并且稍后回滚。此版本还包含:ORDER BY 和 GROUP BY 处理已重写以使用更少的内存。添加了对 COUNT(DISTINCT) 的支持。LIKE 运算符现在可以由优化器用于具有 COLLATE NOCASE 的列。
此版本修复了新代码中的一些剩余错误。我们预计此版本将稳定并可用于生产环境。
此版本修复了新优化器中的一个错误,该错误在解析非常复杂的 WHERE 子句时可能导致段错误。
此版本添加了 ANALYZE 命令、CAST 运算符,以及对查询优化器的许多非常重大的改进。请参阅 更改日志 以获取更多信息。
SQLite 及其主要作者 D. Richard Hipp 荣获 Google 和 O'Reilly 颁发的 2005 年开源奖。
此版本包含许多小的错误修复、速度改进和代码大小缩减。除非您遇到问题或只是想升级,否则没有理由升级。
此版本修复了新的 ALTER TABLE ADD COLUMN 命令中的内存分配问题。
版本 3.2.0 的主要目的是添加对 ALTER TABLE ADD COLUMN 的支持。新的 ADD COLUMN 功能得益于 AOL 开发人员支持和拥抱优秀的开源软件。谢谢,AOL!版本 3.2.0 还修复了一个晦涩但严重的错误,该错误是在发布前不久发现的。如果您有一个多语句事务,并且在该事务中 UPDATE 或 INSERT 语句由于约束而失败,然后您尝试回滚整个事务,则回滚可能无法正常工作。有关详细信息,请参见工单 #1171。建议所有用户升级。
版本 3.1.6 修复了一个关键错误,该错误在将行插入到大约有 125 列的表中时会导致数据库损坏。此错误是在版本 3.0.0 中引入的。有关更多信息,请参见工单 #1163。
版本 3.1.4 修复了一个关键错误,如果启用版本 3.1.0 的自动 vacuum 模式(默认情况下关闭)并在事务中执行 CREATE UNIQUE INDEX 但由于索引列不唯一而失败,则该错误可能导致数据库损坏。任何使用自动 vacuum 功能和唯一索引的用户都应该升级。版本 3.1.5 添加了在 OS-X 中禁用 F_FULLFSYNC ioctl() 的功能,方法是设置“PRAGMA synchronous=on”而不是默认的“PRAGMA synchronous=full”。3.1.4 中曾尝试添加此功能,但由于拼写错误而失败。
版本 3.1.3 清理了在版本 3.1.2 中发现的一些小问题。
VACUUM 命令中的一个关键错误已在 2.x 分支和主 3.x 线路中修复,该错误可能导致数据库损坏。此错误存在于 SQLite 的所有先前版本中。即使您不太可能遇到此错误,也建议所有用户升级。有关更多信息,请参见工单 #1116。版本 3.1.2 也是 3.1 系列的第一个稳定版本。SQLite 3.1 添加了对相关子查询、自动 vacuum、自动递增、ALTER TABLE 等功能的支持。请参阅 版本 3.1.0 的发行说明,以详细了解 3.1 系列中提供的更改。
版本 3.1.1(测试版)现已在网站上提供。版本 3.1.1 与 3.0 系列完全向后兼容,并具有许多新功能,包括自动 vacuum 和相关子查询。版本 3.1.0 的 发行说明 同样适用于此测试版。预计几周内将发布稳定版本。
版本 3.1.0(alpha 版)现已在网站上提供。版本 3.1.0 与 3.0 系列完全向后兼容,并具有许多新功能,包括自动 vacuum 和相关子查询。有关详细信息,请参阅 发行说明。这是一个 alpha 版本。预计在一周内发布测试版,并在两周后发布第一个稳定版本。
在 2004 年德国法兰克福举行的国际 PHP 大会上,有一场关于 SQLite 架构以及如何优化 SQLite 查询的演讲。
已过时的 URL:https://www.sqlite.org/php2004/page-001.html
该演讲的幻灯片现已提供。
SQLite 3.0.8 版包含一些代码优化和次要错误修复,并添加了对 DEFERRED、IMMEDIATE 和 EXCLUSIVE 事务的支持。这是一个增量版本。如果 3.0.7 版对您有效,则没有理由从该版本升级。
本周在新奥尔良举行的第 11 届 Tcl/Tk 大会上,将有一场关于在 Tcl/Tk 中使用 SQLite 的演讲。请访问 http://www.tcl-lang.org/community/tcl2004/ 以获取详细信息。
已过时的 URL:https://www.sqlite.org/tclconf2004/page-001.html
演讲的幻灯片现已提供。
版本 3.0 现已在多个项目中使用数月,没有出现重大问题。我们认为它稳定并可用于生产环境。
由于对 sqlite3_step() 进行了一些重要更改,因此我们决定在第一个“稳定”版本发布之前进行额外的测试版发布。如果在此版本中没有发现严重问题,我们将在大约一周后发布版本 3.0“稳定版”。
SQLite 3.0 版的第四个测试版现已提供。下一个版本预计将称为“稳定版”。
SQLite 3.0 版的第三个测试版现已提供。此新的测试版修复了几个错误,包括在 SELECT 处于挂起状态时执行 DELETE 操作时可能发生的数据库损坏问题。预计在 3.0 版最终发布之前至少还有一个测试版。
SQLite 3.0 版的第二个测试版现已提供。此新的测试版修复了许多错误,并添加了对具有不同页面大小的数据库的支持。下一个 3.0 版本可能会称为最终版本或稳定版本。版本 3.0 添加了对国际化的支持和一种新的更紧凑的文件格式。详细信息。自 3.0.2 以来,API 和文件格式已修复。所有回归测试都已通过(超过 100000 个测试),并且测试套件对 95% 以上的代码进行了测试。
SQLite 3.0 版的部分实现得益于 AOL 开发人员支持和拥抱优秀的开源软件。
SQLite 2.8.15 版是 2.8 系列的维护版本。版本 2.8 将继续维护并修复错误,但不会向版本 2.8 添加新功能。此版本中的所有更改都很小。如果您没有遇到问题,则没有理由升级。
SQLite 3.0 版的第一个测试版现已提供。版本 3.0 添加了对国际化的支持和一种新的更紧凑的文件格式。详细信息。自此版本起,API 和文件格式已冻结。所有回归测试都已通过(超过 100000 个测试),并且测试套件对 95% 以上的代码进行了测试。SQLite 3.0 版的部分实现得益于 AOL 开发人员支持和拥抱优秀的开源软件。
www.sqlite.org 网站在 2004-06-22 左右遭到黑客攻击,因为 SQLite 主要开发者未能正确修补 CVS。证据表明,攻击者无法将权限提升到用户“cvs”以上。尽管如此,作为预防措施,整个网站已在全新机器上从头重建。截至 2004-06-28,所有服务应恢复正常。
SQLite 3.0 版的第一个 alpha 版本现已提供公众审查和评论。版本 3.0 通过使用 UTF-16 和用户定义的文本排序规则增强了国际化支持。BLOB 现在可以无需编码直接存储。新的文件格式使数据库缩小了 25%(取决于内容)。代码速度也略有提高。尽管有许多新功能,但库占用空间仍小于 240KB(x86,gcc -O1)。其他信息。我们的目标是在 2004-07-01 冻结文件格式和 API。鼓励用户仔细审查和评估此 alpha 版本,并在该日期之前提交任何反馈。
SQLite 2.8 系列将在可预见的未来继续得到支持并修复错误。
SQLite 2.8.14 版是稳定版 2.8 系列的补丁版本。如果 2.8.13 对您有效,则没有理由升级。这只是一个错误修复版本。大部分开发工作都投入到即将发布的 3.0.0 版中。
对 CVS 存储库的匿名访问将在 2004-06-04 开始的 2 周内暂停。在 CVS 服务中断期间,每个人仍然可以下载预打包的源代码包、创建或修改故障单或查看更改日志。对 CVS 存储库的完全开放访问将在 2004-06-18 恢复。
SQLite 3 版的开发工作已经开始。版本 3 对 C 语言 API 和底层文件格式进行了重大更改,这将使 SQLite 能够更好地支持国际化。第一个测试版计划于 2004-07-01 发布。计划继续支持 SQLite 2.8 版并修复错误。但所有新的开发工作都将在 3.0 版中进行。
此页面上次修改于 2023-12-05 14:43:20 UTC