Small. Fast. Reliable.
Choose any three.

Release History

This page provides a high-level summary of changes to SQLite. For more detail, see the Fossil checkin logs at http://www.sqlite.org/src/timeline and http://www.sqlite.org/src/timeline?t=release. See the chronology a succinct listing of releases.

2021-06-30 (3.36.0)

  1. Improvement to the EXPLAIN QUERY PLAN output to make it easier to understand.
  2. Byte-order marks at the start of a token are skipped as if they were whitespace.
  3. An error is raised on any attempt to access the rowid of a VIEW or subquery. Formerly, the rowid of a VIEW would be indeterminate and often would be NULL. The -DSQLITE_ALLOW_ROWID_IN_VIEW compile-time option is available to restore the legacy behavior for applications that need it.
  4. The sqlite3_deserialize() and sqlite3_serialize() interfaces are now enabled by default. The -DSQLITE_ENABLE_DESERIALIZE compile-time option is no longer required. Instead, there is is a new -DSQLITE_OMIT_DESERIALIZE compile-time option to omit those interfaces.
  5. 现在,只要数据库名称以“ /”开头,“ memdb” VFS即可在同一进程中的多个数据库连接之间共享同一内存数据库。
  6. 退出EXISTS-to-IN优化(SQLite 3.35.0更改日志中的项目8b ),因为它发现减慢查询的速度比加快查询的速度更为频繁。
  7. 改进常量传播优化,使其可用于非联接查询。

    散列:

  8. SQLITE_SOURCE_ID:待处理
  9. sqlite3.c的SHA3-256:待定

2021-04-19(3.35.5)

  1. 修复了新的ALTER TABLE DROP COLUMN功能中可能损坏数据库文件的缺陷。
  2. 修复了可能导致错误查询结果的模糊查询优化器问题。

    散列:

  3. SQLITE_SOURCE_ID:2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886
  4. sqlite3.c的SHA3-256:e42291343e8f03940e57fffcf1631e7921013b94419c2f943e816d3edf4e1bbe

2021-04-02(3.35.4)

  1. 修复上述第8b条所标识的查询计划程序优化中的一个缺陷。票证 de7db14784a08053
  2. 修复新的RETURNING语法中的缺陷。机票 132994c8b1063bfb
  3. 修复新的RETURNING功能,以便在RETURNING子句中的一项引用一个未知表时引发错误,而不是默默地忽略该错误。
  4. 修复与下推优化错误地触发的与聚合函数处理相关的断言。

    散列:

  5. SQLITE_SOURCE_ID:2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
  6. sqlite3.c的SHA3-256:528b8a26bf5ffd4c7b4647b5b799f86e8fb1a075f715b87a414e94fba3d09dbe

2021-03-26(3.35.3)

  1. 增强字节码引擎的OP_OpenDup操作码,以便即使复制的光标本身来自OP_OpenDup,它也可以工作。已修复 票bb8a9fd4a9b7fce5。由于最近进行了MATERIALIZED提示增强,因此才发现此问题。
  2. 实现相关的公用表表达式时,请针对每个用例分别进行操作,这是正确性所必需的。这解决了MATERIALIZED提示增强所引入的问题。
  3. 修复了UNIX VFS的文件名规范化器中的问题。
  4. 修复CLI中“框”输出模式,以便它与返回一列或多列零列的语句一起使用(例如PRAGMA增量_vacuum)。 论坛帖子afbbcb5b72
  5. 改进了由错误的公用表表达式生成的错误消息。 论坛帖子aa5a0431c99e
  6. 修复一些错误的assert()语句。
  7. 修复SELECT语句语法图,以便正确显示FROM子句语法。 论坛帖子9ed02582fe
  8. 修复EBCDIC字符分类器,以便它将换行符理解为空格。 论坛帖子58540ce22dcd
  9. 在(不支持的)整数虚拟表 扩展的实现中改进了xBestIndex方法,以便说服查询计划程序更好地完成工作,从而避免尝试实现具有无限行的表。 论坛帖子b52a020ce4

    散列:

  10. SQLITE_SOURCE_ID:2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a
  11. sqlite3.c的SHA3-256:91ca6c0a30ebfdba4420bb35f4fd9149d13e45fc853d86ad7527db363e282683

2021-03-17(3.35.2)

  1. 修复 版本3.35.0中引入的appendvfs.c扩展中的问题 。
  2. 确保不带参数的日期/时间函数(生成依赖于当前时间的响应)被视为 非确定性函数。门票 2c6c8689fb5f3d2f
  3. 修复了sqldiff实用程序中的一个问题,该问题与虚拟表定义中的非正常空格字符有关。
  4. 限制3.35.0发行版中第8c项描述的新UNION ALL优化,以便它不会尝试进行过多的新子查询。有关 详细信息,请参见论坛线程140a67d3d2

    散列:

  5. SQLITE_SOURCE_ID:2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827
  6. sqlite3.c的SHA3-256:e8edc7b1512a2e050d548d0840bec6eef83cc297af1426c34c0ee8720f378a11

2021-03-15(3.35.1)

  1. 修复新的DROP COLUMN功能在索引的列和索引定义中引用的列上使用时的错误
  2. 改进CLI中.dump命令的内置文档。

    散列:

  3. SQLITE_SOURCE_ID:2021-03-15 16:53:57 aea12399bf1fdc76af43499d4624c3afa17c3e6c2459b71c195804bb98def66a
  4. 适用于sqlite3.c的SHA3-256:fc79e27fd030226c07691b7d7c23aa81c8d46bc3bef5af39060e1507c82b0523

2021-03-12(3.35.0)

  1. 添加了内置的SQL数学函数()。(需要 -DSQLITE_ENABLE_MATH_FUNCTIONS编译时选项。)
  2. 增加了对ALTER TABLE DROP COLUMN的支持。
  3. 概括UPSERT
    1. 允许按顺序评估多个ON CONFLICT子句,
    2. 最后的ON CONFLICT子句可以省略冲突目标,但仍使用DO UPDATE。
  4. DELETEINSERTUPDATE语句上添加对RETURNING子句的支持。
  5. 在包含非常大的TEXT或BLOB值的数据库上运行VACUUM时,使用较少的内存。不再需要一次将整个TEXT或BLOB都保存在内存中。
  6. 指定公用表表达式时,增加对MATERIALIZEDNOT MATERIALIZED提示的支持。默认行为以前是NOT MATERIALIZED,但现在已被多次使用的CTE更改为MATERIALIZED。
  7. SQLITE_DBCONFIG_ENABLE_TRIGGERSQLITE_DBCONFIG_ENABLE_VIEW 设置被修改,使它们只控制在主数据库模式或在连接数据库模式,而不是在TEMP模式触发器和视图。始终允许使用TEMP触发器和视图。
  8. 查询计划器/优化器的改进:
    1. 最小/最大优化的增强功能,以便与IN运算符和先前版本的OP_SeekScan优化更好地配合使用。
    2. 尝试在WHERE子句中处理EXISTS运算符,就好像它们是IN运算符一样,这​​是有效的转换,并且似乎可能会提高性能。
    3. 即使父查询是联接,也允许统一UNION ALL子查询。
    4. 即使禁用了STAT4,也可以在WHERE子句中的IS NOT NULL表达式上使用索引(如果适用)。
    5. 如果“ x”是具有“ NOT NULL”约束并且不参与外部联接的列,则形式为“ x IS NULL”或“ x IS NOT NULL”的表达式可能会转换为FALSE或TRUE。
    6. 如果UPDATE不会修改与外键关联的任何列,请避免检查UPDATE语句上的外键约束。
    7. 只要WHERE术语完全由常量和在子查询中所有窗口函数的PARTITION BY子句中找到的表达式的副本组成,就允许将WHERE术语下推到包含窗口函数的子查询中。
  9. CLI增强功能:
    1. 增强“ .stats”命令以接受新的参数“ stmt”和“ vmstep”,从而分别导致准备语句统计信息和仅显示虚拟机步骤计数。
    2. 添加“ .filectrl data_version”命令。
    3. 增强“ .once”和“ .output”命令,以便如果目标参数以“ |”开头 (指示将输出重定向到管道中),则不需要用引号将其引起来。
  10. Bug修复:
    1. 修复在处理具有相关WHERE子句和“ HAVING 0”子句的语法错误的SELECT语句时潜在的NULL指针取消引用的问题。(也在3.34.1修补程序版本中修复。)
    2. 修复了 3.33.0版的IN-operator优化中的一个错误,该错误可能导致错误的答案。
    3. 如果模式以“%”结尾并且存在“ ESCAPE'_'”子句,请修复来自LIKE运算符的错误答案。

    散列:

  11. SQLITE_SOURCE_ID:2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
  12. sqlite3.c的SHA3-256:73a740d881735bef9de7f7bce8c9e6b9e57fe3e77fa7d76a6e8fc5c262fbaedf

2021-01-20(3.34.1)

  1. 修复在处理带有相关WHERE子句和“ HAVING 0”子句且父查询为聚合子查询的子查询时的潜在使用后使用错误。
  2. 修复文档拼写错误
  3. 解决扩展中的小问题。

    散列:

  4. SQLITE_SOURCE_ID:2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
  5. 适用于sqlite3.c的SHA3-256:799a7be90651fc7296113b641a70b028c142d767b25af1d0a78f93dcf1a2bf20

2020-12-01(3.34.0)

  1. 添加了sqlite3_txn_state()接口,用于报告数据库连接的当前事务状态。
  2. 像SQL Server一样,增强递归公用表表达式以支持两个或多个递归术语,因为这有助于使 针对图的查询更易于编写和执行。
  3. 改进了有关CHECK约束失败的错误消息。
  4. CLI增强功能:
    1. 现在,.read点命令除了文件名外还接受管道。
    2. .dump点命令中添加了--data-only和--nosys选项。
    3. .schema点命令中添加了--nosys选项。
    4. 表名引用对于.import点命令正确起作用。
    5. generate_series(START,END,STEP)表值函数扩展现在内置的CLI。
    6. 所述.databases DOT-命令现在显示的每个数据库文件作为所确定的状态sqlite3_db_readonly()()sqlite3_txn_state
    7. 添加了--tabs命令行选项,该选项可设置.mode tabs
    8. 如果无法打开以其参数命名的文件,则--init选项将报告错误。--init选项现在也支持--bail选项。
  5. 查询计划程序的改进:
    1. 改进了运行DISTINCT运算符的成本估算。
    2. 当使用多列索引执行UPDATE或DELETE时,其中只有少数索引的较早列可用于索引查找,请延迟执行主表查找,直到评估完所有WHERE子句约束后为止(如果这些约束)可以由未使用的索引后期条款覆盖,从而避免不必要的主表查找。
    3. 当后面的列受IN运算符约束时,新的OP_SeekScan操作码用于提高多列索引查找的性能。
  6. 现在,即使一个或多个附加数据库文件是只读的,BEGIN IMMEDIATEBEGIN EXCLUSIVE命令也可以使用。
  7. 增强的FTS5支持三字母索引
  8. 在有数百个连接都一次访问同一数据库文件的情况下,WAL模式锁定原语的性能得到了改善。
  9. 增强了carray()表值函数的功能,以包括使用辅助sqlite3_carray_bind()接口绑定的单参数形式。
  10. 现在,也可以将substr()SQL函数称为“ substring()”,以与SQL Server兼容。
  11. 语法图现在实现为 Pikchr脚本,并呈现为SVG改进的易读性和易于维护。

    散列:

  12. SQLITE_SOURCE_ID:2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b
  13. sqlite3.c的SHA3-256:fbd895b0655a337b2cd657675f314188a4e9fe614444cc63dfeb3f066f674514

2020-08-14(3.33.0)

  1. 支持遵循PostgreSQL语法的UPDATE FROM
  2. 将数据库文件的最大大小增加到281 TB。
  3. 扩展了PRAGMA integrity_check语句,以便可以选择将其限制为仅验证单个表及其索引,而不是验证整个数据库文件。
  4. 添加了用于执行任意精度十进制算术的十进制扩展名
  5. ieee754扩展的增强,以使用IEEE 754 binary64数字。
  6. CLI增强功能:
    1. 添加了四个新的输出模式:“ box”,“ json”,“ markdown”和“ table”。
    2. “列”输出模式会自动扩展列以包含最长的输出行,如果先前未设置,则会自动打开“ .header”。
    3. “ quote”输出模式支持“ .separator”
    4. 小数延伸IEEE754扩展是内置到CLI
  7. 查询计划程序的改进:
    1. 添加了使用INDEXED BY查找全索引扫描查询计划的功能 ,该计划以前会因“无查询解决方案”而失败。
    2. 尽管存在错误信息,但可以更好地检测丢失,不完整和/或不可靠的sql​​ite_stat1数据,并生成良好的查询计划。
    3. 假设在t(x,y)上具有索引,则提高了查询的性能,例如“从t WHERE y IN(?,?,?)中的SELECT min(x)”。
  8. WAL模式下,如果写入器崩溃并使shm文件处于不一致状态,则即使存在活动的读取事务,后续事务现在也可以恢复shm文件。在进行此增强之前,该情况下的shm文件恢复将导致SQLITE_PROTOCOL错误。

    散列:

  9. SQLITE_SOURCE_ID:2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710710e68b3d9ac5881b0ff3f
  10. sqlite3.c的SHA3-256:d00b7fffa6d33af2303430eaf394321da2960604d25a4471c7af566344f2abf9

2020-06-18(3.32.3)

  1. 各种小错误修复,包括修复门票 8f157e8010b22af09fb26d37cefaba40e367f31901ea8700b706351ce2ecf59a7c6d876f84e6e7e2c8d3b9f0a750a529

    散列:

  2. SQLITE_SOURCE_ID:2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd
  3. sqlite3.c的SHA3-256:b62b77ee1c561a69a71bb557694aaa5141f1714c1ff6cc1ba8aa8733c92d4f52

2020-06-04(3.32.2)

  1. 修复了字节码引擎中的一个长期存在的错误,该错误在提交失败时可能导致 COMMIT命令报告成功。机票 810dc8038872e212

    散列:

  2. SQLITE_SOURCE_ID:2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c
  3. sqlite3.c的SHA3-256:f17a2a57f7eebc72d405f3b640b4a49bcd02364a9c36e04feeb145eccafa3f8d

2020-05-25(3.32.1)

  1. 修复了两个长期存在的错误,这些错误使恶意SQL语句使运行SQLite的进程崩溃。这些错误是在3.32.0版本发布后约24小时由第三方宣布的,但并非特定于3.32.0版本。
  2. 其他次要的编译器警告修复程序等。

    散列:

  3. SQLITE_SOURCE_ID:2020-05-25 16:19:56 0c1fcf4711a2e66c813aed38cf41cd3e2123ee8eb6db98118086764c4ba83350
  4. sqlite3.c的SHA3-256:f695ae21abf045e4ee77980a67ab2c6e03275009e593ee860a2eabf840482372

2020-05-22(3.32.0)

  1. 使用 PRAGMA analysis_limit命令增加了对近似ANALYZE的支持。
  2. 添加了字节码虚拟表
  3. 校验和VFS填充程序添加到源树中包含的一组运行时可加载扩展中。
  4. 添加了iif()SQL函数
  5. INSERT和UPDATE语句现在始终 在计算CHECK约束之前应用列亲和力。从理论上讲,此错误修复可能会导致具有非常规CHECK约束的旧数据库出现问题,这要求INSERT的输入类型与声明的列类型不同。有关 更多信息,请参见票号 86ba67afafded936
  6. 添加了sqlite3_create_filename()sqlite3_free_filename()sqlite3_database_file_object() 接口,以更好地支持VFS填充程序实现。
  7. 参数 数量的默认上限从999增加到32766。
  8. UINT整理序列添加了代码,作为可选的 可加载扩展
  9. CLI的增强功能:
    1. .import命令添加选项:--csv,--ascii,--skip
    2. 使用.dump命令现在接受多个LIKE图案参数,并输出所有匹配表的联合。
    3. 在调试版本中添加.oom命令
    4. 将--bom选项添加到.excel.output.once 命令。
    5. 增强.filectrl命令以支持--schema选项。
    6. 所述UINT排序序列扩展被自动加载
  10. 现在,LIKE运算符的ESCAPE子句将覆盖通配符,以便该行为与PostgreSQL的行为匹配。
  11. SQLITE_SOURCE_ID:2020-05-22 17:46:16 5998789c9c744bce92e4cff7636bba800a75574243d6977e1fc8281e360f8d5a
  12. sqlite3.c的SHA3-256:33ed868b21b62ce1d0352ed88bdbd9880a42f29046497a222df6459fc32a356f

2020-01-27(3.31.1)

  1. 恢复仅供内部使用的SQLite数据结构的数据布局。使用SQLite的应用程序永远不要引用内部SQLite数据结构,但无论如何还是要这样做,并且在3.30.0中对这样一种数据结构的更改破坏了一种流行且广泛部署的应用程序。至少暂时恢复SQLite中的更改,会给开发人员提供了错误的应用程序时间,以修复其代码。
  2. 修复了sqlite3ext.h头文件中的错字,该错字阻止了sqlite3_stmt_isexplain()sqlite3_value_frombind()接口从运行时可加载 扩展中被调用。

    散列:

  3. SQLITE_SOURCE_ID:2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
  4. sqlite3.c的SHA3-256:de465c64f09529429a38cbdf637acce4dfda6897f93e3db3594009e0fed56d27

2020-01-22(3.31.0)

  1. 添加对生成的列的支持。
  2. 添加sqlite3_hard_heap_limit64()接口和相应的 PRAGMA hard_heap_limit命令。
  3. 增强function_list杂注以显示每个函数的参数数量,函数的类型(标量,集合,窗口)以及函数属性标志SQLITE_DETERMINISTICSQLITE_DIRECTONLYSQLITE_INNOCUOUS和/或SQLITE_SUBTYPE
  4. 聚合模式功能添加到 DBSTAT虚拟表中
  5. SQLITE_OPEN_NOFOLLOW选项添加到sqlite3_open_v2()可以防止SQLite打开符号链接。
  6. JSON函数路径参数添加了“#-N”数组符号。
  7. 添加了SQLITE_DBCONFIG_TRUSTED_SCHEMA连接设置,该设置也可以通过新的trust_schema编译指示以及在编译时使用-DSQLITE_TRUSTED_SCHEMA编译时选项进行控制。
  8. 添加了对专用扩展有用的API sqlite3_filename_database()sqlite3_filename_journal()sqlite3_filename_wal()
  9. 添加sqlite3_uri_key()接口。
  10. 升级了sqlite3_uri_parameter()函数,以便除了数据库文件名之外,还可以与回滚日志或WAL文件名一起使用。
  11. 提供使用新属性SQLITE_INNOCUOUSSQLITE_DIRECTONLY标记应用程序定义的SQL函数的功能
  12. sqlite3_vtab_config()添加新动词,以便虚拟表的xConnect方法可以将虚拟表声明为 SQLITE_VTAB_INNOCUOUSSQLITE_VTAB_DIRECTONLY
  13. sqlite3_interrupt()的响应速度更快。
  14. 添加了uuid.c扩展模块,该模块实现了用于处理RFC-4122 UUID的功能。
  15. 所述后备存储器分配器被增强以支持与在每个池中不同尺寸的分配两个单独的内存池。这样一来,后备空间可以覆盖更多的内存分配,同时将每个连接的堆内存使用量从120KB减少到48KB。
  16. legacy_file_format编译被停用。现在是无人值守。取而代之的是,提供了sqlite3_db_config()SQLITE_DBCONFIG_LEGACY_FILE_FORMAT选项。停用legacy_file_format编译指示是因为(1)它很少有用,并且(2)在具有既具有生成列又具有降序索引的表的模式中,它与VACUUM不兼容。门票6484e6ce678fffab

    散列:

  17. SQLITE_SOURCE_ID:2020-01-22 18:38:59 f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824
  18. sqlite3.c的SHA3-256:a5fca0b9f8cbf80ac89b97193378c719d4af4b7d647729d8df9c0c0fca7b1388

2019-10-10(3.30.1)

  1. 修复了查询拼合器中的错误,该错误可能导致对聚合函数使用新的FILTER子句的嵌套查询 出现段错误。门票1079ad19993d13fa
  2. Cherrypick修复了自3.30.0版本以来发现的其他晦涩问题

    散列:

  3. SQLITE_SOURCE_ID:2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
  4. sqlite3.c的SHA3-256:f96fafe4c110ed7d77fc70a7d690e5edd1e64fefb84b3b5969a722d885de1f2d

2019-10-04(3.30.0)

  1. 增加对聚合函数FILTER子句的支持。
  2. ORDER BY子句中添加对NULLS FIRSTNULLS LAST语法的支持。
  3. index_infoindex_xinfo编译指示被增强,以提供有关的磁盘上表示信息WITHOUT ROWID 表。
  4. 添加sqlite3_drop_modules()接口,允许应用程序禁用不需要的自动加载的虚拟表。
  5. 改进了CLI中.recover dot-command,使其可以从损坏的数据库文件中恢复更多内容。
  6. 增强RBU扩展以支持表达式索引
  7. 更改架构分析器,以便如果sqlite_master表的类型,名称和tbl_name列中的任何列 已损坏并且数据库连接未处于 writable_schema模式,则它将出错。
  8. PRAGMA function_listPRAGMA MODULE_LISTPRAGMA pragma_list命令现在被启用在所有建立在默认情况下。使用-DSQLITE_OMIT_INTROSPECTION_PRAGMAS禁用它们 。
  9. sqlite3_db_config()添加SQLITE_DBCONFIG_ENABLE_VIEW选项。
  10. 添加了TCL接口 配置方法,以便能够禁用SQLITE_DBCONFIG_ENABLE_VIEW并从TCL控制其他 sqlite3_db_config()选项。
  11. 应用程序定义的SQL函数添加了SQLITE_DIRECTONLY标志, 以防止在触发器和视图中使用这些函数。
  12. 现在,旧版SQLITE_ENABLE_STAT3的编译时选项为空操作。

    散列:

  13. SQLITE_SOURCE_ID:2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
  14. sqlite3.c的SHA3-256:f04393dd47205a4ee2b98ff737dc51a3fdbcc14c055b88d58f5b27d0672158f5

2019-07-10(3.29.0)

  1. sqlite3_db_config()中添加了SQLITE_DBCONFIG_DQS_DMLSQLITE_DBCONFIG_DQS_DDL 操作,以激活和停用双引号字符串文字错误功能。为了保持原有的兼容性,两者都默认设置为“ on”,但是鼓励开发人员将其“ off”(也许使用-DSQLITE_DQS = 0编译时选项)。
  2. -DSQLITE_DQS = 0现在是推荐的编译时选项
  3. 查询计划程序的改进:
    1. 当一个或另一个操作数是常量时,改进的AND和OR运算符优化。
    2. 对于左侧列具有数字亲和力的情况,LIKE优化得到了增强。
  4. 添加了“ sqlite_dbdata ”虚拟表,用于从SQLite数据库(甚至是已损坏的数据库)中提取原始低级内容。
  5. 舍入行为的改进,以便使用round()函数对二进制数进行舍入的结果更接近于习惯于以十进制思考的人们的实际期望。
  6. CLI的增强功能:
    1. 添加“ .recover”命令,该命令尝试从损坏的数据库文件中恢复尽可能多的内容。
    2. 添加对测试有用的“ .filectrl”命令。
    3. 将长期存在的“ .testctrl”命令添加到“ .help”菜单中。
    4. 添加了“ .dbconfig”命令

    散列:

  7. SQLITE_SOURCE_ID:2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6
  8. sqlite3.c的SHA3-256:d9a5daf7697a827f4b2638276ce639fa04e8e8bb5fd3a6b683cfad10f1c81b12

2019-04-16(3.28.0)

  1. 增强的窗口功能
    1. 添加对EXCLUDE子句的支持。
    2. 添加对窗口链接的支持。
    3. 添加对GROUPS框架的支持。
    4. 添加对RANGE帧中的<expr> PRECEDING ”和“ <expr> FOLLOWING ”边界的支持。
  2. 添加了新的sqlite3_stmt_isexplain(S)接口,用于确定已准备好的语句是否为EXPLAIN
  3. 增强了VACUUM INTO,使其适用于只读数据库。
  4. 新的查询优化:
    1. 在存在ESCAPE关键字且PRAGMA case_sensitive_like处于打开状态的情况下,启用LIKE优化
    2. 在由部分索引驱动的查询中,请避免对部分索引的WHERE子句中命名的约束进行不必要的测试,因为我们知道约束必须始终为true。
  5. TCL接口的增强功能:
    1. 函数方法中添加了-returntype选项。
    2. 添加了新的bind_fallback方法
  6. CLI的增强功能:
    1. 增加了对绑定参数.parameter命令的支持
    2. 修复readfile()函数,以便它在读取空文件时返回空的BLOB而不是抛出内存不足错误。
    3. 修复writefile()函数,以便当它沿着新文件的路径创建新目录时,会为其赋予umask权限,而不是与文件相同的权限。
    4. 更改.archive命令中的--update选项,以使其跳过归档中已存在且未更改的文件。添加新的--insert选项,该选项与--update以前的工作方式一样。
  7. 添加了fossildelta.c 扩展名,该扩展名可以创建,应用和解构RBU扩展名 使用的 Fossil DVCS文件增量格式
  8. sqlite3_db_config() 接口添加了SQLITE_DBCONFIG_WRITABLE_SCHEMA动词,该动词与PRAGMA writable_schema的工作原理相同,而无需使用SQL解析器。
  9. 添加了sqlite3_value_frombind() API,用于确定SQL函数的参数是否来自绑定参数
  10. fts3_tokenizer()的安全性和兼容性增强:
    1. 所述fts3_tokenizer()函数总是返回NULL除非任何传统应用程序定义的FTS3断词接口正在使用的启用sqlite3_db_configSQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER)设置,或除非的第一个参数fts3_tokenizer()是一个结合的参数
    2. 如果第二个参数是绑定参数,则即使没有sqlite3_db_configSQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER)设置,fts3_tokenizer()的两个参数版本也会接受指向令牌生成器方法对象的指针。
  11. 提高了针对损坏的数据库文件的鲁棒性。
  12. 其他性能增强
  13. 建立了官方SQLite源树的Git镜像。SQLite的规范源使用的是保持 化石DVCShttps://sqlite.org/src。可以在https://github.com/sqlite/sqlite上看到Git镜像。

    散列:

  14. SQLITE_SOURCE_ID:2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
  15. sqlite3.c的SHA3-256:411efca996b65448d9798eb203d6ebe9627b7161a646f5d00911e2902a57b2e9

2019-02-25(3.27.2)

  1. 修复了IN运算符中的一个错误,该错误是由3.27.0版中的尝试优化引入的。门票 df46dfb631f75694
  2. 修复了滥用窗口功能时导致崩溃的错误。机票 4feb3159c6bc3f7e33959
  3. 修复各种文档拼写错误

    散列:

  4. SQLITE_SOURCE_ID:bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
  5. sqlite3.c的SHA3-256:1dbae33bff261f979d0042338f72c9e734b11a80720fb32498bae9150cc576e7

2019-02-08(3.27.1)

  1. 修复查询优化器中的错误:OR优化与试图使用直接从表达式索引读取的值而不是重新计算表达式的优化之间的不利相互作用。门票4e8e4857d32d401f

    散列:

  2. SQLITE_SOURCE_ID:2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
  3. sqlite3.c的SHA3-256:11c14992660d5ac713ea8bea48dc5e6123f26bc8d3075fe5585d1a217d090233

2019-02-07(3.27.0)

  1. 添加了VACUUM INTO命令
  2. 如果使用 双引号的字符串文字,则在错误日志上发出SQLITE_WARNING消息。
  3. sqlite3_normalized_sql()使用创建的任何准备好的声明中接口的工作原理sqlite3_prepare_v2()sqlite3_prepare_v3() 。它不再需要使用sqlite3_prepare_v3()SQLITE_PREPARE_NORMALIZE 以使用sqlite3_normalized_sql()
  4. FTS3FTS5中添加了remove_diacritics = 2选项。
  5. sqlite3_prepare_v3()中添加了SQLITE_PREPARE_NO_VTAB选项。使用该选项可以防止对影子表的循环引用导致资源泄漏。
  6. sqlite3_deserialize()接口的增强功能:
    1. 添加SQLITE_FCNTL_SIZE_LIMIT 文件控件,以设置sqlite3_deserialize创建的内存数据库大小的上限。默认上限为1GiB,或者由sqlite3_configSQLITE_CONFIG_MEMDB_MAXSIZE)和/或SQLITE_MEMDB_DEFAULT_MAXSIZE指定的替代值 。
    2. 荣誉SQLITE_DESERIALIZE_READONLY标志,这是以前的文件中所描述的,但以前是一个空操作。
    3. 增强TCL接口的“反序列化”命令,为其赋予新的“ --maxsize N”和“ --readonly BOOLEAN”选项。
  7. CLI的增强,主要是为了支持SQLite库本身的测试和调试:
    1. 添加对“ .open --hexdb”的支持。用于生成“ hexdb”文本的“ dbtotxt ”实用程序已添加到源树中。
    2. 在“ .open --deserialize”上添加对“ --maxsize N”选项的支持。
    3. 添加“ --memtrace”命令行选项,以显示所有内存分配和释放。
    4. 在使用SQLITE_DEBUG的版本中添加“ .eqp trace”选项,以一步一步启用带有缩进和PRAGMA vdbe_trace的字节码程序列表 。
    5. 添加“ .progress”命令以访问sqlite3_progress_handler()接口。
    6. 将“ --async”选项添加到“ .backup”命令。
    7. 在“ .trace”中添加选项“ --expanded”,“-normalized”,“-plain”,“-profile”,“-row”,“-stmt”和“ --close”命令。
  8. 增强了针对恶意破坏的数据库运行的恶意SQL的鲁棒性。

    Bug修复:

  9. 不要使用局部索引对IN运算符进行表扫描。票证1d958d90596593a774
  10. 修复查询拼合器,使其可用于包含使用窗口函数的子查询的查询。机票709fcd17810f65f717
  11. 确保ALTER TABLE修改嵌入在视图和触发器的WITH子句中的表名和列名。
  12. 修复了一个解析器错误,该错误阻止在表值函数周围使用括号。
  13. 修正了该问题或优化表达式索引。票证d96eba87698a428c1d
  14. 修复了LEFT JOIN强度降低优化的问题,该问题 由于IS NOT NULL运算符而不适当地应用了该优化。机票5948e09b8c415bc45d
  15. 修复REPLACE命令,以便即使NOT NULL列的默认值为NULL,也无法再将NULL值潜入NOT NULL列。门票e6f1f2e34dceeb1ed6
  16. 解决在 相关子查询中使用窗口函数的问题。门票D0866B26F83E9C55E3
  17. 修复ALTER TABLE RENAME COLUMN命令,使其适用于具有冗余UNIQUE约束的表。门票bc8d94f0fbd633fd9a
  18. 修复了一个错误,该错误导致在插入使用表达式索引的表时,zeroblob值被截断。门票bb4bdb9f7f654b0bb9

    散列:

  19. SQLITE_SOURCE_ID:“ 2019-02-07 17:02:52 97744701c3bd414e6c9d7182639d8c2ce7c​​f124c4fce625071ae65658ac61713”
  20. 适用于sqlite3.c的SHA3-256:ca01​​1a10ee8515b33e5643444b98ee3d74dc45d3ac766c3700320def52bc6aba

2018-12-01(3.26.0)

  1. 优化:对具有表达式索引的表进行UPDATE时,如果表达式索引未引用要更新的表的任何列,则不要更新表达式索引。
  2. 允许虚拟表实现的xBestIndex()方法返回 SQLITE_CONSTRAINT,以指示建议的查询计划不可用,不应作进一步考虑。
  3. 添加了SQLITE_DBCONFIG_DEFENSIVE选项,该选项禁用了使用普通SQL创建损坏的数据库文件的功能。
  4. 启用SQLITE_DBCONFIG_DEFENSIVE选项时,添加了对只读影子表的支持。
  5. 添加了PRAGMA legacy_alter_table命令,如果启用该命令,则该 ALTER TABLE命令的行为类似于旧版本的SQLite(3.25.0之前的版本),以实现兼容性。
  6. 添加了PRAGMA table_xinfo,其功能与PRAGMA table_info 相同,除了它还在虚拟表中显示隐藏的列
  7. 添加了说明虚拟表 作为运行时可加载扩展。
  8. 向查询计划器添加一个限制计数器,以防止某些病理SQL输入出现过多的 sqlite3_prepare()时间。
  9. 使用SQLITE_ENABLE_NORMALIZE进行编译时,增加了对sqlite3_normalized_sql()接口的支持。
  10. 增强的触发器,以便他们可以使用除定义触发器的模式之外的其他模式中存在的表值函数
  11. CLI的增强功能:
    1. 改进了“ .help”命令。
    2. SQLITE_HISTORY环境变量(如果存在)指定命令行编辑历史记录文件的名称
    3. 与打开新数据库关联的--deserialize选项导致将数据库文件读入内存并使用sqlite3_deserialize() API进行访问 。这简化了在数据库上运行测试,而无需修改磁盘上的文件。
  12. 地理扩展的增强功能:
    1. 始终使用二进制格式存储多边形,这样速度更快且占用空间更少。
    2. 添加了geopoly_regular()函数。
    3. 添加了geopoly_ccw()函数。
  13. 会话扩展的增强功能:
    1. 添加了SQLITE_CHANGESETAPPLY_INVERT标志
    2. 添加了sqlite3changeset_start_v2()接口和 SQLITE_CHANGESETSTART_INVERT标志。
    3. 添加了 changesetfuzz.c 测试用例生成器实用程序。

    散列:

  14. SQLITE_SOURCE_ID:“ 2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9”
  15. sqlite3.c的SHA3-256:72c08830da9b5d1cb397c612c0e870d7f5eb41a323b41aa3d8aa5ae9ccedb2c4

2018-11-05(3.25.3)

  1. 禁止在CTE的递归部分中使用窗口函数。门票e8275b415a2f03bee
  2. 修复虚拟表上typeof()和length()的行为。门票 69d642332d25aa3b7315a6d385
  3. 加强针对故意损坏的数据库文件的防御。
  4. 修复了将行值表达式与带有冗余列的PRIMARY KEY一起使用时在查询计划程序中导致的问题。门票 1a84668dcfdebaf12415d
  5. 修复查询计划程序,使其对于带有SQLITE_ENABLE_STAT4编译时选项的LEFT JOIN的ON子句中的IS NOT NULL运算符正确运行。 65eb38f6e46de8c75e188a17ec

    散列:

  6. SQLITE_SOURCE_ID:“ 2018-11-05 20:37:38 89e099fbe5e13c33e683bef07361231ca525b88f7907be7092058007b75036f2”
  7. sqlite3.c的SHA3-256:45586e4df74de3a43f3a1f8c7a78c3c3f02edce01af7d10cafe68bb94476a5c5

2018-09-25(3.25.2)

  1. 添加PRAGMA legacy_alter_table = ON命令,该命令使“ ALTER TABLE RENAME”命令的行为与SQLite 3.24.0及更早版本中的行为相同:触发器和视图主体中对重命名表的引用不会更新。这个新的实用程序为期望较旧的ALTER TABLE RENAME较旧行为的程序提供了兼容性解决方案。
  2. 修复了新的窗口函数实现的问题,当在视图内部使用涉及窗口函数的复杂表达式时,该问题会导致故障。
  3. 修复了其他各种编译器警告以及与晦涩的配置相关的小问题。

    散列:

  4. SQLITE_SOURCE_ID:“ 2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7”
  5. sqlite3.c的SHA3-256:34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af

2018-09-18(3.25.1)

  1. 当要修改的表具有更新虚拟表的触发器时,在3.25.0版本中添加到ALTER TABLE的额外的完整性检查有时会引发假阳性。误报使ALTER TABLE回滚,从而使架构保持不变。机票b41031ea2b537237
  2. 3.25.0版本中针对与ORDER BY LIMIT优化相关联的字节码中的无限循环的修复不适用于某些涉及窗口函数的查询。需要进行其他更正。门票 510cde277783b5fb

    散列:

  3. SQLITE_SOURCE_ID:“ 2018-09-18 20:20:44 2ac9003de44da7dafa3fbb1915ac5725a9275c86bf2f3b7aa19321bf1460b386”
  4. sqlite3.c的SHA3-256:1b2302e7a54cc99c84ff699a299f61f069a28e1ed090b89e4430ca80ae2aab06

2018-09-15(3.25.0)

  1. 添加对窗口功能的支持
  2. 增强了ALTER TABLE命令:
    1. 添加对使用ALTER TABLERENAME COLUMN oldname TO newname重命名表中列的支持。
    2. 修复表重命名功能,以便它还可以在触发器视图中更新对重命名表的引用。
  3. 查询优化器改进:
    1. 避免在聚合查询中不在聚合函数内且不属于GROUP BY子句的不必要的列加载。
    2. IN-early-out优化:在多列索引上查找并且在除最左边的列以外的其他列上使用IN运算符时,如果没有任何行与第一个IN值匹配,请检查以在继续下一个IN值之前,请确保存在与右列匹配的行。
    3. 使用可传递属性尝试在WHERE子句中传播常量值。例如,将“ a = 99 AND b = a”转换为“ a = 99 AND b = 99”。
  4. 在unix VFS中的每个inode上使用单独的互斥锁,而不是在它们之间共享一个互斥锁,以便在多线程环境中实现更好的并发性。
  5. 增强PRAGMA完整性检查命令,以改进对页面空闲列表中问题的检测。
  6. 命令行shell的“ .dump”命令中将无穷大输出为1e999 。
  7. 添加了SQLITE_FCNTL_DATA_VERSION文件控件。
  8. 添加了Geopoly模块

    Bug修复:

  9. 由于查询优化器中的次要缺陷的汇合,在非常晦涩的情况下,ORDER BY LIMIT优化可能导致预准备语句的字节码中出现无限循环。修复票号 9936b2fa443fec03ff25
  10. 在UPSERT上,如果重新排列了约束检查的顺序,请确保对插入内容的亲和力转换发生在任何约束检查之前。修复票 79cad5e4b2e219dd197242e9e的问题
  11. 在被“ .eqp full”逻辑关闭后,请避免对CLI的“ .stats on”命令使用准备好的语句 。修复票证 7be932dfa60a8a6b3b26bcf76
  12. LIKE优化生成了错误的字节码,因此如果左侧操作数具有数字亲和力且右侧模式为'/%'或模式以ESCAPE字符开头,则会得到错误的答案。票证c94369cae9b561b1f996d0054b的修复

    散列:

  13. SQLITE_SOURCE_ID:“ 2018-09-15 04:01:47 b63af6c3bd33152742648d5d2e8dc5d5fcbcdd27df409272b6aea00a6f761760”
  14. sqlite3.c的SHA3-256:989e3ff37f2b5eea8e42205f808ccf0ba86c6ea6aa928ad2c011f33a108ac45d

2018-06-04(3.24.0)

  1. 添加对PostgreSQL风格的UPSERT的支持。
  2. 添加对r-tree表中辅助列的支持。
  3. 添加用于发现SQLite使用的SQL关键字的C语言API:sqlite3_keyword_count()sqlite3_keyword_name()sqlite3_keyword_check()
  4. 为基于sqlite3_str对象的动态字符串添加C语言API 。
  5. 增强ALTER TABLE,使其可以将“ true”和“ false”识别为DEFAULT的有效参数。
  6. 将排序器引用优化添加为编译时选项。仅在使用SQLITE_ENABLE_SORTER_REFERENCES编译时可用。
  7. 改进EXPLAIN QUERY PLAN原始输出的格式,以便它提供有关查询计划以及计划中各个组件之间的关系的更好信息。
  8. sqlite3_db_config() API中添加了SQLITE_DBCONFIG_RESET_DATABASE选项 。

    CLI增强功能:

  9. 自动截取原始的EXPLAIN QUERY PLAN 输出并将其重新格式化为ASCII图形。
  10. 以“#”开头但不在SQL语句中间的行被解释为注释。
  11. 在“ .backup”命令中添加了--append选项。
  12. 添加了“ .dbconfig”命令。

    表现:

  13. 当数据库文件的内容没有实际更改时,UPDATE避免了不必要的低级磁盘写入。例如,“ UPDATE t1 SET x = 25 WHERE y =?” 如果x列中的值已经为25,则不会生成额外的磁盘I / O。类似地,当对跨越多个页面的记录进行UPDATE时,只有实际更改的页面子集才会写入磁盘。这仅是低级别的性能优化,不会影响TRIGGER或其他更高级别的SQL结构的行为。
  14. 现在,使用ORDER BY和LIMIT的查询会尝试避免计算可能无法进入LIMIT以下的行。这可以大大提高ORDER BY LIMIT查询的性能,尤其是当LIMIT相对于不受限制的输出行数较小时。
  15. OR优化被允许继续进行,即使OR表达还转换成中的表达。现在,在EXPLAIN QUERY PLAN输出中也更清楚地显示了OR优化 的用法
  16. 查询计划者对于无法为其创建持久索引的视图和子查询使用自动索引更具攻击 性。
  17. 在适当的地方,使用R-Tree扩展中的一遍UPDATE和DELETE查询计划 。
  18. LEMON生成的解析器中的性能改进。

    Bug修复:

  19. 对于LEFT JOIN的右侧表,直接计算表达式的值,而不是从表达式索引中加载预先计算的值,因为表达式索引可能不包含正确的值。机票 7fa8049685b50b5aeb0c2
  20. 不要尝试使用WHERE子句中的术语来启用对LEFT JOIN右侧表的索引查找。门票 4ba5abf65c5b0f9a96a7a
  21. 修复了在CSV虚拟表中无法打开错误后可能发生的内存泄漏
  22. 修复了一个长期存在的问题,其中AUTOINCREMENT使用的sqlite_sequence表上的架构损坏 会导致崩溃。门票 d8dc2b3a58cd5dc2918a1
  23. 修复json_each()函数,以便当输入是简单值而不是数组或对象时,它在其“ fullkey”列上返回有效结果。

    散列:

  24. SQLITE_SOURCE_ID:“ 2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca”
  25. sqlite3.c的SHA3-256:0d384704e1c66026228336d1e91771d295bf688c9c44c7a44f25a4c16c26ab3c

2018-04-10(3.23.1)

  1. 修复了新的LEFT JOIN强度折减优化中的两个问题。门票1e39b966ae9ee739fac496b61722daf2
  2. 修复FTS5 xBestIndex方法的异常行为。票证 2b8aed9f7c9e61e8
  3. 修复对未初始化的虚拟机寄存器的无害引用。机票093420fc0eb7cba7
  4. 修复CLI,以便使用-DSQLITE_UNTESTABLE进行构建
  5. 修复eval.c扩展名,使其与PRAGMA empty_result_callbacks = ON一起使用
  6. 修复generate_series虚拟表,以使其在任何约束为NULL的情况下都不会正确返回任何行。
  7. 解析器中的性能增强。

    散列:

  8. SQLITE_SOURCE_ID:“ 2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b”
  9. sqlite3.c的SHA3-256:65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc

2018-04-02(3.23.0)

  1. 使用SQLITE_ENABLE_DESERIALIZE编译时选项时,添加sqlite3_serialize()sqlite3_deserialize()接口。
  2. 将TRUE和FALSE识别为常量。(出于兼容性考虑,如果存在名为“ true”或“ false”的列,则标识符引用这些列而不是布尔常量。)
  3. 支持运算符为“真”,“假”,“不真”和“不假”。
  4. sqlite3_db_status()中添加了SQLITE_DBSTATUS_CACHE_SPILL选项,以报告已发生的高速缓存溢出数量。
  5. 内置printf实现中的“ alternate-form-2”标志(“!”)现在导致字符串替换以字符而不是字节来度量宽度和精度。
  6. 如果虚拟表实现中的xColumn方法使用sqlite3_result_error()返回错误消息,则应优先选择该错误消息,而不是内部生成的消息。
  7. CLI中添加了-A命令行选项,以使其更易于管理 SQLite Archive文件
  8. Zipfile虚拟表中添加对INSERT OR REPLACE,INSERT OR IGNORE和UPDATE OR REPLACE的支持
  9. 增强sqlite3changeset_apply()接口,以使其免受来自故意损坏的变更集对象的攻击。
  10. 添加了sqlite3_normalize() 扩展功能。
  11. 查询优化器增强功能:
    1. 改进省略左连接优化,以使其在右侧表为UNIQUE但不一定为NOT NULL的情况下起作用。
    2. 改进下推优化,使其适用于许多LEFT JOIN。
    3. 添加LEFT JOIN强度降低优化,如果WHERE子句中存在可以防止LEFT JOIN的多余全空行出现在输出集中的条件,则该优化将LEFT JOIN转换为普通JOIN。
    4. 当用小于最大行数的rowid更新AUTOINCREMENT表时,避免不必要地写入sqlite_sequence表 。
  12. Bug修复:
    1. 修复解析器以接受有效的行值语法。门票7310e2fb3d046a5
    2. 修复查询计划程序,以便它考虑WHERE子句中子表达式中表值函数的参数中的依赖项。门票80177f0c226ff54
    3. 使用复杂的或连接的WHERE和STAT4修复错误的结果。门票ec32177c99ccac2
    4. 修复由于自动数据类型转换而导致表达式索引中潜在的损坏。机票343634942dd54ab
    5. FTS4中的断言错误。票证d6ec09eccf68cfc
    6. 在小于value的小于运算符上的结果不正确。门票f484b65f3d62305
    7. 即使整数部分为零,也始终将非零浮点值解释为TRUE。机票36fae083b450e3a
    8. 将fsdir(PATH)表值函数中的问题修复为 fileio.c扩展名,如果将fsdir()表用作联接的内部表,则会导致段错误。问题已在邮件列表中报告并由签入 7ce4e71c1b7251be解决
    9. 当sqlite_master表损坏时,发出错误而不是断言故障或空指针取消引用,以使sqlite_sequence表根页实际上是btree-index页。入住 525deb7a67fbd647
    10. 修复ANALYZE命令,以便它计算名称以“ sqlite”开头的表的统计信息。入住 0249d9aecf69948d
  13. 针对OSSFuzz检测到的问题的其他修复 :
    1. 修复VACUUM上可能损坏数据库文件的无限循环。入住27754b74ddf64
    2. 禁止在触发器和视图的WITH子句使用参数。入住B918D4B4E546D
    3. 修复行值处理中潜在的内存泄漏。入住2df6bbf1b8ca8
    4. 在兆字节大小的字符串上存在许多替换的情况下,请提高replace()SQL函数的性能,以免在测试期间出现OSSFuzz超时。登机fab2c2b07b5d3
    5. 当sqlite_master表包含CREATE TABLE AS语句时,提供适当的错误消息。以前,这会导致断言错误或空指针取消引用。OSSFuzz在GDAL项目上发现了问题。入住 D75E67654AA96
    6. 错误的assert()语句已删除。入住 823779d31eb09cda
    7. 解决了在INTEGER PRIMARY KEY上 使用LIKE优化的问题。入住 b850dd159918af56

    散列:

  14. SQLITE_SOURCE_ID:“ 2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2”
  15. sqlite3.c的SHA3-256:4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa

2018-01-22(3.22.0)

  1. sqlite3_trace_v2()的输出现在显示在触发器中运行的每个单独的SQL语句。
  2. 只要应用程序对数据库及其包含的目录缺少写许可权,只要该目录中存在-shm和-wal文件,就可以添加从WAL模式数据库中读取的功能。
  3. R-Tree扩展中添加了rtreecheck()标量SQL函数。
  4. 添加了sqlite3_vtab_nochange()sqlite3_value_nochange()接口,以帮助虚拟表实现优化UPDATE操作。
  5. 添加了sqlite3_vtab_collat​​ion()接口。
  6. 在FTS5中增加了对“ ^”初始令牌语法的支持。
  7. 新扩展名:
    1. zip文件虚拟表可以读取和写入一个 ZIP档案
    2. fileio.c扩展名中添加了fsdir(PATH)表值函数,用于列出目录中的文件。
    3. 所述sqlite_btreeinfo 同名虚拟表内省和估计在数据库中B树的尺寸。
    4. 追加VFSVFS垫片,其允许SQLite数据库要附加到某些其他文件。例如,这允许将数据库附加到可执行文件中,然后该可执行文件将打开并读取该数据库。
  8. 查询计划器增强功能:
    1. 使用索引来快速计算聚合min()或max()的优化已扩展为可 用于表达式的索引
    2. 现在是决定将FROM子句子查询实现为协同例程还是使用查询展平,这将 考虑外部查询的结果集是否为“复杂”(如果它包含函数或表达式子查询)。复杂的结果集使决策偏向使用协同例程。
    3. 计划程序避免使用带有未知整理功能的索引的查询计划。
    4. 计划程序会忽略未使用的LEFT JOIN,即使它们不是查询中最右边的联接。
  9. 其他性能优化:
    1. 文本到浮点转换子例程的更小,更快的实现:sqlite3AtoF()。
    2. 柠檬解析器生成器产生更快的解析器。
    3. 使用strcspn()C库例程可以加快LIKE和GLOB运算符的速度。
  10. 命令行外壳的改进:
    1. “ .schema”命令显示虚拟表的结构。
    2. 添加了对使用.archive命令读取和写入SQLite Archive文件的支持 。
    3. 添加了实验性.expert命令
    4. 添加了“ .eqp”命令的“ .eqp触发器”变体
    5. 增强“ .lint fkey-indexes”命令,使其与 WITHOUT ROWID表一起使用。
    6. 如果外壳程序的filename参数是ZIP存档而不是SQLite数据库,则外壳程序会使用Zipfile虚拟表自动打开该ZIP存档。
    7. 添加了edit()SQL函数
    8. 添加了.excel命令,以简化将数据库内容导出到电子表格的操作。
    9. 当在命令行上使用--append标志或通过.open命令使用Append VFS打开数据库 。
  11. 增强SQLITE_ENABLE_UPDATE_DELETE_LIMIT编译时选项,使其适用于WITHOUT ROWID表。
  12. 提供sqlite_offset(X) SQL函数,当使用-DSQLITE_ENABLE_OFFSET_SQL_FUNC进行编译时,该函数将数据库文件中的字节偏移量返回到记录保存值X的开头
  13. Bug修复:
    1. 在WHERE子句中使用OR运算符的UPDATE上的无限循环。问题在3.17.0中引入,并在大约一年后在邮件列表中报告。机票 47b2581aa9bfecec
    2. 使用跳过预先优化时,查询结果不正确。门票ef9318757b152e3a
    3. 使用ORDER BY DESC进行联接时查询结果不正确。票证 123c9ba32130a6c9
    4. CREATE TABLE AS和简单的SELECT之间的结果集列名称不一致。机票 3b4450072511e621
    5. 在表达式的索引上执行REPLACE时,断言错误。门票DC3F932F5A147771
    6. 在常数索引上执行IN运算符时,断言错误。门票aa98619ad08ddcab

    散列:

  14. SQLITE_SOURCE_ID:“ 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d”
  15. sqlite3.c的SHA3-256:206df47ebc49cd1710ac0dd716ce5de5854826536993f4feab7a49d136b85069

2017-10-24(3.21.0)

  1. 充分利用F2FS文件系统中的原子写入功能 ,以大大减少事务开销。当前,这需要 SQLITE_ENABLE_BATCH_ATOMIC_WRITE编译时选项。
  2. 允许ATTACHDETACH命令在事务内部运行。
  3. 如果PRIMARY KEY仅包含一列,则允许WITHOUT ROWID虚拟表可写。
  4. 现在,在WAL重置中写入标头后出现的“ fsync()”现在将同步设置用于检查点。这意味着,如果PRAGMA checkpoint_fullfsync设置为on ,它将在Mac上使用“ fullfsync” 。
  5. 所述sqlite3_sourceid()函数尝试检测如果源代码已经从什么签入版本控制改性,如果有改进,则版本散列的最后四个字符被显示为“ALT1”或“ALT2”。目的是检测意外和/或粗心的编辑。伪造者可以破坏此功能。
  6. 改进了CREATE TABLE AS语句的列名的引号引用,并在右侧进行了聚合查询。
  7. UNIX VFS发出的“ stat()”系统调用更少。
  8. 增强了LIKE优化,使其可以与ESCAPE子句一起使用。
  9. 增强的PRAGMA完整性检查PRAGMA快速检查功能,以检测以前丢失的模糊行损坏。同时更新两个编译指示,以使它们在遇到记录损坏时返回错误文本,而不是SQLITE_CORRUPT 。
  10. 现在,查询计划者更喜欢使用协例程而不是使用查询拼合器优化来实现FROM子句子查询 。不再可以禁用对子查询使用协同例程的支持。
  11. 将有关!=,IS,IS NOT,NOT NULL和IS NULL约束的信息传递到虚拟表的xBestIndex方法中。
  12. 增强了CSV虚拟表,以便在缺少最后一个换行符的情况下接受最后一行输入。
  13. 删除很少使用的“临时”内存分配器。将其替换为SQLITE_CONFIG_SMALL_MALLOC配置设置,该 配置设置为SQLite提供了一个提示,即应尽可能避免分配大量内存。
  14. swarm虚拟表添加 到现有的union虚拟表扩展中。
  15. 添加了 sqlite_dbpage虚拟表, 以提供对数据库文件页面的直接访问。源代码内置于合并中,并使用-DSQLITE_ENABLE_DBPAGE_VTAB编译时选项激活。
  16. 添加一种新的fts5vocab虚拟表类型-“ instance”-以最低级别直接访问FTS5全文索引。
  17. 在Windows VFS中删除对rand_s()的调用,因为它在某些旧笔记本电脑上的Firefox中引起了问题。
  18. 命令行shellsrc / shell.c源代码不再受版本控制。现在,将在构建过程中生成该文件。
  19. 其他microoptimizations减少约2.1%的CPU使用率。
  20. Bug修复:
    1. 修复OSSFuzz发现的错误assert()语句。门票cb91bf4290c211d
    2. 修复sqlite3_result_pointer()中晦涩的内存泄漏。机票7486aa54b968e9b
    3. 通过将架构重置推迟到查询计划程序完成运行之后,来避免可能的“售后使用”错误。门票be436a7f4587ce5
    4. 如果COLLATE正确,则仅使用基于索引的索引来优化ORDER BY或GROUP BY。门票e20dd54ab0e4383
    5. 修复当在索引上的表达式中的表达式确实是一个常量时出现的断言错误。门票AA98619AD08DDCA
    6. 修复了PRAGMA reverse_unordered_selects之后可能发生的断言错误 。门票cb91bf4290c211d
    7. 修复了在IN或EXISTS子查询中使用表值函数的查询可能发生的段错误。门票b899b6042f97f5
    8. 修复了在编译特定的可怕公用表表达式时可能出现的整数溢出问题。这是OSSFuzz发现的另一个问题。6ee8cb6ae5
    9. 修复了查询损坏的数据库文件时可能发生的越界读取的问题,这是Google Project Zero的Natalie Silvanovich检测到的问题。入住04925dee41a21f

    散列:

  21. SQLITE_SOURCE_ID:“ 2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827”
  22. sqlite3.c的SHA3-256:84c181c0283d0320f488357fc8aab51898370c157601459ebee49d779036fe03

2017-08-24(3.20.1)

  1. 修复新的sqlite3_result_pointer()接口中的潜在内存泄漏。机票7486aa54b968e9b5

    散列:

  2. SQLITE_SOURCE_ID:“ 2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34”
  3. sqlite3.c的SHA3-256:93b1a6d69b48dc39697d1d3a1e4c30b55da0bdd2cad0c054462f91081832954a

2017-08-01(3.20.0)

  1. sqlite3_errmsg()返回的错误消息文本更新为一些错误代码。
  2. 添加新的指针传递接口
  3. 对某些扩展的向后不兼容更改,以利用新的指针传递接口提供的改进的安全性 :
    1. 扩展FTS5 →需要sqlite3_bind_pointer()查找fts5_api指针。
    2. carray(PTR,N) →要求sqlite3_bind_pointer()设置PTR参数。
    3. 记住(V,PTR) →要求sqlite3_bind_pointer()设置PTR参数。
  4. 添加了SQLITE_STMT虚拟表扩展。
  5. 添加了COMPLETION扩展名-用于建议交互式用户界面的制表符完成。这是一个正在进行的工作。期望在将来的版本中进一步增强功能。
  6. 添加了UNION虚拟表扩展名。
  7. 内置的日期和时间函数得到了增强,因此它们可以用于CHECK约束表达式的索引以及部分索引的WHERE子句中,前提是它们不使用“ now”,“ localtime”,或“ utc”关键字。 更多信息
  8. 添加了带有额外“ prepFlags”参数的sqlite3_prepare_v3()sqlite3_prepare16_v3()接口。
  9. sqlite3_prepare_v3()提供SQLITE_PREPARE_PERSISTENT标志,并使用它来限制FTS3FTS5R-Tree扩展的后备内存滥用。
  10. 添加了PRAGMA secure_delete = FAST命令。当secure_delete设置为FAST时,只要不增加I / O量,旧内容就会被零覆盖。删除的内容可能仍会保留在空闲页面列表上,但将从所有b树页面中清除。
  11. 命令行外壳的增强功能:
    1. 使用COMPLETION扩展名添加对制表符补全的支持,用于读取行和行噪声。
    2. 添加“ .cd”命令。
    3. 增强“ .schema ”命令以显示所有连接的数据库的架构。
    4. 增强“ .tables ”,以便在名称不是“ main”以外的其他名称时显示所有附加的架构名称。
    5. .import ”命令将忽略初始的UTF-8 BOM。
    6. 在“ .dump ”命令中添加了“ --newlines”选项,以使U + 000a和U + 000d字符按原样输出,而不是使用replace()函数进行转义 。
  12. 查询计划器增强功能:
    1. 当为“或”扫描的每个“或”项生成单独的循环时,请将所有常量WHERE表达式移出循环,就像对顶级循环所做的那样。
    2. 查询计划程序检查绑定参数的值,以帮助确定部分索引是否可用。
    3. 在两个估计费用相同的计划之间进行选择时,应将选择偏向不使用分类器的计划。
    4. 最后评估涉及相关子查询的WHERE子句约束,希望它们从未被评估过。
    5. 如果子查询从虚拟表中读取数据,则不要在LEFT JOIN的RHS上对子查询使用扁平化优化,因为这样做会阻止查询计划程序 在子查询的结果上创建自动索引。查询。
  13. sqlite3_stmt_status()接口添加SQLITE_STMTSTATUS_REPREPARESQLITE_STMTSTATUS_RUNSQLITE_STMTSTATUS_MEMUSED选项 。
  14. 提供PRAGMA函数,用于 PRAGMA完整性检查PRAGMA quick_checkPRAGMA foreign_key_check
  15. 将-withoutnulls选项添加到TCL接口eval方法
  16. 增强sqlite3_analyzer.exe实用程序,使其在btree页面上显示元数据的字节数。
  17. SQLITE_DBCONFIG_ENABLE_QPSG运行时间选项和 SQLITE_ENABLE_QPSG编译时选项来启用 查询规划的稳定性保证。另请参阅票证 892fc34f173e99d8
  18. 其他优化可将使用的CPU周期减少2%。

    Bug修复:

  19. 对于使用扁平化优化的查询,请 修复sqlite3_column_name()的行为,以使结果与不使用该优化的其他查询以及PostgreSQL,MySQL和SQLServer一致。门票de3403bf5ae
  20. 修复查询计划程序,以便 如果WHERE子句使用IS运算符,则它不知道在LEFT JOIN的右表上不使用自动索引。修复ce68383bf6aba
  21. 确保查询计划程序知道拼合的LEFT JOIN的任何列 都可以为NULL,即使该列标记有“ NOT NULL”。修复票务 892fc34f173e99d8
  22. 当在具有附加数据库的数据库连接上运行时,修复PRAGMA integrity_check中罕见的假阳性。门票 a4e06e75a9ab61a12
  23. 如果使用某些狡猾的CREATE TABLE声明,请修复导致断言错误的错误(由OSSFuzz发现)。门票 bc115541132dad136

    散列:

  24. SQLITE_SOURCE_ID:“ 2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8”
  25. sqlite3.c的SHA3-256:79b7f3b977360456350219cba0ba0e5eb55910565eab68ea83edda2f968ebe95

2017-06-17(3.18.2)

  1. 修复了在WHERE子句中使用IN运算符时可能导致输出行重复的问题。门票61fe9745

    散列:

  2. SQLITE_SOURCE_ID:“ 2017-06-17 09:59:36 036ebf729e4b21035d7f4f8e35a6f705e6bf99887889e2dc14ebf2242e7930dd”
  3. sqlite3.c的SHA3-256:b0bd014f2776b9f9508a3fc6432f70e2436bf54475369f88f0aeef75b0eec93e

2017-06-16(3.18.1)

  1. 修复了与auto_vacuum相关的错误,该错误可能导致数据库损坏。该错误是在3.16.0版(2017-01-02)中引入的。机票fda22108

    散列:

  2. SQLITE_SOURCE_ID:“ 2017-06-16 13:41:15 77bb46233db03a3338bacf7e56f439be3dfd1926ea0c44d252eeafa7a7b31c06”
  3. sqlite3.c的SHA3-256:334eaf776db9d09a4e69d6012c266bc837107edc2c981739ef

2017-06-08(3.19.3)

  1. 修复了与auto_vacuum相关的错误,该错误可能导致数据库损坏。该错误是在3.16.0版(2017-01-02)中引入的。机票fda22108

    散列:

  2. SQLITE_SOURCE_ID:“ 2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b”
  3. sqlite3.c的SHA3-256:368f1d31272b1739f804bcfa5485e5de62678015c4adbe575003ded85c164bb8

2017-05-25(3.19.2)

  1. 修复LEFT JOIN展平优化中的更多错误。机票 7fde638e94287d2c

    散列:

  2. SQLITE_SOURCE_ID:“ 2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9”
  3. sqlite3.c的SHA3-256:1be0c457869c1f7eba58c3b5097b9ec307a15be338308bee8e5be8570bcf5d1e

2017-05-24(3.19.1)

  1. 修复了LEFT JOIN展平优化中的错误。票证 cad1ab4cb7b0fc
  2. 删除多余的分号,该多余的分号导致旧版本的MSVC出现问题。

    散列:

  3. SQLITE_SOURCE_ID:“ 2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86”
  4. sqlite3.c的SHA3-256:996b2aff37b6e0c6663d0312cd921bbdf6826c989cbbb07dadde5e9672889bca

2017-05-22(3.19.0)

  1. SQLITE_READ 授权回调被调用一次与列名是在从没有列被提取的查询中引用的每个表一个空字符串。
  2. 在表达式上使用索引时,请尝试使用索引中已经可用的表达式值,而不是加载原始列并重新计算表达式。
  3. 增强展平优化,使其能够展平左侧联接右侧的视图。
  4. 使用replace()代替char()来转义嵌入在命令行shell .dump输出中的字符串中的换行符和回车符。
  5. 避免在UPDATE语句中避免不必要的外键处理,这些操作不会接触到受外键约束的列。
  6. 在使用索引的DISTINCT查询上,尝试在有适当索引的情况下使用索引跳至下一个不同的条目,而不要单步执行行。
  7. 对不相关的表进行更改时,请避免不必要的sqlite3_blob句柄无效化。
  8. 将仅使用GROUP BY子句中提到的列的HAVING子句的所有术语转移到WHERE子句中,以加快处理速度。
  9. 如果一个视图在同一查询中出现多次,请重用该视图的相同实现。
  10. 增强PRAGMA integrity_check,以便它标识具有两个或更多行且具有相同rowid的表
  11. 增强FTS5查询语法,以便 可以将列过滤器应用于任意表达式。
  12. 增强json_extract()函数以缓存和重用JSON输入文本的解析。
  13. 添加了anycollseq.c 可加载扩展,该扩展允许通用SQLite数据库连接读取包含未知和/或特定于应用程序的整理序列的模式

    Bug修复:

  14. 修复了REPLACE中的一个问题,该问题可能导致包含两个或多个具有相同rowid的行的数据库损坏。修复票证 f68dc596c4e6018d
  15. 修复PRAGMA完整性检查中的一个问题,该问题导致随后的 VACUUM表现欠佳。
  16. 修复PRAGMA foreign_key_check命令,以便它可以与WITHOUT ROWID表上的外键一起正常使用。
  17. 修复了b树逻辑中的一个错误,该错误可能导致IN运算符查询的重复答案不正确。门票 61fe9745
  18. 禁止在JSON中的数字常量中使用前导零。修复票务 b93be8729a895a528e2
  19. 禁止在JSON中的字符串内使用控制字符。修复票证 6c9b5514077fed34551
  20. 限制JSON对象和数组的递归深度,以避免递归下降解析器中过多的堆栈使用。修复票 981329adeef51011052

    散列:

  21. SQLITE_SOURCE_ID:“ 2017-05-22 13:58:13 28a94eb282822cad1d1420f2dad6bf65e4b8b9062eda4a0b9ee8270b2c608e40”
  22. sqlite3.c的SHA3-256:c30326aa1a9cc342061b755725eac9270109acf878bc59200dd4b1cea6bc2908

2017-03-30(3.18.0)

  1. 添加了PRAGMA优化命令
  2. sqlite_source_id() SQL函数和sqlite3_sourceid() C API返回并在SQLITE_SOURCE_ID宏中找到的SQLite版本标识符现在是64位SHA3-256哈希,而不是40位SHA1哈希。
  3. JSON1扩展中添加了json_patch() SQL函数。
  4. 增强LIKE优化,以便它适用于左侧的任意表达式,只要右侧的LIKE模式不以数字或减号开头即可。
  5. 添加了sqlite3_set_last_insert_rowid()接口,并在FTS3FTS4FTS5扩展中使用新接口,以确保sqlite3_last_insert_rowid() 接口始终返回合理的值。
  6. 增强PRAGMA完整性检查PRAGMA快速检查,以便它们验证 CHECK约束
  7. 增强用于联接的查询计划,以尽早发现并暂停空表,而无需执行不必要的工作。
  8. 增强sqlite3_mprintf()系列接口和printf SQL函数 ,如果在“%”和“ d”之间使用“,”格式修饰符(例如:“%, d”)。
  9. 添加了-D SQLITE_MAX_MEMORY = N编译时选项。
  10. 命令行外壳中添加了.sha3sum点命令.selftest点命令
  11. 开始执行SQLITE_LIMIT_VDBE_OP。例如,这可以用于防止在接受来自不受信任用户的SQL查询的系统中准备过多的语句。
  12. 各种性能改进。

    Bug修复:

  13. 确保带有整理序列的索引表达式得到正确处理。修复票务eb703ba7b50c1a5
  14. 修复了日期和时间函数的“ ...开始”修饰符中的一个错误。机票6097cb92745327a1
  15. 修复了由于在3.15.0版中作为性能优化的一部分而引入的OP_Once操作码中的错误导致的复杂递归触发器中的潜在段错误。机票06796225f59c057c
  16. RBU扩展中,添加额外的同步操作以避免电源故障后损坏的可能性。
  17. 嵌套SQL语句的sqlite3_trace_v2()输出应始终以“-”注释标记开头。

    散列:

  18. SQLITE_SOURCE_ID:“ 2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37”
  19. sqlite3.c的SHA3-256:cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d

2017-02-13(3.17.0)

  1. R-Tree扩展将性能提高约25%。
    1. 使用编译器内置程序(例如__builtin_bswap32()或_byteswap_ulong())进行字节交换(如果可用)。
    2. 使用sqlite3_blob键/值访问对象而不是SQL从R-Tree节点中拉出内容
    3. 其他杂项增强功能,例如循环展开。
  2. 添加SQLITE_DEFAULT_LOOKASIDE编译时选项。
  3. Increase the default lookaside size from 512,125 to 1200,100 as this provides better performance while only adding 56KB of extra memory per connection. Memory-sensitive applications can restore the old default at compile-time, start-time, or run-time.
  4. Use compiler built-ins __builtin_sub_overflow(), __builtin_add_overflow(), and __builtin_mul_overflow() when available. (All compiler built-ins can be omitted with the SQLITE_DISABLE_INTRINSIC compile-time option.)
  5. Added the SQLITE_ENABLE_NULL_TRIM compile-time option, which can result in significantly smaller database files for some applications, at the risk of being incompatible with older versions of SQLite.
  6. Change SQLITE_DEFAULT_PCACHE_INITSZ from 100 to 20, for improved performance.
  7. Added the SQLITE_UINT64_TYPE compile-time option as an analog to SQLITE_INT64_TYPE.
  8. Perform some UPDATE operations in a single pass instead of in two passes.
  9. Enhance the session extension to support WITHOUT ROWID tables.
  10. Fixed performance problems and potential stack overflows when creating views from multi-row VALUES clauses with hundreds of thousands of rows.
  11. Added the sha1.c extension.
  12. In the command-line shell, enhance the ".mode" command so that it restores the default column and row separators for modes "line", "list", "column", and "tcl".
  13. Enhance the SQLITE_DIRECT_OVERFLOW_READ option so that it works in WAL mode as long as the pages being read are not in the WAL file.
  14. Enhance the Lemon parser generator so that it can store the parser object as a stack variable rather than allocating space from the heap and make use of that enhancement in the amalgamation.
  15. Other performance improvements. Uses about 6.5% fewer CPU cycles.

    Bug Fixes:

  16. Throw an error if the ON clause of a LEFT JOIN references tables to the right of the ON clause. This is the same behavior as PostgreSQL. Formerly, SQLite silently converted the LEFT JOIN into an INNER JOIN. Fix for ticket 25e335f802dd.
  17. Use the correct affinity for columns of automatic indexes. Ticket 7ffd1ca1d2ad4ec.
  18. Ensure that the sqlite3_blob_reopen() interface can correctly handle short rows. Fix for ticket e6e962d6b0f06f46e.

    Hashes:

  19. SQLITE_SOURCE_ID: "2017-02-13 16:02:40 ada05cfa86ad7f5645450ac7a2a21c9aa6e57d2c"
  20. SHA1 for sqlite3.c: cc7d708bb073c44102a59ed63ce6142da1f174d1

2017-01-06 (3.16.2)

  1. Fix the REPLACE statement for WITHOUT ROWID tables that lack secondary indexes so that it works correctly with triggers and foreign keys. This was a new bug caused by performance optimizations added in version 3.16.0. Ticket 30027b613b4
  2. Fix the sqlite3_value_text() interface so that it correctly translates content generated by zeroblob() into a string of all 0x00 characters. This is a long-standing issue discovered after the 3.16.1 release by OSS-Fuzz
  3. Fix the bytecode generator to deal with a subquery in the FROM clause that is itself a UNION ALL where one side of the UNION ALL is a view that contains an ORDER BY. This is a long-standing issue that was discovered after the release of 3.16.1. See ticket 190c2507.
  4. Adjust the sqlite3_column_count() API so it more often returns the same values for PRAGMA statements as it did in prior releases, to minimize disruption to applications that might be using that interface in unexpected ways.

    Hashes:

  5. SQLITE_SOURCE_ID: "2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209"
  6. SHA1 for sqlite3.c: 2bebdc3f24911c0d12b6d6c0123c3f84d6946b08

2017-01-03 (3.16.1)

  1. 修复了有关在触发器中使用行值的错误 (请参见故障8c9458e7),该错误在3.15.0版本中,但是直到3.16.0版本发布后才报告。

    散列:

  2. SQLITE_SOURCE_ID:“ 2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd”
  3. sqlite3.c的SHA1:354f6223490b30fd5320b4066b1535e4ce33988d

2017-01-02(3.16.0)

  1. 使用的CPU周期减少了9%。(有关如何计算此性能提升的详细信息,请参阅CPU性能评估报告。)
  2. 增加了对PRAGMA功能的实验支持。
  3. sqlite3_db_config()中添加了SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE选项。
  4. 增强日期和时间功能,以使“ unixepoch”修饰符可在受支持日期的整个范围内使用。
  5. 后备内存分配器的默认配置从每个128个字节的500个插槽更改为每个512个字节的125个插槽。
  6. 增强的“ WHERE x NOT NULL”部分索引,以便在“ x”列出现在LIKE或GLOB运算符中时可以使用。
  7. 增强的sqlite3_interrupt(),以便中断正在进行的检查点操作。
  8. 增强了LIKEGLOB匹配算法,以在模式包含多个通配符的情况下更快。
  9. 添加了SQLITE_FCNTL_WIN32_GET_HANDLE文件控件操作码。
  10. 命令行shell中添加了“ .mode quote” 。
  11. 命令行shell中添加了“ .lint fkey-indexes” 。
  12. 命令行shell中添加了.imposter dot-command
  13. 添加了Remember(V,PTR) SQL函数作为可加载的扩展
  14. SQLITE_OMIT_BUILTIN_TEST编译时选项重命名为 SQLITE_UNTESTABLE,以更好地反映使用它的含义。

    Bug修复:

  15. 修复了查询计划器中的一个长期错误,该错误在LEFT JOIN上导致错误的结果,在LEFT JOIN上,左侧表是子查询,而联接约束是来自左侧子查询的裸列名称。票证 2df0107b
  16. 在查询计划程序中正确处理整数文字-0x8000000000000000。

    散列:

  17. SQLITE_SOURCE_ID:“ 2017-01-02 11:57:58 04ac0b75b1716541b2b97704f4809cb7ef19cccf”
  18. sqlite3.c的SHA1:e2920fb885569d14197c9b7958e6f1db573ee669

2016-11-28(3.15.2)

  1. 对3.15.0版中引入的行值逻辑的多个错误修复。
  2. 在恶意构造的语法错误之后,修复ATTACH / DETACH中的NULL指针取消引用。门票 2f1b168ab4d4844
  3. 修复了内置instr()函数中由于内存不足而导致的崩溃。
  4. JSON扩展名中,修复JSON验证程序,以使其正确拒绝字符串中的无效反斜杠转义符。

    散列:

  5. SQLITE_SOURCE_ID:“ 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8”
  6. sqlite3.c的SHA1:06d77b42a3e70609f8d4bbb97caf53652f1082cb

2016-11-04(3.15.1)

  1. 添加了SQLITE_FCNTL_WIN32_GET_HANDLE文件控件操作码。
  2. 修复VACUUM命令,以便将多余的内容溢出到磁盘上,而不是将所有内容都保存在内存中,并可能导致较大的数据库文件出现内存不足错误。这解决了3.15.0版引入的问题。
  3. 修复一种情况(自3.8.0-2013-08-26开始),在这种情况下,LEFT JOIN的ON子句中的OR连接术语可能导致错误的结果。机票 34a579141b2c5ac
  4. 修复了在LEFT JOIN的ON子句中使用行值可能导致错误结果的情况。门票 fef4bb4bd9185ec8f

    散列:

  5. SQLITE_SOURCE_ID:“ 2016-11-04 12:08:49 1136863c76576110e710dd5d69ab6bf347c65e36”
  6. sqlite3.c的SHA1:e7c26a7be3e431dd06898f8d262c4ef240c07366

2016-10-14(3.15.0)

  1. 增加了对行值的支持。
  2. 部分索引的WHERE子句中允许确定性SQL函数
  3. 在Unix VFS上添加了“ modeof = filename ” URI参数
  4. 添加了对SQLITE_DBCONFIG_MAINDBNAME的支持。
  5. 添加了对ATTACH版本的数据库进行VACUUM功能
  6. 命令行外壳的增强功能:
    1. 添加“ .testcase”和“ .check”点命令
    2. 在“ .open”点命令中添加了--new选项,从而可以在打开数据库之前清除数据库中的所有先前内容。
  7. 增强fts5vocab虚拟表以有效处理“ ORDER BY term”。
  8. 各种其他的微优化措施将普通工作负载的CPU使用率降低了7%以上。此版本中的大多数优化都在前端(sqlite3_prepare_v2())上进行。

    Bug修复:

  9. 现在,乘法运算符可以正确检测到64位整数溢出,并在所有转折情况下都提升为浮点数。修复票 1ec41379c9c1e400
  10. 当在IN运算符的LHS上使用具有冗余唯一索引的列时,请正确处理这些列。修复故障0eab1ac759
  11. 在表达式的索引中跳过范围查询中的NULL条目。修复票 4baa46491212947
  12. 确保通过在“ INSERT ... SELECT”语句上执行“ Xfer Optimization”来初始化sqlite_sequence表中的AUTOINCREMENT计数器。修复票 7b3328086a5c116c
  13. 确保ORDER BY LIMIT优化(来自检入559733b09e)可与INTEGER PRIMARY KEY上的IN运算符一起使用。修复票务 96C1454C

    散列:

  14. SQLITE_SOURCE_ID:“ 2016-10-14 10:20:30 707875582fcba352b4906a595ad89198d84711d8”
  15. sqlite3.c的SHA1:fba106f8f6493c66eeed08a2dfff0907de54ae76

2016-09-12(3.14.2)

  1. 改进了对在winsqlite3.dll中使用STDCALL调用约定的支持。
  2. 修复sqlite3_trace_v2()接口,以便根据文档,如果回调或mask参数为零,则将其禁用。
  3. 使用-DSQLITE_ENABLE_EXPLAIN_COMMENTS编译时选项时,修复注释错误并改进EXPLAIN列表上生成的注释。
  4. 命令行外壳中修复“ .read”命令,以使其了解其输入不是交互式的。
  5. 在IN运算符的RHS上为SELECT校正正确的亲和力计算。修复票199df4168c
  6. 除非查询计划实际使用了最里面的IN运算符循环,否则ORDER BY LIMIT优化无效。修复故障0c4df46116e90f92
  7. 修复了一个内部代码生成器问题,该问题导致某些DELETE操作变为无操作。门票ef360601

    散列:

  8. SQLITE_SOURCE_ID:“ 2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6”
  9. sqlite3.c的SHA1:bcc4a1989db45e7f223191f2d0f66c1c28946383

2016-08-11(3.14.1)

  1. 页面高速缓存“截断”操作的性能增强在具有大页面高速缓存的系统上将COMMIT时间减少了数十毫秒。
  2. 固定到的--rbu选项sqldiff

    散列:

  3. SQLITE_SOURCE_ID:“ 2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b”
  4. sqlite3.c的SHA1:d545b24892278272ce4e40e0567d69c8babf12ea

2016-08-08(3.14)


    用自制的馅饼庆祝SQLite的“ π版本”。
  1. 增加了对WITHOUT ROWID虚拟表的支持。
  2. 改进了查询计划程序,以便即使一个或多个析取项使用LIKEGLOBREGEXPMATCH运算符,也可以在虚拟表上使用OR优化
  3. 添加了CSV虚拟表,用于读取 RFC 4180格式的逗号分隔值文件。
  4. 添加了carray()表值函数扩展。
  5. 使用新的 SQLITE_OK_LOAD_PERMANENTLY返回代码从扩展入口点启用的持久性可加载扩展
  6. sqlite3_db_status()中添加了SQLITE_DBSTATUS_CACHE_USED_SHARED选项。
  7. 添加 vfsstat.c 可加载扩展-一个测量I / O的VFS填充程序以及一个提供访问测量结果的同名虚拟表
  8. 使用ORDER BY和LIMIT来运行查询的改进算法,其中只有最内部的循环自然会以正确的顺序生成行。
  9. Lemon解析器生成器的增强功能,使其生成更快的解析器。
  10. PRAGMA compile_options现在命令尝试表明,所产生的库编译器的版本号。
  11. 增强PRAGMA table_info,使其提供有关 同名虚拟表的信息
  12. 添加了类似于“ unix-none” VFS的“ win32-none” VFS,其工作方式类似于默认的“ win32” VFS,只是它忽略了所有文件锁定。
  13. 在这种情况下,查询计划程序将使用部分索引的完整扫描而不是主表的完整扫描。
  14. 允许表值函数出现在IN运算符的右侧。
  15. 创建了dbhash.exe命令行实用程序。
  16. 添加了两个新的C语言接口:sqlite3_expanded_sql()sqlite3_trace_v2()。这些新接口包含了现在不推荐使用的sqlite3_trace()sqlite3_profile()函数 。
  17. 在json1扩展名中添加了json_quote() SQL函数。
  18. 重新解析架构时,请禁用授权者回调
  19. 添加了SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION编译时选项,并在构建命令行shell时默认情况下将其打开。

    Bug修复:

  20. 修复ALTER TABLE命令,以便 在将列添加到旧文件格式数据库时不会破坏降序索引。门票 f68bf68513a1c15f
  21. 修复了当传递WHERE子句引用不存在的整理序列时可能发生的NULL指针取消引用/崩溃。票证 e8d439c77685eca6
  22. 改进了包含WHERE子句的索引扫描的成本估算,该索引可以使用索引中的列进行部分或完全评估,而无需执行表查找。这修复了在3.12.0版中引入的ORDER BY LIMIT优化之后某些晦涩的查询所发生的性能下降

    散列:

  23. SQLITE_SOURCE_ID:“ 2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de”
  24. sqlite3.c的SHA1:234a3275d03a287434ace3ccdf1afb208e6b0e92

2016-05-18(3.13.0)

  1. 尽可能长地延迟与TEMP文件关联的I / O,希望最终可以完全避免I / O。
  2. 合并的会议延长到躯干。
  3. 命令行shell中添加了“ .auth ON | OFF”命令。
  4. 命令行shell的“ .schema”和“ .fullschema”命令中添加了“ --indent”选项,以启用漂亮打印。
  5. 命令行shell中添加了“ .eqp full”选项,该选项对每个求值语句执行EXPLAINEXPLAIN QUERY PLAN
  6. Windows命令行外壳中改进的unicode文件名处理。
  7. 改进 了对应用程序对sqlite_stat1表的不完整或不正确修改导致的愚蠢查询计划者决策的抵抗力
  8. 添加了sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION)接口,该接口允许启用sqlite3_load_extension() C-API,同时为了 安全起见禁用load_extension() SQL函数。
  9. 在Unix上更改临时目录搜索算法,以允许具有写和执行许可权但没有读许可权的目录充当临时目录。将相同的标准应用于“。” 后备目录。

    Bug修复:

  10. 修复了多行一遍DELETE优化导致的问题,该问题导致它使用WHERE子句中的自引用子查询来计算错误答案。修复票证 dc6ebeda9396087
  11. 当表是具有 INTEGER PRIMARY KEYRowid表且WHERE子句包含OR且表具有一个或多个能够触发OR优化的索引但没有索引引用任何表列时,使用DELETE修复可能的段错误除整数主键外。机票16c9801ceba49
  12. 在检查WHERE子句下推式优化时,请确认复合内部SELECT的所有项都是非聚合的,而不仅仅是最后一项。修复票证 f7f8c97e97597
  13. 修复了Windows中的一个锁定竞争情况,当两个或多个进程试图同时恢复同一热日志时,会发生这种情况。

    散列:

  14. SQLITE_SOURCE_ID:“ 2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2”
  15. sqlite3.c的SHA1:9b9171b1e6ce7a980e6b714e9c0d9112657ad552

    修正了向后移植到补丁程序版本3.12.2(2016-04-18)中的错误:

  16. 修复了3.12.0和3.12.1版中的向后兼容性问题:声明为“ INTEGER” PRIMARY KEY(带有datatype关键字的引号)的列未被识别为 INTEGER PRIMARY KEY,这导致数据库文件不兼容。机票7d7525cb01b68
  17. 修复了一个错误(自3.9.0版以来存在), 如果PRAGMA reverse_unordered_selects处于打开状态,则可能导致DELETE操作丢失行。门票a306e56ff68b8fa5
  18. 修复了代码生成器中的错误,如果两个或多个虚拟表被联接并且联接的外循环中使用的虚拟表具有IN运算符约束,则该错误可能导致错误的结果。
  19. 确定用于排序大量数据的缓存大小时,请正确解释负的“ PRAGMA cache_size”值。

    修补程序版本3.12.1(2016-04-08)中向后移植的错误修复:

  20. 修复了版本3.12.0引入的边界条件错误,该错误可能在大量使用SAVEPOINT时导致崩溃。机票7f7f8026eda38
  21. 修复视图,以便在可能时从定义表继承列数据类型。
  22. 修复查询计划程序,以便IS和IS NULL运算符能够在LEFT OUTER JOIN上驱动索引。

2016-04-18(3.12.2)

  1. 修复了3.12.0和3.12.1版中的向后兼容性问题:声明为“ INTEGER” PRIMARY KEY(带有datatype关键字的引号)的列未被识别为 INTEGER PRIMARY KEY,这导致数据库文件不兼容。机票7d7525cb01b68
  2. 修复了一个错误(自3.9.0版以来存在), 如果PRAGMA reverse_unordered_selects处于打开状态,则可能导致DELETE操作丢失行。门票a306e56ff68b8fa5
  3. 修复了代码生成器中的错误,如果两个或多个虚拟表被联接并且联接的外循环中使用的虚拟表具有IN运算符约束,则该错误可能导致错误的结果。
  4. 确定用于排序大量数据的缓存大小时,请正确解释负的“ PRAGMA cache_size”值。

    散列:

  5. SQLITE_SOURCE_ID:“ 2016-04-18 17:30:31 92dc59fd5ad66f646666042eb04195e3a61a9e8e”
  6. sqlite3.c的SHA1:de5a5898ebd3a3477d4652db143746d008b24c83

2016-04-08(3.12.1)

  1. 修复了版本3.12.0引入的边界条件错误,该错误可能在大量使用SAVEPOINT时导致崩溃。机票7f7f8026eda38
  2. 修复视图,以便在可能时从定义表继承列数据类型。
  3. 修复查询计划程序,以便IS和IS NULL运算符能够在LEFT OUTER JOIN上驱动索引。

    散列:

  4. SQLITE_SOURCE_ID:“ 2016-04-08 15:09:49 fe7d3b75fe1bde41511b323925af8ae1b910bc4d”
  5. sqlite3.c的SHA1:ebb18593350779850e3e1a930eb84a70fca8c1d1

2016-04-01(3.9.3)

  1. 向后移植一个 简单的查询计划程序优化 ,该优化程序允许IS操作员在LEFT OUTER JOIN上驱动索引。与3.9.2版基准相比没有其他更改 。

2016-03-29(3.12.0)

    潜在破坏性变化:

  1. SQLITE_DEFAULT_PAGE_SIZE增加从1024到4096 SQLITE_DEFAULT_CACHE_SIZE从2000变为-2000所以高速缓存存储器相同数量的默认情况下使用。有关更多信息,请参见关于3.12.0版页面大小更改的应用笔记 。

    性能增强:

  2. Lemon解析器生成器进行了增强 ,使其创建了更小,更快的SQL解析器。
  3. 仅当两个或多个附加数据库都被修改,PRAGMA同步设置为OFF且journal_mode设置为OFF,MEMORY或WAL时,才创建主日记文件。
  4. 仅在其大小超过阈值时创建语句日记文件。否则,日记将保留在内存中,并且不会发生I / O。可在编译时使用SQLITE_STMTJRNL_SPILL或在启动时使用sqlite3_configSQLITE_CONFIG_STMTJRNL_SPILL)配置阈值。
  5. 即使xBestIndex方法未将虚拟表列的sqlite3_index_constraint_usage.omit标志设置在IN运算符的左侧,查询计划程序仍可以优化虚拟表上的IN运算符。
  6. 现在,查询计划器可以更好地优化 3向或更高连接中的虚拟表访问,其中虚拟表上的约束分布在两个或多个其他连接表中。
  7. 更有效地处理应用程序定义的SQL函数,尤其是在应用程序定义数百或数千个自定义函数的情况下。
  8. 查询计划者在估计ORDER BY的成本时会考虑LIMIT子句。
  9. 配置脚本(在Unix上)自动检测pread()和pwrite()并设置编译时选项以使用这些OS接口(如果可用)。
  10. 减少保存架构所需的内存量。
  11. 其他各种微优化,可提高性能并减少内存使用。

    新的功能:

  12. sqlite3_db_config()中添加了SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER选项,该选项 允许在运行时启用或禁用fts3_tokenizer() SQL函数的两个参数版本。
  13. RBU扩展中添加了sqlite3rbu_bp_progress()接口。
  14. PRAGMA defer_foreign_keys = ON语句现在还禁止 操作限制外键。
  15. 添加了sqlite3_system_errno()接口。
  16. 添加了SQLITE_DEFAULT_SYNCHRONOUSSQLITE_DEFAULT_WAL_SYNCHRONOUS 编译时选项。该SQLITE_DEFAULT_SYNCHRONOUS编译时选项替换了SQLITE_EXTRA_DURABLE选项,它不再支持。
  17. 增强了命令行外壳中的“ .stats”命令,以显示有关从/ proc获得的I / O性能的更多信息(如果有)。

    Bug修复:

  18. 确保单个语句中来自多个触发器的sqlite3_set_auxdata()值不会相互干扰。票证dc9b1c91
  19. 修复代码生成器,以使用“ x IN(SELECT ...)”形式的表达式,其中RHS上的SELECT语句是相关子查询。机票5e3c886796e5512e
  20. 修复与sqlite3_db_readonly()接口关联的无害TSAN警告。

    散列:

  21. SQLITE_SOURCE_ID:“ 2016-03-29 10:14:15 e9bb4cf40f4971974a74468ef922bdee481c988b”
  22. sqlite3.c的SHA1:cba2be96d27cb51978cd4a200397a4ad178986eb

2016-03-03(3.11.1)

  1. 对VisualStudio使用的Makefile和构建脚本的改进。
  2. 修复了“优化”命令可能导致索引损坏的FTS5问题。
  3. 修复了在使用FTS5查询损坏的数据库文件时可能发生的缓冲区溢出。
  4. spellfix1扩展名的最大“作用域”值从6增加到30。
  5. SQLITE_SOURCE_ID:“ 2016-03-03 16:17:53 f047920ce16971e573bc6ec9a48b118c9de2b3a7”
  6. sqlite3.c的SHA1:3da832fd2af36eaedb05d61a8f4c2bb9f3d54265

2016-02-15(3.11.0)

    总体改进:

  1. 增强的WAL模式,使其可以有效地处理大于cache_size的事务。
  2. 添加了FTS5详细信息选项
  3. PRAGMA同步中添加了“ EXTRA”选项,当在DELETE模式下取消链接回滚日志时,该目录将同步包含目录,以实现更好的持久性。默认情况下,SQLITE_EXTRA_DURABLE编译时选项启用 PRAGMAynchronized = EXTRA
  4. 增强了查询计划程序,使其能够将覆盖索引用作OR优化的一部分。
  5. 避免对UPDATE语句中未更改的列重新计算NOT NULLCHECK约束
  6. 许多微优化,导致库比以前的版本快。

    命令行外壳的增强功能:

  7. 默认情况下,外壳现在处于“自动解释”模式。EXPLAIN命令的输出将 自动格式化。
  8. 添加了“ .vfslist”点命令
  9. SQLITE_ENABLE_EXPLAIN_COMMENTS编译时选项现在在标准默认开启的构建。

    TCL接口的增强功能:

  10. 如果使用“ -uri 1”选项打开了数据库连接,则“备份”和“恢复”命令将使用 URI文件名
  11. 在“ sqlite3”命令中添加了“ -sourceid”选项。

    Makefile的改进:

  12. 改进了配置脚本中的pthread检测。
  13. 添加从合并tarball进行MSVC Windows构建的功能。

    Bug修复

  14. 修复了在例程之间不正确共享VDBE临时寄存器的问题,这种情况在晦涩的情况下可能导致错误的查询结果。机票 d06a25c84454a
  15. 修复sqlite3_result_subtype()接口中的问题,该问题在晦涩的情况下可能导致json1扩展名出现问题。修复票务 f45ac567eaa9f9
  16. JSON字符串中的转义控制字符。已修复票证 ad2559db380abf8
  17. 重新启用在xCurrentTime和xGetLastError方法内置UNIX VFSes只要SQLITE_OMIT_DEPRECATED没有定义。

    向后兼容性:

  18. 由于持续的安全问题,除非使用SQLITE_ENABLE_FTS3_TOKENIZER编译SQLite,否则将禁用很少使用且鲜为人知的fts3_tokenizer()函数的两个参数的版本。

    散列:

  19. SQLITE_SOURCE_ID:“ 2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f”
  20. sqlite3.c的SHA1:df01436c5fcfe72d1a95bc172158219796e1a90b

2016-01-20(3.10.2)

    严重的错误修复:

  1. 版本3.10.0引入了LIKE运算符中的案例折叠错误,此补丁版本已修复该错误。机票 80369eddd5c94

    其他杂项错误修复:

  2. 修复了使用-DSQLITE_HAS_CODEC编译SQLite时可能发生的“事后使用”。
  3. 修复该构建,使其可以与-DSQLITE_OMIT_WAL一起使用。
  4. 修复合并的配置脚本,以使--readline选项在Raspberry PI上再次起作用。

    散列:

  5. SQLITE_SOURCE_ID:“ 2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9”
  6. sqlite3.c的SHA1:f7088b19d97cd7a1c805ee95c696abd54f01de4f

2016-01-14(3.10.1)

    新功能:

  1. 添加SQLITE_FCNTL_JOURNAL_POINTER文件控件。

    错误修复:

  2. 修复了查询计划器中一个存在16个月的错误,当标量子查询尝试使用块排序优化时,该错误可能会生成错误的结果。票证 cb3aa0641d9a4

    散列:

  3. SQLITE_SOURCE_ID:“ 2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588”
  4. sqlite3.c的SHA1:1398ba8e4043550a533cdd0834bfdad1c9eab0f4

2016-01-06(3.10.0)

    总体改进:

  1. 增加了对虚拟表上的LIKEGLOBREGEXP运算符的支持。
  2. sqlite3_index_info中添加了colUsed字段,以供sqlite3_module.xBestIndex方法使用。
  3. 增强PRAGMA cache_spill语句以接受32位整数参数,该参数是阈值,低于该阈值禁止缓存溢出。
  4. 在Unix上,如果打开到数据库文件的符号链接,则相应的日志文件基于实际文件名,而不是符号链接名称。
  5. 添加了“--transaction”选项sqldiff
  6. 添加了sqlite3_db_cacheflush()接口。
  7. 添加了sqlite3_strlike()接口。
  8. 使用内存映射的I / O映射时,数据库文件是只读的,因此应用程序中的杂散指针和/或数组溢出不会意外地修改数据库文件。
  9. 添加了实验性的 sqlite3_snapshot_get()sqlite3_snapshot_open()sqlite3_snapshot_free()接口。这些可能会在后续版本中更改或删除。
  10. 增强日期和时间功能中'utc'修饰符,以便在已知日期/时间已经存在于UTC中的情况下禁止操作。(这不是兼容性中断,因为在这种情况下,长期以来该行为被记录为“未定义”。)
  11. json扩展中添加了json_group_array()json_group_object() SQL函数 。
  12. 添加了SQLITE_LIKE_DOESNT_MATCH_BLOBS编译时选项。
  13. 许多小的性能优化。

    便携性增强:

  14. 解决HP / UX上HP C编译器优化器中的符号扩展错误。 (细节)

    命令行外壳的增强功能:

  15. 添加了“ .changes ON | OFF”和“ .vfsinfo”点命令
  16. 在Windows上的cmd.exe中运行时,在MBCS和UTF8之间进行转换。

    对makefile的增强:

  17. 在各种自动配置生成的配置脚本中添加了--enable-editline和--enable-static-shell选项。
  18. 省略makefile中对“ awk”的所有使用,以使MSVC用户更容易构建。

    重要修复:

  19. 将不一致的整数修复为浮点比较操作,如果在包含大整数和相似大小的浮点值的表列上创建索引,则可能导致索引损坏。机票 38a97a87a6
  20. 修复查询计划器中可能在格式不正确的公用表表达式上发生的无限循环。
  21. sqldiff工具中的各种错误修复。

    散列:

  22. SQLITE_SOURCE_ID:“ 2016-01-06 11:01:07 fd0a50f0797d154fefff724624f00548b5320566”
  23. sqlite3.c的SHA1:b92ca988ebb6df02ac0c8f866dbf3256740408ac

2015-11-02(3.9.2)

  1. 修复模式解析器,以使其解释与旧版相同的某些(模糊且格式错误的)CREATE TABLE语句。机票AC661962A2AEAB3C331的修复
  2. 修复了一个查询计划程序问题,该问题可能由于在相关标量子查询的FROM子句中的子查询中使用自动索引而导致错误的答案。修复票 8a2adec1
  3. SQLITE_SOURCE_ID:“ 2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328”
  4. sqlite3.c的SHA1:1c4013876f50bbaa3e6f0f98e0147c76287684c1

2015-10-16(3.9.1)

  1. 修复的json1扩展,使得它承认ASCII换页的空白字符,以符合RFC-7159。机票57eec374ae1d0a1d的修复
  2. 添加一些#ifdef并生成脚本更改,以解决3.9.0版本之后出现的编译问题。
  3. SQLITE_SOURCE_ID:““ 2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02”
  4. sqlite3.c的SHA1:5e6d1873a32d82c2cf8581f143649940cac8ae49

2015-10-14(3.9.0)

    政策变更:

  1. 修改了SQLite的版本编号约定,以使用新兴的语义版本控制标准。

    新功能和增强功能:

  2. 在源代码树和amalgamation中添加了json1扩展模块。使用SQLITE_ENABLE_JSON1编译时选项启用支持。
  3. 合并中添加了全文搜索版本5(FTS5),可使用SQLITE_ENABLE_FTS5启用。FTS5在至少一个发布周期内将被视为“实验性”(可能会发生不兼容的更改)。
  4. CREATE VIEW语句现在可以接受列名的以下视图名称的可选列表。
  5. 增加了对表达式索引的支持。
  6. SELECT语句的FROM子句中 增加了对表值函数的支持。
  7. 增加了对同名虚拟表的支持。
  8. VIEW现在可以参考未定义表和函数最初创建时。在查询中使用VIEW时,将报告缺少的表和函数。
  9. 添加了连接的sqlite3_value_subtype()sqlite3_result_subtype() (由json1扩展使用)。
  10. 查询计划器现在可以使用在WHERE子句中包含AND连接项的部分索引
  11. sqlite3_analyzer.exe实用程序已更新,以报告每个btree的深度,并显示索引和WITHOUT ROWID表的平均扇出。
  12. 增强了dbstat虚拟表,使其可以用作 表值函数,其中参数是要分析的模式。

    其他变化:

  13. 所述sqlite3_memory_alarm()接口,它已被弃用,无证8年,被改变为无操作。

    重要修复:

  14. 修复了SQLite加密扩展中的一个严重错误,如果VACUUM命令更改了加密随机数的大小,该错误 可能导致数据库变得不可读和不可恢复。
  15. sqlite3_initialize()的实现中添加了一个内存屏障, 以帮助确保它是线程安全的。
  16. 修复OR优化,以便它始终忽略不使用索引的子计划。
  17. 不要对源自LEFT JOIN的ON或USING子句的术语应用WHERE子句下推式优化。修复票证 c2a19d81652f40568c
  18. SQLITE_SOURCE_ID:“ 2015-10-14 12:29:53 a721fc0d89495518fe5612e2e3bbc60befd2e90d”
  19. sqlite3.c的SHA1:c03e47e152ddb9c342b84ffb39448bf4a2bd4288

2015-07-29(3.8.11.1)

  1. 恢复PRAGMA cache_size的未记录的副作用:如果以前未访问过数据库,则强制解析数据库模式。
  2. 修正了长期存在的问题sqlite3_changes()WITHOUT ROWID 已报告几个小时3.8.11发布后的表。
  3. SQLITE_SOURCE_ID:“ 2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f”
  4. sqlite3.c的SHA1:3be71d99121fe5b17f057011025bcf84e7cc6c84

2015-07-27(3.8.11)

  1. 添加了实验性RBU扩展。请注意,此扩展名是实验性的,并且可能以不兼容的方式进行更改。
  2. 添加了实验性FTS5扩展。请注意,此扩展名是实验性的,并且可能以不兼容的方式进行更改。
  3. 添加了sqlite3_value_dup()sqlite3_value_free()接口。
  4. 增强spellfix1扩展名以支持ON CONFLICT子句。
  5. IS运营商现在能够推动指数。
  6. 增强查询计划程序,以允许对由协同例程实现的FROM子句子查询进行自动索引
  7. 禁止在公用表表达式中使用“ rowid” 。
  8. 添加了PRAGMA cell_size_check命令,以便更好,更早地检测数据库文件损坏。
  9. FTS3中matchinfo()函数中添加了matchinfo'b'标志
  10. 改进了数据库文件的模糊测试,并修复了发现的问题。
  11. 添加fuzzcheck测试程序,并在“ make test”上使用SQL和数据库测试用例自动运行该程序。
  12. 添加了SQLITE_MUTEX_STATIC_VFS1静态互斥体,并在Windows VFS中使用了它。
  13. 对于未运行完成的语句,调用sqlite3_profile()回调(由sqlite3_reset()sqlite3_finalize())。
  14. 增强页面缓存,以便它可以预分配一个内存块以用于初始设置的页面缓存行。将默认预分配设置为100页。普通工作负载的性能提高约5%。
  15. 与以前的版本相比,在相同的CPU周期数下,其他各种微优化导致的工作量增加了22.3%。SQLite现在的运行速度是3.8.0版的两倍,是3.3.9版的三倍。(在具有gcc 4.8.2和-Os的Ubuntu 14.04 x64上的speedtest1.c工作负载上使用cachegrind进行 测量 。您的性能可能会有所不同。)
  16. 添加了sqlite3_result_zeroblob64()sqlite3_bind_zeroblob64() 接口。

    重要的错误修复:

  17. 修复CREATE TABLE AS,使TEXT类型的列永远不会保持INT值。门票 f2ad7de056ab1dc9200
  18. 修复CREATE TABLE AS,以便如果右侧的SELECT语句因错误中止而不会在sqlite_master表中保留NULL条目 。机票 873cae2b6e25b
  19. 修复跳过扫描优化,以便在对WITHOUT ROWID表使用OR优化时它可以正常工作。机票 8fd39115d8f46
  20. 修复sqlite3_memory_used()sqlite3_memory_highwater()接口,以便它们确实提供64位答案。

    散列:

  21. SQLITE_SOURCE_ID:“ 2015-07-27 13:49:41 b8e92227a469de677a66da62e4361f099c0b79d0”
  22. sqlite3.c的SHA1:719f6891abcd9c459b5460b191d731cd12a3643e

2015-05-20(3.8.10.2)

  1. 修复了版本3.8.7引入的索引损坏问题。如果表具有两个嵌套的触发器,可以将键值转换为INTEGER并再次返回TEXT,则INSERT可以将带有TEXT键的索引破坏到相应的表中。门票34cd55d68e0
  2. SQLITE_SOURCE_ID:“ 2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4”
  3. sqlite3.c的SHA1:638abb77965332c956dbbd2c8e4248e84da4eb63

2015-05-09(3.8.10.1)

  1. 使sqlite3_compileoption_used()响应SQLITE_ENABLE_DBSTAT_VTAB 编译时选项。
  2. 在某些版本的MSVC上的命令行外壳中修复无害警告。
  3. 修复dbstat虚拟表的小问题。
  4. SQLITE_SOURCE_ID:“ 2015-05-09 12:14:55 05b4b1f2a937c06c90db70c098900900ff6c98ec40”
  5. sqlite3.c的SHA1:85e4e1c08c7df28ef61bb9759a0d466e0eefbaa2

2015-05-07(3.8.10)

  1. 添加了sqldiff.exe实用程序,用于计算两个SQLite数据库文件之间的差异。
  2. FTS3matchinfo()函数中添加了matchinfo y标志
  3. ORDER BYVACUUMCREATE INDEXPRAGMA integrity_checkPRAGMA quick_check的性能进行了改进。
  4. 修复SQL模糊测试时发现的许多晦涩的问题。
  5. 在接口文档中标识重要对象的所有方法。(示例
  6. 使American Fuzzy Lop模糊器 成为SQLite测试策略的标准组成部分。
  7. 将“ .binary”和“ .limits”命令添加到命令行shell中
  8. 使用SQLITE_ENABLE_DBSTAT_VTAB选项进行编译时,使dbstat虚拟表成为标准构建的一部分。
  9. SQLITE_SOURCE_ID:“ 2015-05-07 11:53:08 cf975957b9ae671f34bb65f049acf351e650d437”
  10. sqlite3.c的SHA1:0b34f0de356a3f21b9dfc761f3b7821b6353c570

2015-04-08(3.8.9)

  1. 将VxWorks-7添加为官方支持和测试的平台。
  2. 添加了sqlite3_status64()接口。
  3. 修复内存大小跟踪,以便即使SQLite使用的内存超过2GiB,它也可以正常工作。
  4. 添加了PRAGMA index_xinfo命令。
  5. 修复了sqlite3_blob_read()sqlite3_blob_write()接口中潜在的32位整数溢出问题 。
  6. 即使使用SQLITE_OMIT_AUTORESET进行编译,也要确保准备好的语句在SQLITE_BUSY和SQLITE_LOCKED的扩展错误代码上自动重置。
  7. 在与WITHOUT ROWID表相关的sqlite3_analyzer.exe实用程序中更正错误计数。
  8. 命令行shell中添加了“ .dbinfo”命令。
  9. 提高使用OR运算符和至少一个辅助fts函数的fts3 / 4查询的性能。
  10. 修复了fts3 snippet()函数中的一个错误,该错误导致该错误忽略了以列中第一个标记开头的代码片段中的前导分隔符。
  11. SQLITE_SOURCE_ID:“ 2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09”
  12. sqlite3.c的SHA1:49f1c3ae347e1327b5aaa6c7f76126bdf09c6f42

2015-02-25(3.8.8.3)

  1. 修复了如果部分索引的限定约束出现在LEFT JOIN的ON子句中的错误(票号2326c258d02ead33),该错误 可能导致错误的结果。
  2. 命令行shell的unix版本中添加了链接到“ linenoise ”命令行编辑库的功能。
  3. SQLITE_SOURCE_ID:“ 2015-02-25 13:29:11 9d6c1880fb75660bbabd693175579529785f8a6b”
  4. sqlite3.c的SHA1:74ee38c8c6fd175ec85a47276dfcefe8a262827a

2015-01-30(3.8.8.2)

  1. 增强sqlite3_wal_checkpoint_v2(TRUNCATE)接口,以便即使没有检查点工作也可以将WAL文件截断。
  2. SQLITE_SOURCE_ID:“ 2015-01-30 14:30:45 7757fc721220e136620a89c9d28247f28bbbc098”
  3. sqlite3.c的SHA1:85ce79948116aa9a087ec345c9d2ce2c1d3cd8af

2015-01-20(3.8.8.1)

  1. 修复了自版本3.8.4起出现的排序逻辑中的错误,该错误可能导致输出在包含ORDER BY子句,LIMIT子句且结果集中具有约60个或更多列的查询上以错误的顺序显示。机票f97c4637102a3ae72b79
  2. SQLITE_SOURCE_ID:“ 2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55”
  3. sqlite3.c的SHA1:33987fb50dcc09f1429a653d6b47672f5a96f19e

2015-01-16(3.8.8)

    新的功能:

  1. 添加了PRAGMA data_version命令,该命令可用于确定数据库文件是否已被另一个进程修改。
  2. sqlite3_wal_checkpoint_v2()接口中添加了SQLITE_CHECKPOINT_TRUNCATE选项,并对 PRAGMA wal_checkpoint进行了相应的增强。
  3. 添加了sqlite3_stmt_scanstatus()接口,该接口仅在使用SQLITE_ENABLE_STMT_SCANSTATUS进行编译时可用
  4. 所述sqlite3_table_column_metadata()被增强以在正常工作 WITHOUT ROWID表和以检查表的存在,如果该列名的参数是NULL。现在,默认情况下,该接口现在也包含在构建中,而无需使用SQLITE_ENABLE_COLUMN_METADATA编译时选项。
  5. 添加了SQLITE_ENABLE_API_ARMOR编译时选项。
  6. 添加了SQLITE_REVERSE_UNORDERED_SELECTS编译时选项。
  7. 添加了SQLITE_SORTER_PMASZ编译时选项和SQLITE_CONFIG_PMASZ 开始时选项。
  8. sqlite3_config()中添加了SQLITE_CONFIG_PCACHE_HDRSZ选项, 这使应用程序可以更轻松地确定与SQLITE_CONFIG_PAGECACHE一起使用的适当内存量。
  9. VALUES子句中的行数不再受SQLITE_LIMIT_COMPOUND_SELECT的限制 。
  10. 添加了eval.c 可加载扩展,该扩展实现了将递归评估SQL的eval()SQL函数。

    性能增强:

  11. 减少平衡b树所涉及的memcpy()操作数量,使整体性能提高3.2%。
  12. 跳过扫描优化的成本估算的改进。
  13. 自动索引优化现在能够产生的局部索引,如果这是合适的。

    Bug修复:

  14. 截断日志文件后立即调用fsync(),以确保通过“ PRAGMA journal_mode = TRUNCATE”断电后的持久性。
  15. 现在,查询计划器可以识别出LEFT JOIN右侧表中的任何列都可以为NULL,即使该列具有NOT NULL约束。在这种情况下,请避免尝试优化NULL测试。修复票证 6f2222d550f5b0ee7ed
  16. 即使使用降序索引实现DISTINCT运算符,也请确保ORDER BY将行按升序排列。修复票证 c5ea805691bfc4204b1cb9e
  17. 修复了在共享缓存模式下使用多个线程运行某些线程正在打开和关闭连接时,在压力下可能发生的数据争用问题。
  18. 修复美国模糊洛普公司发现的晦涩的崩溃错误 。门票 a59ae93ee990a55
  19. 解决GCC优化器错误(适用于MacOS 10.7上的gcc 4.2.1),该错误会导致 R-Tree扩展使用-O3编译时无法计算正确的结果。

    其他变化:

  20. 除非使用-DHAVE_STRCHRNULL编译时选项专门启用了strchrnul()C库例程,否则请禁用该例程。
  21. 改进了似然性()可能性()不太可能() SQL提示函数的有效性和准确性 。
  22. SQLITE_SOURCE_ID:“ 2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf”
  23. sqlite3.c的SHA1:91aea4cc722371d58aae3d22e94d2a4165276905

2014-12-09(3.8.7.4)

  1. 错误修复:添加了先前版本中省略的互斥锁。
  2. SQLITE_SOURCE_ID:“ 2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e”
  3. sqlite3.c的SHA1:0a56693a3c24aa3217098afab1b6fecccdedfd23

2014-12-05(3.8.7.3)

  1. 错误修复:在共享缓存模式下操作并频繁关闭和重新打开某些数据库连接,同时使同一共享缓存上的其他数据库连接连续打开时,确保缓存的KeyInfo对象(对应用程序不可见的内部抽象)不会陈旧。票证 e4a18565a36884b00edf
  2. 错误修复:识别出LEFT JOIN右侧表中的任何列都可以为NULL,即使该列具有NOT NULL约束。不要应用假定列永远不为NULL的优化。票证 6f2222d550f5b0ee7ed
  3. SQLITE_SOURCE_ID:“ 2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86”
  4. sqlite3.c的SHA1:3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261

2014-11-18(3.8.7.2)

  1. 增强ROLLBACK命令,以便在架构不变的情况下允许挂起的查询继续进行。以前,ROLLBACK会导致所有挂起的查询失败,并出现SQLITE_ABORTSQLITE_ABORT_ROLLBACK错误。如果ROLLBACK修改架构,则仍会返回该错误。
  2. 错误修复:确保OP_Column的NULL结果完全为NULL,并且没有设置MEM_Ephem位。机票094d39a4c95ee4
  3. 错误修复:sqlite3_mprintf()中的%c格式能够处理大于70的精度。
  4. 错误修复:不要从构成IN运算符右侧的SELECT中自动删除DISTINCT关键字,因为如果SELECT也包含LIMIT,则很有必要。票证db87229497
  5. SQLITE_SOURCE_ID:“ 2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93”
  6. sqlite3.c的SHA1:b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a

2014-10-29(3.8.7.1)

  1. PRAGMA journal_mode = TRUNCATE模式下,在截断日志文件后立即调用fsync(),以确保事务在断电后是持久的。
  2. 修复了在使用ALTER TABLE ADD COLUMN添加的表末尾更新字段的NULL值时可能发生的断言错误。
  3. 除非设置了HAVE_STRCHRNULL编译时选项,否则不要尝试使用标准C库中的strchrnul()函数。
  4. 修复了一些与在WHERE子句中具有rowidVIEW上运行UPDATE或DELETE有关的问题 。
  5. SQLITE_SOURCE_ID:“ 2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221”
  6. sqlite3.c的SHA1:2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c

2014-10-17(3.8.7)

    性能增强:

  1. 与以前的版本相比,许多微优化导致相同数量的CPU周期的工作量增加了20.3%。自3.8.0版以来,累积性能提高了61%。(在具有gcc 4.8.1和-Os的Ubuntu 13.10 x64上的speedtest1.c工作负载上使用cachegrind进行 测量 。您的性能可能会有所不同。)
  2. 分类器可以使用辅助帮助器线程来增加实时响应。此功能默认情况下处于关闭状态,可以使用PRAGMA线程命令或SQLITE_DEFAULT_WORKER_THREADS 编译时选项启用。
  3. 增强跳过扫描优化,以便它能够跳过出现在索引中间的索引词,而不仅仅是索引的左侧。
  4. 改进了CAST运算符的优化。
  5. 查询计划程序如何使用sqlite_stat4 信息估计计划成本的各种改进。

    新的功能:

  6. 添加了具有64位长度参数的新接口: sqlite3_malloc64()sqlite3_realloc64()sqlite3_bind_blob64()sqlite3_result_blob64()sqlite3_bind_text64()sqlite3_result_text64()
  7. 添加了新的接口sqlite3_msize(),该接口返回从sqlite3_malloc64()及其变体获取的内存分配的大小。
  8. 增加了SQLITE_LIMIT_WORKER_THREADS选项sqlite3_limit()PRAGMA线程配置可用的工作线程数命令。
  9. 所述spellfix1扩展允许应用程序有选择地指定为每个插入的rowid。
  10. 添加了用户身份验证 扩展。

    Bug修复:

  11. 修复了部分索引实现中的错误,如果在子查询或视图中使用了部分索引,则该错误可能导致错误的答案。机票98d973b8f5
  12. 修复了查询计划程序错误,当使用DESC索引在具有相同GROUP BY子句的查询上实现ORDER BY子句时,可能会导致表扫描方向错误(从而反转输出顺序)。门票ba7cbfaedc7e6
  13. 修复了sqlite3_trace()中的一个错误,如果该错误需要重新准备,该错误有时会导致它无法打印SQL语句。门票11d5aa455e0d98f3c1e6a08
  14. 修复错误的assert()语句。机票369d57fb8e5ccdff06f1

    测试,调试和分析更改:

  15. 当使用SQLITE_DEBUG,SQLITE_ENABLE_SELECTTRACE和SQLITE_ENABLE_WHERETRACE编译时,在命令行外壳中使用“ .selecttrace”和“ .wheretrace”命令显示ASCII艺术抽象语法树图 。还提供sqlite3TreeViewExpr()和sqlite3TreeViewSelect()入口点,可以使用调试器从它们调用这些入口点,以显示在断点处停止时的解析树。
  16. 删除对SQLITE_ENABLE_TREE_EXPLAIN的支持。SELECTTRACE机制提供了更多有用的诊断信息。
  17. 用于配置辅助内存使用的命令行外壳的新选项:--pagecache,--lookaside和--scratch。
  18. SQLITE_SOURCE_ID:“ 2014-10-17 11:24:17 e4ab094f8afce0817f4074e823fabe59fc29ebb4”
  19. sqlite3.c的SHA1:56dcf5e931a9e1fa12fc2d600cd91d3bf9b639cd

2014-08-15(3.8.6)

  1. 在SQL解析器中添加了对十六进制整数文字的支持。(例如:0x123abc)
  2. 增强了PRAGMA integrity_check命令,以检测UNIQUENOT NULL约束违例。
  3. SQLITE_MAX_ATTACHED的最大值从62增加到125。
  4. 在发出SQLITE_PROTOCOL 错误之前,请将WAL模式下的超时从1秒增加到10秒。
  5. 添加了可能的(X) SQL函数。
  6. unicode61标记生成器现在包含在FTS4默认。
  7. 运行ANALYZE时,对所有准备好的语句触发自动重新准备。
  8. 在源代码树中添加了一个新的 可加载扩展源代码文件: fileio.c
  9. 将扩展功能readfile(X)和writefile(X,Y) (使用上一项目符号fileio.c中复制/粘贴的代码)添加到 命令行shell
  10. 命令行shell中添加了.fullschema点命令。

    性能增强:

  11. IN运算符右侧的子查询上停用DISTINCT关键字。
  12. 添加了将IN运算符评估为比较序列的功能,以替代使用表查找的功能。在比较快的情况下(例如,IN运算符的右侧较小和/或频繁更改时),请使用比较序列实现。
  13. 查询计划程序现在使用sqlite_stat4信息(由ANALYZE创建)来帮助确定跳过扫描优化是否合适。
  14. 确保查询计划者从不尝试使用自制的瞬态索引来代替架构定义的索引。
  15. 其他一些小的调整,以提高VDBE代码的质量。

    Bug修复:

  16. 修复了CREATE UNIQUE INDEX中的一个错误,该错误在 3.8.2版中添加了WITHOUT ROWID支持时引入,该错误允许为非唯一的NOT NULL列赋予UNIQUE索引。门票9a6daf340df99ba93c
  17. 修复了先前版本中引入的R-Tree扩展中的错误,该错误可能导致使用IN运算符左侧的R-Tree的rowid的查询的结果不正确。票证d2889096e7bdeac6
  18. 修复sqlite3_stmt_busy()接口,以便为已步进但从未重置的ROLLBACK语句提供正确答案。
  19. 修复了以下问题:如果包含DEFAULT的列(是聚合函数)尝试使用其DEFAULT,则会导致空指针被取消引用。机票3a88d85f36704eebe1
  20. 现在,命令行外壳程序的CSV输出始终将CRNL用作行分隔符,并避免在数据中包含的NL前面插入CR。
  21. 使用IN运算符修复列亲和力问题。票9a8b09f8e6
  22. 修复ANALYZE命令,以便为sqlite_stat4表中的WITHOUT ROWID表添加正确的样本 。票证b2fa5424e6fcb15
  23. SQLITE_SOURCE_ID:“ 2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e”
  24. sqlite3.c的SHA1:72c64f05cd9babb9c0f9b3c82536d83be7804b1c

2014-06-04(3.8.5)

  1. 增加了对按索引进行部分排序的支持。
  2. 增强查询计划程序,使其始终喜欢相对于某些其他索引使用WHERE子句术语超集的索引。
  3. FTS4automerge命令的改进,可以更好地控制全文索引的索引大小,该全文索引需要进行大量更新。
  4. R-Tree扩展中添加了sqlite3_rtree_query_callback()接口
  5. 添加了新的URI查询参数“ nolock”和“ immutable”。
  6. 通过不记住只读数据库连接上的CHECK约束来使用较少的内存。
  7. WITHOUT ROWID表启用OR优化
  8. 呈现形式为“ x IN(?)”(在IN运算符右侧的列表中具有单个值)的表达式,就好像它们在哪里“ x ==?”一样,类似地优化“ x NOT IN(? )”
  9. 将“ .system”和“ .once”命令添加到命令行shell中
  10. VFS的xDeviceCharacteristics方法可以返回的位集中添加了SQLITE_IOCAP_IMMUTABLE位。
  11. 添加了SQLITE_TESTCTRL_BYTEORDER测试控件。

    Bug修复:

  12. 没有FROM子句的查询将忽略OFFSET子句。门票07d6a0453d
  13. 涉及形式为“ x IN(?)”的表达式的查询的断言错误。票证e39d032577
  14. 报告了不正确的列数据类型。门票a8a0d2996a
  15. 在针对具有超过16个索引的表的查询中返回的重复行,每个索引在单独的列上,并且全部通过“或”连接的约束使用。门票10fb063b11
  16. 部分索引会导致UPDATE或REPLACE上的断言错误。门票2ea3e9fe63
  17. 使用NULL参数调用未公开的SQL函数sqlite_rename_parent()时崩溃。机票264b970c43
  18. 如果查询具有相同的GROUP BY,则忽略ORDER BY。门票b75a9ca6b0
  19. 当所有输入均为空字符串时,group_concat(x,'')SQL函数将返回NULL而不是空字符串。机票55746F9E65
  20. 修复了VDBE代码生成器中的一个错误,该错误在执行INSERT INTO ... SELECT语句时导致崩溃,该语句插入的列数大于目标表中的列数。机票e9654505cfd
  21. 修复了命令行外壳中CSV导入中的问题 ,如果CSV文件中第一行的最左侧字段的大小均为零字节且未加引号,则不会导入任何数据。
  22. 修复了FTS4中的一个问题,该问题包含未索引名称作为前缀的最左边的列,而不是其名称完全匹配的列,没有被索引。
  23. 修复sqlite3_db_readonly()接口,如果数据库由于文件格式写入版本号太大而为只读,则返回true。
  24. SQLITE_SOURCE_ID:“ 2014-06-04 14:06:34 b1ed4f2a34ba66c29b130f8d13e9092758019212”
  25. sqlite3.c的SHA1:7bc194957238c61b1a47f301270286be5bc5208c

2014-04-03(3.8.4.3)

  1. 为一个可能导致对混合DISTINCT,子查询中的GROUP BY和ORDER BY的查询产生不正确查询结果的问题添加一个 字符修复程序机票98825a79ce14
  2. SQLITE_SOURCE_ID:“ 2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3”
  3. sqlite3.c的SHA1:310a1faeb9332a3cd8d1f53b4a2e055abf537bdc

2014-03-26(3.8.4.2)

  1. 修复了尝试搜索损坏的数据库文件时可能导致的缓冲区超载的问题。
  2. SQLITE_SOURCE_ID:“ 2014-03-26 18:51:19 02ea166372bdb2ef9d8dfbb05e78a97609673a8e”
  3. sqlite3.c的SHA1:4685ca86c2ea0649ed9f59a500013e90b3fe6d03

2014-03-11(3.8.4.1)

  1. 解决C预处理程序宏冲突会破坏Microsoft Visual Studio某些配置的生成的情况。
  2. 在计算跳过扫描优化的成本时,请考虑到需要多次搜索的事实。
  3. SQLITE_SOURCE_ID:“ 2014-03-11 15:27:36 018d317b1257ce68a92908b05c9c7cf1494050d0”
  4. sqlite3.c的SHA1:d5cd1535053a50aa8633725e3595740b33709ac5

2014-03-10(3.8.4)

  1. 代码优化和重构可提高性能。
  2. 将“ .clone”和“ .save”命令添加到命令行外壳。
  3. 更新命令行外壳上的横幅,以在新手用户使用临时内存数据库时提醒他们。
  4. 修复命令行外壳中的Editline支持。
  5. 使用sqlite3_test_control()SQLITE_TESTCTRL_VDBE_COVERAGE动词添加对VDBE程序的覆盖测试的支持 。
  6. 更新_FILE_OFFSET_BITS宏,以便再次在QNX上进行构建。
  7. 将SrcList.nSrc的数据类型从u8更改为int,以解决AIX上C编译器中的问题。
  8. 在Cygwin上加载扩展程序。
  9. 错误修复:修复char() SQL函数,以使其在使用零参数调用时返回空字符串,而不是“内存不足”错误。
  10. 错误修复:DISTINCT现在可以识别出一个0blob和一个全0x00字节的blob是同一件事。 门票[fccbde530a]
  11. 漏洞修复:为在WHERE子句中包含IS NOT NULL项并且在WHERE子句中也包含OR项并使用SQLITE_ENABLE_STAT4编译的查询计算正确答案。 门票[4c86b126f2]
  12. 错误修复:确保正常表和WITHOUT ROWID表之间的联接中的“ rowid”列已正确解析。 机票[c34d0557f7]
  13. 错误修复:确保在用于实现包含ORDER BY子句的复合SELECT语句的并发协同例程中未使用相同的临时寄存器,因为这样使用会导致错误的答案。 门票[8c63ff0eca]
  14. 错误修复:确保“ ORDER BY random()”子句不会被优化。 机票[65bdeb9739]
  15. 错误修复:修复TRIGGER中包含的子选择语句中可能发生的名称解析错误。 门票[4ef7e3cfca]
  16. 错误修复:修复格式为“ DEFAULT(-(-9223372036854775808))”的列默认值表达式,以使它们正确运行,将列初始化为大约等于+9223372036854775805808.0的浮点值。
  17. SQLITE_SOURCE_ID:“ 2014-03-10 12:20:37 530a1ee7dc2435f80960ce4710a3c2d2bfaaccc5”
  18. sqlite3.c的SHA1:b0c22e5f15f5ba2afd017ecd990ea507918afe1c

2014-02-11(3.8.3.1)

  1. 修复了一个错误(票证4c86b126f2),当使用SQLITE_ENABLE_STAT3SQLITE_ENABLE_STAT4编译时选项时,该错误会导致某些带有OR子句和WHERE子句中的IS NOT NULL运算符的查询丢失行。
  2. 修复了导致VS2013问题的无害编译器警告。
  3. SQLITE_SOURCE_ID:“ 2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e”
  4. sqlite3.c的SHA1:990004ef2d0eec6a339e4caa562423897fe02bf0

2014-02-03(3.8.3)

  1. 增加了对公用表表达式WITH子句的支持
  2. 添加了printf() SQL函数。
  3. sqlite3_create_function()和相关接口的第4个参数中添加了SQLITE_DETERMINISTIC作为可选位,使 应用程序能够创建具有恒定参数的新函数,这些函数可以从内部循环中分解出来。
  4. 添加在事务开始时返回的SQLITE_READONLY_DBMOVED错误代码,以指示基础数据库文件已被重命名或已从SQLite下移出。
  5. ATTACH的filename参数中允许任意表达式,包括函数调用和子查询。
  6. 允许在SELECT语句有效的任何地方使用VALUES子句
  7. 当N == 0调用时重新格式化sqlite3_randomness(N,P)使用的PRNG 。在UNIX上的fork()之后自动重新设置种子。
  8. 增强spellfix1虚拟表,使其可以按rowid有效地进行搜索。
  9. 性能增强。
  10. 运行EXPLAIN时,改进了VDBE字节码显示中的注释。
  11. 将“%token_class”指令添加到Lemon解析器生成器,并使用它来简化语法。
  12. 更改Lemon源代码,以避免调用OpenBSD认为危险的C库函数。(例如:sprintf)。
  13. 错误修复:在命令行Shell CSV导入功能中,当CRLN行的末尾出现转义的双引号时,请勿结束字段。
  14. SQLITE_SOURCE_ID:“ 2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538”
  15. sqlite3.c的SHA1:98a07da78f71b0275e8d9c510486877adc31dbee

2013-12-06(3.8.2)

  1. 当将大于+9223372036854775807的浮点值转换为整数时,更改了CAST表达式的定义行为,以便结果是最大可能的整数+9223372036854775807,而不是最小可能的整数-9223372036854775808。进行此更改之后,CAST(9223372036854775809.0作为INT)产生+9223372036854775807而不是-9223372036854775808。  可能不兼容的更改!
  2. 添加了对WITHOUT ROWID表的支持。
  3. 向查询计划器添加了跳过扫描优化
  4. 扩展了虚拟表接口,尤其是 sqlite3_index_info对象,以允许虚拟表报告其对查询将返回的行数的估计。
  5. 更新R-Tree扩展以利用增强的虚拟表界面。
  6. 添加SQLITE_ENABLE_EXPLAIN_COMMENTS编译时选项。
  7. 增强了启用SQLITE_ENABLE_EXPLAIN_COMMENTS编译时选项时插入EXPLAIN输出中的 注释
  8. VDBE中的性能增强,尤其是OP_Column操作码。
  9. 内部循环中的因数常量子表达式将循环到准备好的语句中的初始化代码。
  10. 增强了命令行外壳程序的“ .explain”输出格式, 以便缩进循环以更好地显示程序的结构。
  11. 增强了命令行外壳程序的“ .timer”功能,因此它除了显示系统时间和用户时间外,还显示壁钟时间。
  12. SQLITE_SOURCE_ID:“ 2013-12-06 14:53:30 27392118af4c38c5203a04b8013e1afdb1cebd0d”
  13. sqlite3.c的SHA1:6422c7d69866f5ea3db0968f67ee596e7114544e

2013-10-17(3.8.1)

  1. 添加了不可能()似然() SQL函数,以用作查询计划程序的提示。
  2. 对查询计划器的增强:
    1. 考虑到无法与索引一起使用的WHERE子句术语仍然可能会减少输出行的数量。
    2. 估计表和索引行的大小,并使用最小的适用B树进行全扫描和“ count(*)”操作。
  3. 添加了soft_heap_limit杂注
  4. 添加了对SQLITE_ENABLE_STAT4的支持
  5. sqlite_stat1.stat字段的末尾添加了对“ sz = NNN”参数的支持,该 字段用于指定表和索引行的平均长度(以字节为单位)。
  6. 如果没有已修改的列与外键关联,请避免在UPDATE上运行外键约束检查。
  7. 添加了SQLITE_MINIMUM_FILE_DESCRIPTOR编译时选项
  8. 在Windows上添加了win32-longpath VFS,允许文件名的最大长度为32K个字符。
  9. 日期和时间函数的增强,使当前时间(例如:儒略日(“现在”))始终是相同的内的多个函数调用同一个sqlite3_step()调用。
  10. 添加“ totype.c”扩展名,实现tointeger()和toreal()SQL函数。
  11. FTS4查询可以更好地利用docid <$ limit约束来限制所需的I / O数量。
  12. 将隐藏的fts4aux languageid列添加到fts4aux虚拟表中。
  13. 真空命令包约更紧1%的数据库。
  14. sqlite3_analyzer实用程序已更新,可以提供更好的描述并为“非连续页面”计算出更准确的估算值
  15. 重构PRAGMA语句的实现以提高解析性能。
  16. 现在可以使用SQLITE_TMPDIR环境变量来设置用于在Unix上保留临时文件的目录,该目录优先于TMPDIR环境变量。但是,sqlite3_temp_directory全局变量的优先级仍然高于两个环境变量。
  17. 添加了PRAGMA stats语句。
  18. 错误修复:即使表上有部分索引,也应为“ SELECT count(*)FROM table”返回正确的答案。门票 a5c8ed66ca
  19. SQLITE_SOURCE_ID:“ 2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a”
  20. sqlite3.c的SHA1:0a54d76566728c2ba96292a49b138e4f69a7c391

2013-09-03(3.8.0.2)

  1. 修复了试图忽略未使用的LEFT JOIN的优化中的错误
  2. SQLITE_SOURCE_ID:“ 2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef”
  3. sqlite3.c的SHA1:6cf0c7b46975a87a0dc3fba69c229a7de61b0c21

2013-08-29(3.8.0.1)

  1. 修复了一个错误的错误,该错误导致命令行输入错误读取CSV输入的CRNL终止行结尾的带引号的空字符串。
  2. 修复一个查询计划程序错误,该错误涉及到具有BETWEEN或LIKE / GLOB约束的LEFT JOIN,然后到右侧涉及OR约束的另一个INNER JOIN。
  3. 修复了查询计划程序错误,当查询带有多于四列的UNIQUE或PRIMARY KEY约束的表时,该错误可能导致segfault。
  4. SQLITE_SOURCE_ID:“ 2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49”
  5. sqlite3.c的SHA1:99906bf63e6cef63d6f3d7f8526ac4a70e76559e

2013-08-26(3.8.0)

  1. 添加对部分索引的支持
  2. 过渡到下一代查询计划器,以实现更快,更好的查询计划。
  3. 所述EXPLAIN查询计划输出不再示出了在由每个回路中产生的行数的估计加入。
  4. 添加了FTS4 notindexed选项,允许在FTS4表中使用非索引列。
  5. sqlite3_stmt_status()中添加了SQLITE_STMTSTATUS_VM_STEP选项。
  6. 添加了cache_spill pragma
  7. 添加了query_only pragma
  8. 添加了defer_foreign_keys编译指示sqlite3_db_status(db,SQLITE_DBSTATUS_DEFERRED_FKS,...)C语言界面。
  9. 在源树的ext / misc子目录中添加了“ percentile()”函数作为可加载扩展
  10. 添加了SQLITE_ALLOW_URI_AUTHORITY编译时选项。
  11. 添加sqlite3_cancel_auto_extension(X)接口。
  12. 缺少FROM子句的正在运行的SELECT语句(或从未从任何数据库文件读取或写入的任何其他语句)将不会阻止读取事务关闭。
  13. 添加SQLITE_DEFAULT_AUTOMATIC_INDEX编译时选项。将此选项设置为0会默认禁用自动索引。
  14. 每当查询计划程序使用自动索引时,在SQLITE_CONFIG_LOG上发出SQLITE_WARNING_AUTOINDEX警告。
  15. 添加了SQLITE_FTS3_MAX_EXPR_DEPTH编译时选项。
  16. 向next_char()扩展SQL函数添加了一个可选的第5个参数,用于定义整理顺序。
  17. SQLITE_BUSY_SNAPSHOT扩展错误代码在WAL模式返回时,一个读事务无法升级到写事务,因为读是旧的快照。
  18. sqlite3_analyzer实用程序的增强功能,除了聚合大小外,还为表的每个单独索引分别提供大小信息。
  19. 如果由不访问任何数据库表的SELECT语句调用该函数,则允许从应用程序定义的SQL函数的实现内部运行的SQL语句自由地打开和关闭读取事务。
  20. 除非使用HAVE_POSIX_FALLOCATE编译时选项,否则请在所有(unix)系统上禁用posix_fallocate()的使用。
  21. 如果输入文本不严格符合RFC-4180 ,请在命令行外壳中更新“ .import”命令以支持多行字段并更正RFC-4180引用,并发出警告和/或错误消息。
  22. 错误修复:在FTS4unicode61标记程序中,将所有私有代码点都视为标识符符号。
  23. 漏洞修复:ORDER BY子句中的裸标识符与输出列名称的绑定更紧密,而表达式中的标识符与输入列名称的绑定更紧密。但是,GROUP BY子句中的标识符始终首选输出列名称。
  24. 错误修复:迁移到NGQP修复了旧式查询优化器中的多个问题。
  25. SQLITE_SOURCE_ID:“ 2013-08-26 04:50:08 f64cd21e2e23ed7cff48f7dafa5e76adde9321c2”
  26. sqlite3.c的SHA1:b7347f4b4c2a840e6ba12040093d606bd16ea21e

2013-05-20(3.7.17)

  1. 添加对内存映射I / O的支持
  2. 添加sqlite3_strglob()便捷接口。
  3. 将SQLite用作应用程序文件格式时,将数据库标头中偏移量68处的整数分配为 应用程序ID。添加了PRAGMA application_id命令以查询和设置应用程序ID。
  4. 错误日志中将回滚恢复报告为SQLITE_NOTICE_RECOVER_ROLLBACK。将WAL恢复的错误日志代码从SQLITE_OK更改为SQLITE_NOTICE_RECOVER_WAL。
  5. 错误日志中以SQLITE_WARNING消息的形式报告未链接的数据库文件数据库文件名别名的危险使用。
  6. 添加了SQLITE_TRACE_SIZE_LIMIT编译时选项。
  7. SQLITE_MAX_SCHEMA_RETRY的默认值增加到50,并确保在任何地方都可以采用它,因为架构更改可能会强制执行语句重试。
  8. 添加一个称为“ mptester”的新测试工具,该工具用于在多个进程同时使用同一数据库文件时验证正确的操作。
  9. 通过以下两种方式增强扩展加载机制,使其更灵活(同时仍保持向后兼容性):
    1. 如果可加载扩展中不存在默认入口点“ sqlite3_extension_init”,请尝试使用入口点“ sqlite3_X_init”,其中“ X”基于共享库文件名。这样,每个扩展都可以具有不同的入口点,从而可以在不更改代码的情况下将它们静态链接。
    2. 传递给sqlite3_load_extension()的共享库文件名可以省略文件名后缀,并且将自动添加适当的与体系结构相关的后缀(“ .so”,“。dylib”或“ .dll”)。
  10. 在源代码树中添加了许多新的可加载扩展,包括amatch,closure,fuzzer,ieee754,nextchar,regexp,spellfix和integernumber。有关该扩展功能的更多信息,请参见每个扩展源文件上的标头注释。
  11. 增强FTS3以避免在MATCH运算符右侧有大量术语时使用过多的堆栈空间。此更改的副作用是MATCH运算符一次只能容纳12个NEAR运算符。
  12. 增强fts4aux虚拟表,使其可以成为TEMP表。
  13. 增加了fts3tokenize虚表全文检索逻辑。
  14. 查询计划器增强功能:使用约束的可传递属性,将约束尽可能地将约束移动到联接的外部循环中,从而减少内部循环中需要进行的工作量。
  15. 停止在Unix上停止使用posix_fallocate(),因为它不适用于所有文件系统。
  16. Windows VFS中改进的跟踪和调试功能。
  17. [修正]修正了一个潜在的数据库损坏错误共享缓存模式,当一个 数据库连接被关闭,而另一个是在写事务的中间。门票E636A050B7
  18. 错误修复:如果没有其他匹配项,则仅将结果集中的AS名称视为WHERE子句中解析标识符的候选者。在ORDER BY子句中,AS名称优先于任何列名称。门票2500cdb9be05
  19. 漏洞修复:除非保证所有外部循环都返回不超过一行的结果,否则不允许虚拟表取消ORDER BY子句。门票ba82a4a41eac1
  20. 错误修复:如果使用IN约束,请不要在虚拟表查询上取消ORDER BY子句。机票f69b96e3076e
  21. 错误修复:使用“ .quit”命令终止时,命令行外壳会给出退出代码0。
  22. 错误修复:确保PRAGMA语句出现在sqlite3_trace()输出中。
  23. 错误修复:当使用ORDER BY子句和COLLATE运算符复合查询时,请确保根据指定的排序规则进行排序,并且与该复合查询相关联的比较使用本机排序规则。机票 6709574d2a8d8
  24. 错误修复:在执行更改行标识符的UPDATE时,请确保授权者回调获得指向列名参数字符串“ ROWID”的有效指针。门票 0eb70d77cb05bb2272
  25. 错误修复:请勿在LEFT JOIN的ON子句中包含的OR表达式内移动WHERE子句项。门票 f2369304e4
  26. 错误修复:尝试执行需要缺少排序顺序的操作时,请确保始终报告错误。票证0fc59f908b
  27. SQLITE_SOURCE_ID:“ 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668”
  28. sqlite3.c的SHA1:246987605d0503c700a08b9ee99a6b5d67454aab

2013-04-12(3.7.16.2)

  1. 修复了一个错误(自3.7.13版本以来存在),如果两个或多个进程试图同时访问同一数据库文件,并且在提交同一文件的中间第三个进程崩溃后立即尝试访问同一数据库文件,则该错误可能导致Windows上的数据库损坏。有关更多信息,请参见票证 7ff3120e4f
  2. SQLITE_SOURCE_ID:“ 2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7”
  3. sqlite3.c的SHA1:d466b54789dff4fb0238b9232e74896deaefab94

2013-03-29(3.7.16.1)

  1. 修复了3.7.15版中引入的ORDER BY优化器中的错误,该错误 有时会在实际上需要排序时优化排序步骤。机票A179FE7465
  2. 修复了CAST表达式中的一个长期存在的错误,该错误会将UTF16字符识别为数字,即使它们的最高有效字节不为零也是如此。机票689137afb6da41
  3. 修复了应用于子字段时FTS3的NEAR运算符中的错误。门票38b1ae018f
  4. 修复了存储引擎中的一个长期存在的错误,该错误(很少)会导致虚假报告SQLITE_CORRUPT错误,但此错误是无害的。票证6bfb98dfc0c
  5. SQLITE_OMIT_MERGE_SORT选项已被删除。现在,合并排序器是SQLite的必需组件。
  6. 修复了源代码注释中的许多拼写错误
  7. SQLITE_SOURCE_ID:“ 2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d”
  8. sqlite3.c的SHA1:7a91ceceac9bcf47ceb8219126276e5518f7ff5a

2013-03-18(3.7.16)

  1. 添加了PRAGMA foreign_key_check命令。
  2. 为所有SQLITE_CONSTRAINT错误添加了新的扩展错误代码
  3. 添加了SQLITE_READONLY_ROLLBACK扩展错误代码,用于无法打开数据库的情况,因为该数据库需要回滚恢复但为只读。
  4. 添加了SQL函数unicode(A)char(X1,...,XN)
  5. PRAGMAcremental_vacuum的性能改进,特别是在空闲页面数大于空闲列表的单个主干页面容纳的页面数的情况下。
  6. 改进了对包含聚合min()或max()的查询的优化。
  7. 增强虚拟表,以便在WHERE子句包含IN运算符时它们可以潜在地使用索引。
  8. 即使索引的先前项受WHERE子句中的IN运算符约束,也允许将索引用于排序。
  9. 增强PRAGMA table_info命令,以使“ pk”列是一个递增的整数,以显示主键中列的顺序。
  10. 增强查询优化器以利用可传递联接约束。
  11. 查询优化器中的性能改进。
  12. 允许来自PRAGMA integrity_check的错误消息长于20000字节。
  13. 改进了深度嵌套查询的名称解析。
  14. 添加了test_regexp.c模块,以演示如何实现REGEXP运算符。
  15. 改进了RTREE扩展中的错误消息。
  16. 增强命令行外壳程序,以使“ .exit”命令的非零参数使外壳程序立即退出,而无需彻底关闭数据库连接。
  17. 改进了针对命令行shell中dot-commands的布尔值无效布尔参数的错误消息。
  18. 改进了针对“外键不匹配”的错误消息,其中显示了所涉及的两个表的名称。
  19. 在UNIX VFS中删除对umask()的所有使用。
  20. 添加了PRAGMA vdbe_addoptracePRAGMA vdbe_debug命令。
  21. 比较非零终止的字符串时,更改为使用strncmp()或等效项而不是memcmp()。
  22. 更新cygwin接口以省略不推荐使用的API调用。
  23. 增强spellfix1扩展名,以便可以在运行时通过将“ edit_cost_table = TABLE”之类的字符串插入“命令”字段来更改编辑距离成本表。
  24. 错误修复:修复一个长期存在的问题,该问题可能导致在3向或更大连接中将INTEGER字段与TEXT字段在两个或多个位置进行比较的错误查询结果。门票FC7BD6358F
  25. 错误修复:如果视图上的16位引用计数器由于查询过于复杂而溢出,则发出错误消息。
  26. 漏洞修复:避免在深度嵌套的UNION ALL查询中的LIMIT和OFFSET子句上泄漏内存。
  27. 错误修复:在运行编译指示table_info,index_list,index_info和foreign_key_list之前,请确保架构是最新的。
  28. SQLITE_SOURCE_ID:“ 2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90”
  29. sqlite3.c的SHA1:7308ab891ca1b2ebc596025cfe4dc36f1ee89cf6

2013-01-09(3.7.15.2)

  1. 修复了版本3.7.15中引入的错误,该错误导致在实际需要ORDER BY时,可以从三向联接中优化ORDER BY子句。机票598f5f7596b055
  2. SQLITE_SOURCE_ID:“ 2013-01-09 11:53:05 c0e09560d26f0a6456be9dd3447f5311eb4f238f”
  3. sqlite3.c的SHA1:5741f47d1bc38aa0a8c38f09e60a5fe0031f272d

2012-12-19(3.7.15.1)

  1. 修复了在3.7.15版中引入的错误,如果在SELECT语句的结果列的AS名称用作WHERE子句中的逻辑术语时会导致段错误。门票 a7b7803e8d1e869
  2. SQLITE_SOURCE_ID:“ 2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318”
  3. sqlite3.c的SHA1:bbbaa68061e925bd4d7d18d7e1270935c5f7e39a

2012-12-12(3.7.15)

  1. 添加了sqlite3_errstr()接口。
  2. 当由于SQLITE_SCHEMA错误而自动重新准备一条语句时,避免多次调用sqlite3_trace()回调。
  3. 添加了对Windows Phone 8平台的支持
  4. 增强IN运算符处理,以利用具有数字亲和力的索引。
  5. 在理论上索引会更小,因此可以用更少的I / O进行扫描,因此在可能的情况下使用覆盖索引进行全表扫描。
  6. 增强查询优化器,以便更积极地优化ORDER BY子句,尤其是在其中ORDER BY子句的各个术语来自联接的单独表的联接中。
  7. 添加将FROM子句子查询实现为协程的功能,而不是将子查询显示到临时表中的功能。
  8. 增强了命令行shell:
    1. 添加了“ .print”命令
    2. “ .width”命令中的负数会导致右对齐
    3. 使用SQLITE_DEBUG编译时,添加“ .wheretrace”命令
  9. 添加了busy_timeout编译指示
  10. 添加了instr() SQL函数。
  11. 添加了SQLITE_FCNTL_BUSYHANDLER文件控件,该文件控件用于允许VFS实现访问繁忙的处理程序回调。
  12. 在内置的xDelete方法VFSes现在回到SQLITE_IOERR_DELETE_NOENT如果要删除的文件不存在。
  13. 增强了对QNX的支持。
  14. 面向ARM时,应解决MSVC编译器中的优化程序错误。
  15. 错误修复:避免在共享缓存模式下发生各种并发问题。
  16. 错误修复:如果同时使用备份API共享缓存和SQLite加密扩展,可以避免死锁或崩溃。
  17. 错误修复:使用TCL接口创建的SQL函数采用“空值”设置。
  18. 错误修复:修复了大于16GB的数据库在CREATE INDEX上的32位溢出问题。
  19. 错误修复:在 CHECK约束中使用COLLATE运算符或在共享缓存模式下查看时,请避免segfault 。
  20. SQLITE_SOURCE_ID:“ 2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae”
  21. sqlite3.c的SHA1:2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff“

2012-10-04(3.7.14.1)

  1. 修复导致在LEFT JOIN上出现段错误(在ON子句中包含OR)的错误(票证 [d02e1406a58ea02d]])。
  2. 解决VisualStudio-2012编译器中优化器中的一个错误,该错误会导致在ARM上编译SQLite时生成无效的代码。
  3. 修复TCL接口,以使“空值”设置适合SQL函数的TCL实现。
  4. SQLITE_SOURCE_ID:“ 2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb”
  5. sqlite3.c的SHA1:62aaecaacab3a4bf4a8fe4aec1cfdc1571fe9a44

2012-09-03(3.7.14)

  1. 删除对OS / 2的内置支持。如果您需要升级OS / 2应用程序以使用此版本或更高版本的SQLite,请使用 sqlite3_vfs_register()接口添加应用程序定义的VFS。在此版本中删除的代码可以用作应用程序定义的VFS的基准。
  2. 从命令行shell的“ .dump”命令的输出重构数据库时,请确保精确保留浮点值 。
  3. 添加了sqlite3_close_v2()接口。
  4. 更新了命令行外壳程序,以便可以使用SQLITE_OMIT_FLOATING_POINTSQLITE_OMIT_AUTOINIT进行构建 。
  5. Windows Makefile和构建过程的改进。
  6. PRAGMA完整性检查PRAGMA快速检查的增强,以便他们可以选择仅检查单个附加数据库,而不是所有附加数据库。
  7. WAL模式处理的增强功能确保始终有至少一个有效的读取标记可用,以便只读进程始终可以读取数据库。
  8. ORDER BY和CREATE INDEX使用的排序器中的性能增强。
  9. 添加了SQLITE_DISABLE_FTS4_DEFERRED编译时选项。
  10. 更好地处理聚合查询,其中聚合函数包含在子查询中。
  11. 增强查询计划程序,以便它将尝试在使用或优化的 查询上使用覆盖索引
  12. SQLITE_SOURCE_ID:“ 2012-09-03 15:42:36 c0d89d4a9752922f9e367362366efde4f1b06f2a”
  13. sqlite3.c的SHA1:5fdf596b29bb426001f28b488ff356ae14d5a5a6

2012-06-11(3.7.13)

  1. 允许使用URI文件名指定 的内存数据库使用共享缓存,以便可以从多个数据库连接访问相同的内存数据库。
  2. 识别并使用URI文件名中mode = memory查询参数 。
  3. 避免在任何一个连接关闭时重置共享缓存连接的架构。而是,等待最后一个连接关闭,然后再重置架构。
  4. RTREE扩展中,将64位浮点数四舍五入为32位用于存储时,请始终沿导致边界框变大的方向四舍五入。
  5. 调整unix驱动程序,以避免不必要地调用fchown()。
  6. 将接口sqlite3_quota_ferror()和sqlite3_quota_file_available()添加到test_quota.c模块。
  7. 如果尝试重载或替换虚拟表 模块,则sqlite3_create_module()sqlite3_create_module_v2()接口将返回SQLITE_MISUSE 。在这种情况下,根据历史和当前文档始终会调用析构函数。
  8. SQLITE_SOURCE_ID:“ 2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc”
  9. sqlite3.c的SHA1:ff0a771d6252545740ba9685e312b0e3bb6a641b

2012-05-22(3.7.12.1)

  1. 修复了 3.7.12版本中的错误(票号c2ad16f997),该错误 可能导致某些晦涩的嵌套聚合查询出现段错误。
  2. 修复其他各种次要测试脚本问题。
  3. SQLITE_SOURCE_ID:“ 2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789”
  4. sqlite3.c的SHA1:d494e8d81607f0515d4f386156fb0fd86d5ba7df

2012-05-14(3.7.12)

  1. sqlite3_db_status()添加SQLITE_DBSTATUS_CACHE_WRITE选项。
  2. 优化typeof()length() SQL函数,以便避免不必要地从磁盘读取数据库内容。
  3. 添加FTS4“合并”命令,在FTS4“automerge”命令,和FTS4“诚信检查”命令
  4. 报告失败的特定CHECK约束的名称。
  5. 在命令行外壳程序中,如果“ .output”命令的参数的第一个字符为“ |”,请使用popen()而不是fopen()。
  6. 在Windows VFS中使用OVERLAPPED可以避免某些系统调用,从而提高性能。
  7. 当一侧或另一侧始终为假时,对AND运算符进行更积极的优化。
  8. 改进了在WHERE子句中具有许多与OR连接的术语的查询的性能,这些都可以建立索引。
  9. 添加SQLITE_RTREE_INT_ONLY编译时选项,以强制 R * Tree扩展模块对存储和计算使用整数而不是浮点值。
  10. 增强PRAGMA完整性检查命令,以在处理数GB的数据库时使用更少的内存。
  11. 新接口已添加到test_quota.c附加模块。
  12. 在命令行外壳中添加了“ .trace”点命令。
  13. 允许递归调用虚拟表构造函数。
  14. 改进了对复合查询的ORDER BY子句的优化。
  15. 改进了聚合查询中包含的聚合子查询的优化。
  16. 错误修复:修复了RELEASE命令,使其不会取消挂起的查询。这修复了3.7.11中引入的问题。
  17. 错误修复:不要将DISTINCT视为多余的,除非结果集的子集受到UNIQUE约束,并且该子集中的任何列都不能为NULL。机票385a5b56b9
  18. 错误修复:不要优化与UNIQUE索引具有相同术语的ORDER BY子句,除非这些术语也不为NULL。机票2a5629202f
  19. SQLITE_SOURCE_ID:“ 2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004”
  20. sqlite3.c的SHA1:57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1

2012-03-20(3.7.11)

  1. 增强INSERT语法,以允许通过VALUES子句插入多行。
  2. 增强CREATE VIRTUAL TABLE命令以支持IF NOT EXISTS子句。
  3. 增加了sqlite3_stricmp()接口作为对口 sqlite3_strnicmp()
  4. 添加了sqlite3_db_readonly()接口。
  5. 添加了SQLITE_FCNTL_PRAGMA文件控件,使VFS实现能够添加新的PRAGMA语句或覆盖内置PRAGMA
  6. 格式查询:“ SELECT max(x),y​​ FROM table”返回包含最大x值的同一行上的y值。
  7. 增加了对FTS4 languageid选项的支持。
  8. 记录了对FTS4内容选项的支持。此功能实际上是从3.7.9版开始的代码中,但是现在才被认为是正式支持的功能。
  9. 待处理的语句不再阻止ROLLBACK。相反,挂起的语句将在ROLLBACK之后的下一次访问时返回SQLITE_ABORT。
  10. 改进了命令行外壳中CSV输入的处理
  11. 修复了版本3.7.10中引入的错误,如果WHERE子句可索引的术语由OR连接,则该错误可能导致LEFT JOIN被错误地转换为INNER JOIN。
  12. SQLITE_SOURCE_ID:“ 2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669”
  13. sqlite3.c的SHA1:d460d7eda3a9dccd291aed2a9fda868b9b120a10

2012-01-16(3.7.10)

  1. 默认模式格式编号从1更改为4。这意味着,除非运行PRAGMA legacy_file_format = ON语句,否则SQLite 3.3.0(2006-01-10)之前的版本将无法读取新创建的数据库文件。这也意味着 默认情况下将启用降序索引
  2. 不建议使用sqlite3_pcache_methods结构以及SQLITE_CONFIG_PCACHESQLITE_CONFIG_GETPCACHE配置参数。它们由新的sqlite3_pcache_methods2结构以及 SQLITE_CONFIG_PCACHE2SQLITE_CONFIG_GETPCACHE2配置参数代替。
  3. 在VFS界面中添加了powersafe overwrite属性。提供SQLITE_IOCAP_POWERSAFE_OVERWRITE I / O功能, SQLITE_POWERSAFE_OVERWRITE编译时选项以及URI文件名的“ psow = BOOLEAN”查询参数。
  4. 添加了sqlite3_db_release_memory()接口和 rinkle_memory编译指示
  5. 添加了sqlite3_db_filename()接口。
  6. 添加了sqlite3_stmt_busy()接口。
  7. 添加了sqlite3_uri_boolean()sqlite3_uri_int64()接口。
  8. 如果PRAGMA cache_size的参数为负N,则意味着无论页面大小如何,都将大约-1024 * N字节的内存用于页面缓存。
  9. 增强了默认内存分配器,以在Windows上使用_msize(),在Mac上使用malloc_size()和在Linux上使用malloc_usable_size()。
  10. 增强了查询计划程序,以支持对rowid具有范围约束的索引查询。
  11. 增强了查询计划程序的展平逻辑,以允许UNION ALL复合物向上提升,以替换简单的包装SELECT,即使这些复合物已联接。
  12. 增强了查询计划程序,以便xfer优化可以与INTEGER PRIMARY KEY ON CONFLICT一起使用,只要目标表最初为空即可。
  13. 增强了Windows VFS,以便可以使用xSetSystemCall接口覆盖所有系统调用。
  14. 更新了“ unix-dotfile” VFS,以使用带有mkdir()和rmdir()的锁定目录,而不是带有open()和unlink()的锁定文件。
  15. 对test_quota.c扩展的增强,以支持带有配额的类似stdio的接口。
  16. 将unix VFS更改为可以容忍read()系统调用,该系统调用返回的内容少于所请求字节的总数。
  17. 更改unix和Windows VFS,以报告扇区大小为4096,而不是原来的默认值512。
  18. TCL接口中,将-uri选项添加到“ sqlite3” TCL命令中,该命令用于创建新的数据库连接对象。
  19. SQLITE_ENABLE_TREE_EXPLAIN编译时选项中添加了SQLITE_TESTCTRL_EXPLAIN_STMT测试控制选项, 以使 命令行外壳程序能够显示其处理的SQL语句的ASCII语法分析树,以进行调试和分析。
  20. 错误修复: 重新启动WAL时添加了一个额外的xSync,以防止因电源中断而导致极不可能的但理论上可能的数据库损坏。门票ff5be73dee
  21. 错误修复: 更改VDBE,以便将所有寄存器初始化为Invalid(而不是NULL)。门票7bbfb7d442
  22. 错误修复: 解决了32位整数溢出可能导致的问题。门票AC00F496B7E2
  23. SQLITE_SOURCE_ID:“ 2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204”
  24. sqlite3.c的SHA1:6497cbbaad47220bd41e2e4216c54706e7ae95d4

2011-11-01(3.7.9)

  1. 如果FTS4中的搜索令牌(位于MATCH运算符的右侧) 以“ ^”开头,则该令牌必须是其文档字段中的第一个。 **可能不兼容的更改**
  2. sqlite3_db_status()接口添加了选项SQLITE_DBSTATUS_CACHE_HITSQLITE_DBSTATUS_CACHE_MISS
  3. 删除了对SQLITE_ENABLE_STAT2的支持,将其替换为功能更强大的SQLITE_ENABLE_STAT3选项。
  4. sqlite3_analyzer实用程序的增强功能,包括--pageinfo和--stats选项以及对多路复用数据库的支持。
  5. 增强sqlite3_data_count()接口,以便可以用来确定在准备好的语句中是否已看到SQLITE_DONE。
  6. 添加了SQLITE_FCNTL_OVERWRITE文件控件,SQLite内核通过该文件控件向VFS指示当前事务将覆盖整个数据库文件。
  7. 将默认后备内存分配器分配大小从100字节增加到128字节。
  8. 增强了查询计划程序,以便可以在WHERE子句中将术语放入和排除OR表达式,以期找到更好的索引。
  9. 添加了SQLITE_DIRECT_OVERFLOW_READ编译时选项,使 溢出页面可从数据库文件中直接读取,而绕过页面缓存
  10. 删除sqlite3_mprintf()系列字符串渲染例程的格式说明符中的精度和宽度值的大小限制。
  11. 修复了一个阻止ALTER TABLE ... RENAME无法以UTF16编码处理数据库中某些虚拟表的错误。
  12. 修复了ASCII到浮点转换中的一个错误,该错误会在转换具有非常大的指数的数字时导致性能降低和错误的结果。
  13. 修复了一个错误,该错误会导致在使用多个聚合函数的聚合查询中导致错误的结果,这些聚合函数的参数包含复杂的表达式,这些表达式仅在这些表达式中包含字符串文字的情况下有所不同。
  14. 修复了一个错误,该错误会阻止page_countquick_check编译指示的名称大写。
  15. 修复了在使用count_changes编译指示时导致VACUUM失败的错误。
  16. 修正了一个错误虚表的实现,会导致系统崩溃如果FTS4表被丢弃在事务内和SAVEPOINT之后发生。
  17. SQLITE_SOURCE_ID:“ 2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e”
  18. sqlite3.c的SHA1:becd16877f4f9b281b91c97e106089497d71bb47

2011-09-19(3.7.8)

  1. 在非常大的表上,CREATE INDEX的性能提高了几个数量级。
  2. 改进了Windows VFS,以更好地防御反病毒软件的干扰。
  3. 当存在DISTINCT关键字时,改进了查询计划的优化。
  4. 允许在UNIX VFS中覆盖更多的系统调用-为铬沙箱提供更好的支持。
  5. 将超前高速缓存行的默认大小从100字节增加到128字节。
  6. 对test_quota.c模块的增强,使其可以跟踪先前存在的文件。
  7. 错误修复:虚拟表现在可以正确处理IS NOT NULL约束。
  8. 错误修复:正确处理WHERE子句中与索引一起使用的嵌套相关子查询。
  9. SQLITE_SOURCE_ID:“ 2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177”
  10. sqlite3.c的SHA1:bfcd74a655636b592c5dba6d0d5729c0f8e3b4de

2011-06-28(3.7.7.1)

  1. 修复了一个错误,该错误导致 使用sqlite3_prepare()编译的PRAGMA case_sensitive_like语句因SQLITE_SCHEMA错误而失败。
  2. SQLITE_SOURCE_ID:“ 2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f”
  3. sqlite3.c的SHA1:d47594b8a02f6cf58e91fb673e96cb1b397aace0

2011-06-23(3.7.7)

  1. 添加对URI文件名的支持
  2. 添加sqlite3_vtab_config()接口以支持带有虚拟表ON CONFLICT子句。
  3. 虚拟表中添加xSavepointxReleasexRollbackTo方法 以支持虚拟表SAVEPOINT
  4. 更新内置的FTS3 / FTS4RTREE虚拟表以支持 ON CONFLICT子句和REPLACE
  5. 避免不必要地重新分析数据库架构。
  6. 增加了对FTS4前缀选项FTS4订单选项的支持
  7. 只要存在现有的读/写连接,就允许以只读方式打开WAL模式数据库。
  8. 增加了对短文件名的支持。
  9. SQLITE_SOURCE_ID:“ 2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2”
  10. sqlite3.c的SHA1:5bbe79e206ae5ffeeca760dbd0d66862228db551

2011-05-19(3.7.6.3)

  1. 修复了WAL模式的问题,如果将cache_size设置得非常小(小于10)并且SQLite处于内存压力,则可能导致事务以静默方式回滚。

2011-04-17(3.7.6.2)

  1. 修复open(2)系统调用的函数原型以与POSIX一致。没有此修复程序,pthreads将无法在NetBSD上正常工作。
  2. SQLITE_SOURCE_ID:“ 2011-04-17 17:25:17 154ddbc17120be2915eb03edc52af1225eb7cb5e”
  3. sqlite3.c的SHA1:806577fd524dd5f3bfd8d4d27392ed2752bc9701

2011-04-13(3.7.6.1)

  1. 修复了3.7.6中的错误,该错误仅在SQLITE_FCNTL_SIZE_HINT 文件控件与使用HAVE_POSIX_FALLOCATE编译时选项且已关闭SQLITE_ENABLE_LOCKING_MODE的SQLite版本一起使用时才会出现。
  2. SQLITE_SOURCE_ID:“ 2011-04-13 14:40:25 a35e83eac7b185f4d363d7fa51677f2fdfa27695”
  3. sqlite3.c的SHA1:b81bfa27d3e09caf3251475863b1ce6dd9f6ab66

2011-04-12(3.7.6)

  1. 添加了sqlite3_wal_checkpoint_v2()接口,并增强了 wal_checkpoint编译指示以支持阻止检查点。
  2. 对查询计划程序的改进,使其可以更好地估算计划成本,从而更好地选择正确的计划,尤其是在使用SQLITE_ENABLE_STAT2的情况下。
  3. 修复了一个错误,该错误导致在运行带有外键约束的另一条语句之前,未通过失败的外键约束的一条语句调用sqlite3_finalize()时,无法实施延迟的外键约束。
  4. 现在将使用浮点数执行可能导致溢出的整数算术运算。
  5. VFS对象的版本号增加到3,并添加了用于进行全覆盖测试的新方法xSetSysCall,xGetSysCall和xNextSysCall。
  6. SQLITE_MAX_ATTACHED的最大值从30增加到62(尽管默认值保持为10)。
  7. FTS4的增强功能:
    1. 添加了fts4aux
    2. 增加了对压缩的FTS4内容的支持
  8. 增强ANALYZE命令以支持索引名称作为其参数,以便仅分析该索引。
  9. 在unix和类似unix的平台上添加了内置的“ unix-excl” VFS。
  10. SQLITE_SOURCE_ID:“ 2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7”
  11. sqlite3.c的SHA1:f38df08547efae0ff4343da607b723f588bbd66b

2011-02-01(3.7.5)

  1. 添加了sqlite3_vsnprintf()接口。
  2. sqlite3_db_status()接口添加了SQLITE_DBSTATUS_LOOKASIDE_HITSQLITE_DBSTATUS_LOOKASIDE_MISS_SIZESQLITE_DBSTATUS_LOOKASIDE_MISS_FULL选项 。
  3. 添加了SQLITE_OMIT_AUTORESET编译时选项。
  4. 添加了SQLITE_DEFAULT_FOREIGN_KEYS编译时选项。
  5. 更新为sqlite3_stmt_readonly(),以便为所有准备好的语句明确定义其结果,并使其与VACUUM一起使用
  6. 命令行shell中添加了“ -heap”选项
  7. 修复涉及频繁进出WAL模式和VACUUM的错误(理论上可能会导致数据库损坏)的错误。
  8. 增强sqlite3_trace()机制,以便显示嵌套的SQL语句(例如可能由虚拟表生成的SQL语句),但在注释中显示,而无需参数扩展。使用FTS3 / 4和/或RTREE虚拟表时,这可以大大提高跟踪输出。
  9. 更改所有内置VFS上的xFileControl()方法以针对无法识别的操作代码返回 SQLITE_NOTFOUND而不是SQLITE_ERROR
  10. 如果数据库的PRAGMA同步设置为OFF ,则SQLite核心将对 VFS调用SQLITE_FCNTL_SYNC_OMITTED文件控件代替对xSync的调用 。

2010-12-07(3.7.4)

  1. 添加了sqlite3_blob_reopen()接口,以允许将现有的 sqlite3_blob对象反弹到新行。
  2. 使用新的sqlite3_blob_reopen()接口来提高FTS的性能。
  3. 如果PRAGMAlocking_mode设置为EXCLUSIVE ,则不支持共享内存的VFS可以访问WAL数据库。
  4. 增强查询计划的能力
  5. 添加了sqlite3_stmt_readonly()接口。
  6. 添加了PRAGMA checkpoint_fullfsync
  7. sqlite3_file_control()中添加了SQLITE_FCNTL_FILE_POINTER选项。
  8. 添加了对FTS4的支持以及对FTS matchinfo()函数的增强。
  9. 添加了test_superlock.c模块,该模块提供了用于获取对回滚或WAL数据库的排他锁的示例代码。
  10. 添加了test_multiplex.c模块,该模块提供了一个示例VFS,该示例VFS提供了DB的多路复用(分片)功能,将其拆分为多个固定大小的文件。
  11. 或优化相关的非常模糊的错误已修复。

2010-10-08(3.7.3)

  1. 添加了sqlite3_create_function_v2()接口,该接口包含析构函数回调。
  2. 添加了对使用应用程序提供的回调例程来定义查询区域边界的自定义r-tree查询的支持。
  3. 默认页缓存会尽力避免使用超出SQLITE_CONFIG_PAGECACHE分配的内存之外的内存。或者,如果使用页面缓存是从堆中分配的,即使未设置SQLITE_ENABLE_MEMORY_MANAGEMENT,它也会 努力避免遍历sqlite3_soft_heap_limit64()
  4. 添加了sqlite3_soft_heap_limit64()接口,以替代 sqlite3_soft_heap_limit()
  5. 现在,即使表没有索引,ANALYZE命令也可以收集表的统计信息。
  6. 调整查询计划程序以帮助它更好地为每个查询找到最有效的查询计划。
  7. 增强了内部文本到数字的转换例程,以便它们与UTF8或UTF16一起使用,从而避免了一些UTF16到UTF8的文本转换。
  8. 修复了导致 Win32系统中的大型WAL事务导致过多内存使用的问题。
  9. VDBE和B-Tree层之间的接口得到增强,以便VDBE向B-Tree层提供提示,让B-Tree层知道何时可以安全地使用散列代替B-Tree用于临时表。
  10. 杂项文档增强。

2010-08-24(3.7.2)

  1. 修正了一个 旧很不起眼的错误,可以导致数据库损坏的自由页列表incremental_vacuum使用。

2010-08-23(3.7.1)

  1. sqlite3_db_status()接口添加了新命令SQLITE_DBSTATUS_SCHEMA_USEDSQLITE_DBSTATUS_STMT_USED,以便报告用于保存架构和连接准备语句的内存量。
  2. 将数据库页面的最大大小从32KiB增加到64KiB。
  3. 即使右侧字符串不包含通配符,也请使用LIKE优化
  4. 为unix和windows的sqlite3_file_control()接口添加了SQLITE_FCNTL_CHUNK_SIZE动词,以使数据库文件大块增长,以减少磁盘碎片。
  5. 修复了查询计划器中的一个错误,该错误在某些复杂的联接上导致相对于3.6.23.1的性能下降。
  6. 修复了OS / 2后端中的错字。
  7. 重构了寻呼机模块。
  8. SQLITE_MAX_PAGE_SIZE编译时选项现在被静默忽略。最大页面大小被硬编码为65536字节。

2010-08-04(3.7.0.1)

  1. 修复了3.7.0版和3.6.23.1版交替写入同一数据库文件时可能发生的数据库损坏错误。 门票[51ae9cad317a1]
  2. 修复与版本3.7.0的查询计划程序增强功能相关的性能回归。

2010-07-21(3.7.0)

  1. 添加了对预写日志记录的支持。
  2. 查询计划器增强功能-创建自动瞬态索引会减少估计的查询时间。
  3. 查询计划程序增强功能-如果查询还包含强制执行正确输出顺序的GROUP BY子句,则ORDER BY将变为无操作。
  4. sqlite3_db_status()添加SQLITE_DBSTATUS_CACHE_USED动词。
  5. 现在,逻辑数据库的大小存储在数据库头中,以便可以将字节追加到数据库文件的末尾而不会破坏文件,并且SQLite将在不支持ftruncate()的系统上正常工作。

2010-03-26(3.6.23.1)

  1. 修复FTS3的offsets()函数中的错误
  2. 修复丢失的“同步”,如果在ROLLBACK操作即将完成时发生电源故障或操作系统崩溃,则忽略该同步可能会导致数据库损坏。

2010-03-09(3.6.23)

  1. 添加了secure_delete编译指示
  2. 添加了sqlite3_compileoption_used()sqlite3_compileoption_get()接口,以及 compile_options编译指示sqlite_compileoption_used()sqlite_compileoption_get() SQL函数。
  3. 增加了sqlite3_log()与一起接口 SQLITE_CONFIG_LOG动词sqlite3_config() 。将“ .log”命令添加到命令行界面
  4. FTS3的改进。
  5. SQLITE_OMIT_FLOATING_POINT的支持方面的改进和错误修复。
  6. 所述INTEGRITY_CHECK编译被增强,以检测出的无序的rowid。
  7. “ .genfkey”运算符已从命令行界面中删除 。
  8. 更新到共同托管的Lemon LALR(1)解析器生成器。(这些更新不影响SQLite。)
  9. 各种小错误修复和性能增强。

2010-01-06(3.6.22)

  1. 修复了在查询的WHERE子句中使用CAST或OR运算符时(很少)会导致错误查询结果的错误。
  2. FTS3的持续增强和改进。
  3. 其他杂项错误修复。

2009-12-07(3.6.21)

  1. sqlite3_trace()产生的SQL输出现在已修改为包括绑定参数的值。
  2. 针对单个用例的SQLite用户针对特定用例进行性能优化。CPU操作数量减少了12%(由Valgrind衡量)。实际上,实际性能的改进可能会因工作负载而异。更改包括:
    1. IFNULL()COALESCE() SQL函数是使用在线VDBE代码,而不是调用外部功能,让未使用的参数永远不需要评估现已实现。
    2. 如果substr() SQL函数仅计算前缀,则它不会费心地测量其整个输入字符串的长度。
    3. 不必要的OP_IsNull,OP_Affinity和OP_MustBeInt VDBE操作码被抑制
    4. 各种代码重构以提高性能
  3. FTS3扩展程序已进行了重大的返工和清理。新的FTS3文档现在可用。
  4. SQLITE_SECURE_DELETE时间编译选项固定,以确保当内容被删除,甚至截断优化应用。
  5. 改进了命令行界面中“点命令”的处理 。
  6. 其他小错误修复和文档增强。

2009-11-04(3.6.20)

  1. 优化程序的增强:当LIKE运算符的RHS上的绑定更改或在SQLITE_ENABLE_STAT2下任何范围约束发生更改时,准备好的语句将自动重新编译。
  2. 各种小错误修复和文档增强。

2009-10-30(3.6.16.1)

  1. 3.6.16版的一个小补丁,用于修复 OP_If bug

2009-10-14(3.6.19)

  1. 增加了对外键约束的支持。默认情况下,外键约束是禁用的。使用foreign_keys编译指示将其打开。
  2. 广义化IS和IS NOT运算符以在其右侧采用任意表达式。
  3. 当与TCL 8.6或更高版本链接时,TCL接口已得到增强,可以使用 非递归引擎(NRE)接口连接到TCL解释器。
  4. 修复了3.6.18中引入的错误,该错误在尝试在只读数据库上进行写操作时可能导致段错误。

2009-09-11(3.6.18)

  1. SQLite源代码的版本控制已从CVS过渡到 Fossil
  2. 查询计划程序增强功能。
  3. SQLITE_ENABLE_STAT2编译时选项导致ANALYZE 命令收集各指标的小直方图,以帮助更好的SQLite竞争范围的查询索引中进行选择。
  4. 可以使用PRAGMA recursive_triggers 语句启用递归触发器。
  5. 由于REPLACE解决冲突而删除行时,Delete触发器将触发 。仅在启用递归触发器时才启用此功能。
  6. sqlite3_open_v2()添加了SQLITE_OPEN_SHAREDCACHESQLITE_OPEN_PRIVATECACHE标志,这些标志用于覆盖单个数据库连接的全局 共享缓存模式设置。
  7. 添加了改进的版本识别功能:C预处理程序宏SQLITE_SOURCE_ID,C / C ++接口sqlite3_sourceid()和SQL函数sqlite_source_id()
  8. 对触发器的模糊错误修复([efc02f9779])。

2009-08-10(3.6.17)

  1. 公开sqlite3_strnicmp()接口,供扩展程序和应用程序使用。
  2. 消除对虚拟表共享缓存模式的限制。现在可以同时使用虚拟表和共享缓存。
  3. 许多代码简化和模糊的错误修复,以支持提供100%的分支测试覆盖率

2009-06-27(3.6.16)

  1. 修复了一个错误(票号3929),该错误有时会导致对具有自修改触发器的索引表执行INSERT或UPDATE操作失败。
  2. 其他较小的错误修复和性能优化。

2009-06-15(3.6.15)

  1. 重构SQL表达式的内部表示,以便它们在嵌入式平台上使用更少的内存。
  2. 减少使用的堆栈空间量
  3. 修复了HP / UX和Sparc上的64位对齐错误
  4. 当传递无效的参数组合时,sqlite3_create_function()系列接口现在返回 SQLITE_MISUSE而不是SQLITE_ERROR
  5. 使用CREATE TABLE ... AS SELECT ...创建新表时,列的数据类型是简化的SQLite数据类型(TEXT,INT,REAL,NUMERIC或BLOB),而不是源表中原始数据类型的副本。
  6. 检查热回滚日志时解决竞争条件。
  7. sqlite3_shutdown()接口释放Windows下所有互斥。
  8. 增强了针对损坏的数据库文件的鲁棒性
  9. 持续改进测试套件,并进行了修复,以掩盖测试套件改进正在发现的错误和不一致之处。

2009-05-25(3.6.14.2)

  1. 修复了3.6.14版本中引入的代码生成器错误。在晦涩的情况下,此错误可能导致错误的查询结果。机票编号3879。

2009-05-19(3.6.14.1)

  1. 修复group_concat()故障单#3841中的错误
  2. 修复了传呼机缓存中的性能错误,故障单#3844
  3. 修复了sqlite3_backup实现中的一个错误,该错误可能导致备份数据库损坏。机票#3858。

2009-05-07(3.6.14)

  1. 添加了可选的异步VFS模块。
  2. 增强了查询优化器,以便虚拟表能够在WHERE子句中使用OR和IN运算符。
  3. 加快btree和pager层的速度。
  4. 添加了SQLITE_HAVE_ISNAN编译时选项,该选项将导致使用标准数学库中的isnan()函数代替SQLite自己的自制NaN检查器。
  5. 无数次小错误修复,文档改进,新的和改进的测试用例以及代码简化和清除。

2009-04-13(3.6.13)

  1. 修复了3.6.12版中的一个错误,该错误在空数据库的sqlite_master表上运行count(*)时会导致segfault。机票编号3774。
  2. 修复了3.6.12版中的一个错误,该错误会导致segfault,该错误在使用DEFAULT值插入到表中时存在,该函数中有一个函数是DEFAULT值表达式的一部分。机票#3791。
  3. 修复Sparc上的数据结构对齐问题。机票#3777。
  4. 其他小错误修复。

2009-03-31(3.6.12)

  1. 修正了一个导致数据库损坏时的错误incremental_vacuum在内存数据库回滚。机票#3761。
  2. 添加了sqlite3_unlock_notify()接口。
  3. 添加了reverse_unordered_selects pragma
  4. Windows上的默认页面大小会自动调整以匹配基础文件系统的功能。
  5. CLI中添加新的“ .genfkey”命令,以生成用于实现外键约束的触发器。
  6. “ count(*)”查询的性能改进。
  7. 减少特别是由TRIGGER使用的堆内存量。

2009-02-18(3.6.11)

  1. 添加了热备份界面
  2. CLI中添加了新命令“ .backup”和“ .restore” 。
  3. 添加了备份还原到TCL接口的新方法。
  4. 语法气泡图的改进
  5. 各种小错误修复

2009-01-15(3.6.10)

  1. 修复了可能导致数据库损坏的缓存一致性问题。机票3584。

2009-01-14(3.6.9)

  1. 修复了两个错误,将它们合并在一起可能会导致错误的查询结果。这两个bug本身都是无害的。只有当他们合作时,他们才会引起问题。机票#3581。

2009-01-12(3.6.8)

  1. 增加了对嵌套事务的支持
  2. 增强了查询优化器,使其能够使用多个索引来有效处理 WHERE子句中的 OR连接约束
  3. 使用SQLITE_ENABLE_FTS3_PARENTHESIS编译时选项添加了对FTS3查询模式中括号的支持 。

2008-12-16(3.6.7)

  1. 在os_unix.c中重新组织Unix接口
  2. 在Mac OS X上增加了对“代理锁定”的支持。
  3. 以向后兼容的方式更改了sqlite3_auto_extension()接口的原型,但可能会在使用该接口的新版本应用程序中引起警告。
  4. 以向后兼容但可能导致编译器警告的方式更改了sqlite3_vfs对象的xDlSym方法的签名。
  5. 添加了多余的强制类型转换和变量初始化,以消除讨厌的编译器警告。
  6. 修复了各种小错误。

2008-11-26(3.6.6.2)

  1. 修复了b树删除算法中的一个错误,该错误似乎可能导致数据库损坏。该错误最初是在2008年11月13日签入[5899]时在版本3.6.6中引入的 。
  2. 修复在磁盘I / O错误之后可能发生的内存泄漏。

2008-11-22(3.6.6.1)

  1. 修复了页面缓存中的一个错误,该错误在回滚后可能导致数据库损坏。此错误最早在3.6.4版本中引入。
  2. 其他两个非常小的错误修复

2008-11-19(3.6.6)

  1. 修复#define,阻止memsys5进行编译
  2. 修复了导致FTS3崩溃的虚拟表提交机制中的问题。机票#3497。
  3. 添加应用程序定义的页面缓存
  4. 添加了对VxWorks的内置支持

2008-11-12(3.6.5)

  1. 将MEMORY选项添加到journal_mode pragma
  2. 添加了sqlite3_db_mutex()接口。
  3. 添加了SQLITE_OMIT_TRUNCATE_OPTIMIZATION编译时选项。
  4. 修复了截断优化,以便sqlite3_changes()sqlite3_total_changes()接口以及count_changes编译指示 返回正确的值。
  5. 添加了sqlite3_extended_errcode()接口。
  6. 现在,即使有挂起的查询,COMMIT命令也会成功。如果有未决的增量BLOB I / O请求,它将返回SQLITE_BUSY
  7. 在一个或多个查询仍悬而未决的情况下尝试进行ROLLBACK时,错误代码将更改为SQLITE_BUSY(而不是SQLITE_ERROR)。
  8. 删除对实验内存分配器memsys4和memsys6的所有支持。
  9. 添加了SQLITE_ZERO_MALLOC编译时选项。

2008-10-15(3.6.4)

  1. DELETEUPDATE语句上添加对LIMIT和ORDER BY子句的选项支持。仅在使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT编译SQLite时 有效
  2. 添加了sqlite3_stmt_status()接口用于性能监视。
  3. 添加INDEXED BY子句。
  4. 现在在Mac OS X上默认启用LOCKING_STYLE扩展
  5. PRAGMA journal_mode中添加了TRUNCATE选项
  6. B树层中树平衡逻辑的性能增强。
  7. 添加了genfkey程序的 源代码 文档,用于自动生成触发器以强制执行外键约束。
  8. 添加了SQLITE_OMIT_TRUNCATE_OPTIMIZATION编译时选项。
  9. SQL语言的文档转换为使用 语法图,而不是BNF。
  10. 其他小错误修复

2008-09-22(3.6.3)

  1. 修复了先前版本引入的SELECT DISTINCT逻辑中的错误。
  2. 其他小错误修复

2008-08-30(3.6.2)

  1. 将分页器子系统拆分为单独的分页器和pcache子系统。
  2. 将标识符解析程序分解为单独的文件。
  3. Bug修复

2008-08-06(3.6.1)

  1. 添加了后备内存分配器,以在某些工作负载上将速度提高超过15%。(你的旅费可能会改变。)
  2. sqlite3_config()中添加了SQLITE_CONFIG_LOOKASIDE动词,以控制默认的后备配置。
  3. sqlite3_status()接口添加了动词SQLITE_STATUS_PAGECACHE_SIZESQLITE_STATUS_SCRATCH_SIZE
  4. 修改了SQLITE_CONFIG_PAGECACHESQLITE_CONFIG_SCRATCH,以在缓冲区大小计算中删除“ +4”幻数。
  5. 添加了sqlite3_db_config()sqlite3_db_status()接口,用于分别控制和监视每个数据库连接上的后备分配器 。
  6. 其他许多性能增强
  7. 其他小错误修复

2008-07-16(3.6.0 Beta)

  1. 修改虚拟文件系统接口以支持更广泛的嵌入式系统。有关更多信息,请参见35to36.html。 ***可能不兼容的更改***
  2. 现在,所有用于控制编译时选项的C预处理器宏均以前缀“ SQLITE_”开头。这可能需要更改使用自己的makefile和自定义编译时选项来编译SQLite的应用程序,因此我们将其标记为 ***潜在不兼容的更改***
  3. 不再支持SQLITE_MUTEX_APPDEF编译时选项。现在可以在运行时使用带有SQLITE_CONFIG_MUTEX动词的sqlite3_config()接口添加替代的互斥量实现。 ***可能不兼容的更改***
  4. 对在其右侧表达式上包含NULL的IN和NOT IN运算符的处理符合SQL标准和其他SQL数据库引擎。这是一个错误修复程序,但是由于它有可能破坏依赖于较旧错误行为的旧版应用程序,因此我们将其标记为 ***潜在不兼容的更改***
  5. 为复合子查询生成的结果列名称已简化为仅显示原始表的列名称,并省略了表名称。这使得SQLite的操作更像其他SQL数据库引擎。
  6. 添加了sqlite3_config()接口,用于对整个SQLite库进行运行时配置。
  7. 添加了sqlite3_status()接口,该接口用于查询有关整个SQLite库及其子系统的运行时状态信息。
  8. 添加了sqlite3_initialize()sqlite3_shutdown()接口。
  9. SQLITE_OPEN_NOMUTEX选项被添加到sqlite3_open_v2()
  10. 添加了PRAGMA page_count命令。
  11. 添加了sqlite3_next_stmt()接口。
  12. 添加了一个新的R * Tree虚拟表

2008-05-14(3.5.9)

  1. 增加 了对journal_mode PRAGMA和永久日志的实验支持。
  2. 日志模式PERSIST排他锁定模式下的默认行为 。
  3. 修复3.5.8版中错误引入的LEFT JOIN的性能回归(请参见故障单#3015)。
  4. 性能增强:重新设计用于解释和呈现可变长度整数的内部例程。
  5. 修复了sqlite3_mprintf()中的缓冲区溢出问题,该问题在不带零终止符的字符串传递给“%。* s”时发生。
  6. 在处理过程中,始终将IEEE浮点NaN值转换为NULL。(票号3060)
  7. 确保当一个连接在RESERVED锁上阻塞时,释放该锁后它可以继续。(票号3093)
  8. 现在,“配置”脚本应自动为大型文件支持配置Unix系统。改进了针对遇到大文件和禁用大文件支持的错误消息。
  9. 避免由于磁盘已满或I / O错误而导致的缓存页面泄漏
  10. 而且,还有更多的小错误修复和性能增强。

2008-04-16(3.5.8)

  1. 通过sqlite3_randomness()接口公开SQLite的内部伪随机数生成器(PRNG)
  2. 新接口sqlite3_context_db_handle()返回已调用应用程序定义的SQL函数的 数据库连接句柄。
  3. 新接口sqlite3_limit()允许在每个连接的基础上和在运行时设置大小和长度限制。
  4. 提高了崩溃的鲁棒性:将数据库页面大小写入回滚日志头中。
  5. 允许VACUUM命令更改数据库文件的页面大小。
  6. 允许VFS的xAccess()方法返回-1,以表示内存分配错误。
  7. 性能改进:OP_IdxDelete操作码使用解压缩的记录,从而避免了对每个删除的索引记录进行一次OP_MakeRecord操作码调用。
  8. 性能改进:常量子表达式不在循环中。
  9. 性能改进:OP_Column的结果被重用,而不是发出多个OP_Column操作码。
  10. 修复RTRIM整理序列中的错误。
  11. 修复了SQLITE_SECURE_DELETE选项中的一个导致Firefox崩溃的错误。进行安排以始终在每个发行版之前测试SQLITE_SECURE_DELETE。
  12. 其他杂项性能增强。
  13. 其他杂项小错误修复。

2008-03-17(3.5.7)

  1. 修复复合选择的寄存器分配中的错误(票号2927)-由3.5.5版中的新VM代码引入。
  2. ALTER TABLE使用双引号而不是单引号来引用文件名。
  3. 使用WHERE子句可以减小UPDATE或DELETE语句中实例化VIEW的大小。(优化)
  4. 如果外部查询是一个聚合并且内部查询包含ORDER BY,则不要应用展平优化。(票号2943)
  5. 其他OS / 2更新
  6. 添加了一个实验性的二乘幂,首次拟合的内存分配器。
  7. 从代码中删除sprintf()的所有实例
  8. 在日期字符串的末尾接受“ Z”作为祖鲁时区
  9. 修复了LIKE优化器中的一个错误,该错误在第一个通配符之前的最后一个字符为大写字母“ Z”时发生
  10. 添加了“ bitvec”对象,用于跟踪已记录日记的页面。提高速度并减少内存消耗,尤其是对于大型数据库文件。
  11. 使SQLITE_ENABLE_LOCKING_STYLE宏在Mac OS X上再次运行。
  12. 将语句日志存储在临时文件目录中,而不是与数据库文件并置。
  13. 对配置脚本进行了许多改进和清理

2008-02-06(3.5.6)

  1. 修复了阻止虚拟表在LEFT JOIN中工作的错误(票号#2913)。该问题是在3.5.5发行版之前不久引入的。
  2. 使OS / 2移植层保持最新。
  3. 添加新的sqlite3_result_error_code() API并在ATTACH的实现中使用它,以便在ATTACH失败时返回正确的错误代码。

2008-01-31(3.5.5)

  1. 将基础虚拟机转换为基于寄存器的计算机,而不是基于堆栈的计算机。唯一用户可见的更改是在EXPLAIN的输出中。
  2. 添加内置RTRIM整理序列。

2007-12-14(3.5.4)

  1. 修复了OR REPLACE子句或触发器导致删除同一表中的行作为副作用时发生的UPDATE或DELETE中的严重错误。(请参见故障单#2832。)此错误最可能的结果是分段错误,尽管可能会损坏数据库。
  2. 如果结果别名和表列名称发生冲突,则使ORDER BY的处理符合SQL标准。正确的行为是更喜欢结果别名。较旧版本的SQLite错误地选择了表列。(请参见票证#2822。)
  3. VACUUM命令将保留的设置 legacy_file_format编译。(票号#2804。)
  4. 产品化并正式支持group_concat()SQL函数。
  5. 更好地优化一些IN运算符表达式。
  6. 通过设置auto_vaccum用法和对数据库进行VACUUM,可以更改数据库的 auto_vacuum状态。
  7. FTS3中的前缀搜索效率更高。
  8. 放松CLI中的SQL语句长度限制,以便可以回放具有非常大的BLOB和字符串的数据库的“ .dump”输出,以重新创建数据库。
  9. 其他小错误修复和优化。

2007-11-27(3.5.3)

  1. 将网站和文档文件从源目录树移到单独的CM系统中
  2. 修复了INSERT INTO ... SELECT ...语句中SELECT是复合的长期存在的错误。
  3. 修复了BISEORE触发器中使用的RAISE(IGNORE)中一个长期存在的错误。
  4. 固定〜运算符的运算符优先级。
  5. 在Win32上,尝试删除不存在的文件时不要返回错误。
  6. 允许对排序序列名称加引号。
  7. 修改TCL接口以使用sqlite3_prepare_v2()
  8. 修复了malloc()失败后可能发生的多个错误。
  9. 使用NULL参数调用时,sqlite3_step()返回SQLITE_MISUSE而不是崩溃。
  10. FTS3现在专门使用SQLite内存分配器。现在可以将FTS3合并添加到SQLite合并中,以生成包含两者的超级合并。
  11. 如果有合适的索引,并且优化程序认为使用DISTINCT关键字可能是有利的,则DISTINCT关键字现在有时会使用INDEX。

2007-11-05(3.5.2)

  1. 不再支持SQLITE_OMIT_MEMORY_ALLOCATION编译时选项。
  2. 在Windows下始终使用FILE_FLAG_RANDOM_ACCESS打开文件。
  3. 内置SUBSTR()函数的第3个参数现在是可选的。
  4. 错误修复:在更改架构后重新解析架构时,请勿调用授权者。
  5. 在mem3.c中添加了实验性的无malloc的内存分配器。
  6. 虚拟机以二进制而不是文本形式存储64位整数和浮点常量,以提高性能。
  7. 在test_async.c中修复竞争条件。
  8. 在命令行界面中添加了“ .timer”命令

2007-10-04(3.5.1)

  1. Nota Bene:在此版本中,我们不使用术语“ alpha”或“ beta”,因为代码是稳定的,并且如果我们使用这些术语,则没有人会升级。但是,我们仍然保留在以后的版本中对新的VFS接口进行不兼容更改的权利。
  2. 修复了SQLITE_FULL错误处理中的一个错误,该错误可能导致数据库损坏。机票#2686。
  3. 现在,test_async.c驱动器会执行完全文件锁定,并且在同一数据库中的多个进程同时使用时可以正常工作。
  4. CLI忽略行尾的空格(包括注释)
  5. 确保查询优化器检查复合SELECT语句的所有术语的相关性。机票#2640。
  6. 添加演示代码,显示如何在不使用文件系统的情况下为原始大容量存储构建VFS。
  7. 在VFS层的xGetTempname()方法中添加了输出缓冲区大小参数。
  8. 启动新事务时,将重置寻呼机中的粘性SQLITE_FULLSQLITE_IOERR错误。

2007-09-04(3.5.0)Alpha

  1. 重新设计OS接口层。有关详细信息,请参见 34to35.html。 ***可能不兼容的更改***
  2. 现在,sqlite3_release_memory()sqlite3_soft_heap_limit()sqlite3_enable_shared_cache()接口可跨进程中的所有线程工作,而不仅仅是在其中调用它们的单个线程。 ***可能不兼容的更改***
  3. 添加了sqlite3_open_v2()接口。
  4. 重新实现了内存分配子系统,并使其在编译时可替换。
  5. 创建了一个新的互斥锁子系统,并使其在编译时可复制。
  6. 现在,相同的数据库连接可以由单独的线程同时使用。

2007-08-13(3.4.2)

  1. 修复了在自动真空模式下执行ROLLBACK命令 并设置了非常小的sqlite3_soft_heap_limit时可能发生的数据库损坏错误。机票#2565。
  2. 添加使用较小的sqlite3_soft_heap_limit运行完整回归测试的功能 。
  3. 使用较小的软堆限制来解决其他较小的问题。
  4. 解决 GCC错误32575的方法
  5. 改进了对滥用的聚合函数的错误检测。
  6. 合并生成器脚本的改进,以便所有符号都以SQLITE_PRIVATE或SQLITE_API开头。

2007-07-20(3.4.1)

  1. 修复了VACUUM中的错误,如果同时有两个进程连接到数据库,而一个VACUUM,然后另一个进程又修改了数据库,则可能导致数据库损坏。
  2. 现在,在计算要在表达式上使用的整理序列时,表达式“ +列”被认为与“列”相同。
  3. TCL语言界面中,“ @ variable”而不是“ $ variable”始终绑定为斑点。
  4. 添加了PRAGMA freelist_count 来确定空闲列表的当前大小。
  5. PRAGMA auto_vacuum =增量设置现在是持久的。
  6. 将FD_CLOEXEC添加到Unix下所有打开的文件中。
  7. 修复了将 min()/ max()优化应用于降序索引时的错误。
  8. 确保TCL语言接口在64位计算机上可以正确使用64位整数。
  9. 在SQL语句中允许值-9223372036854775808作为整数文字。
  10. 在虚拟表中添加“隐藏”列的功能。
  11. 在合并中的所有内部函数上使用宏SQLITE_PRIVATE(默认为“静态”)。
  12. 向FTS2添加可插拔标记器和ICU标记化支持
  13. 其他小错误修复和文档增强

2007-06-18(3.4.0)

  1. 修复了以下错误:如果在显式事务的中间发生SQLITE_BUSY错误,并且稍后又提交了该事务,则可能导致数据库损坏。机票#2409。
  2. 修复了以下错误:如果启用了自动真空模式并且malloc()失败遵循CREATE TABLE或CREATE INDEX语句,而该语句本身又跟随事务内部的高速缓存溢出,则该错误会导致数据库损坏。参见票证#2418。
  3. 在SQLite可以处理的事物的大小和数量添加了明确的上限。对于极端使用SQLite的应用程序,此更改可能会导致兼容性问题,这就是为什么当前版本为3.4.0而不是3.3.18的原因。
  4. 添加了对增量BLOB I / O的支持
  5. 添加了sqlite3_bind_zeroblob() API和zeroblob() SQL函数。
  6. 增加了对 增量真空的支持。
  7. 添加了SQLITE_MIXED_ENDIAN_64BIT_FLOAT编译时选项,以支持字节序高的ARM7处理器。
  8. 从核心库中删除了sprintf()和strcpy()的所有实例。
  9. 在全文搜索扩展中添加了对Unicode国际组件(ICU)的支持 。
  10. 在Windows OS驱动程序中,如果尝试获取EXCLUSIVE锁失败,则重新获取SHARED锁。机票#2354
  11. 修复REPLACE()函数,以便在第二个参数为空字符串时返回NULL。机票#2324。
  12. sqlite3_column_blob() 和相关API中记录类型转换的危害 。修复不必要的类型转换。机票#2321。
  13. TRIM()函数的国际化。机票#2323
  14. 在可能重叠的内存区域之间移动时,请使用memmove()而不是memcpy()。机票#2334
  15. 修复了一个优化器错误,该错误涉及同时具有ORDER BY和LIMIT子句的复合SELECT中的子查询。机票#2339。
  16. 如果缓冲区大小小于1,请确保sqlite3_snprintf()接口不会使缓冲区零终止。Ticket#2341
  17. 修复内置的printf逻辑,以便为浮点NaN打印“ NaN”而不是“ Inf”。机票#2345
  18. 将BLOB转换为TEXT时,请使用主数据库的文本编码。机票#2349
  19. 转换为NUMERIC时,请保持整数的全精度(如果可能)。机票#2364
  20. 修复了处理UTF16代码点0xE000的错误
  21. 在查询优化器中将WHERE约束与索引匹配时,请考虑使用显式的排序规则子句。机票#2391
  22. 修复查询优化器,以正确处理LEFT JOIN的ON子句中的常量表达式。机票#2403
  23. 修复查询优化器,以将rowid比较正确地处理为NULL。机票#2404
  24. 修复了可能由恶意SQL语句引起的许多潜在段错误。

2007-04-25(3.3.17)

  1. 当数据库头的“ write_version”值大于库可理解的值时,将数据库设置为只读而不是不可读。
  2. 其他小错误修复

2007-04-18(3.3.16)

  1. 修复了如果UNIQUE列中出现NULL导致VACUUM失败的错误。
  2. 恢复在3.3.14版中添加 但在3.3.15版中退化的性能改进 。
  3. 修复子查询中复合SELECT语句上的ORDER BY表达式处理问题。
  4. 修复在多线程环境中销毁WinCE上的锁时可能出现的段错误。
  5. 文档更新。

2007-04-09(3.3.15)

  1. 修复了3.3.14中引入的一个错误,该错误导致CREATE TEMP TABLE的回滚使数据库连接陷入僵局。
  2. 修复了一个错误,该错误导致在下降查询被数据库更改中断时返回额外的NULL行。
  3. 现在,触发器上的FOR EACH STATEMENT子句会导致语法错误。它曾经被默默地忽略。
  4. 修复可能导致I / O错误后资源泄漏的晦涩且相对无害的问题。
  5. 测试套件的许多改进。测试覆盖率现已超过98%

2007-04-02(3.3.14)

  1. 修复了一个错误(票号2273),当使用IN运算符使用两列索引的一个术语并且IN运算符的右侧包含NULL时,该错误可能导致段错误。
  2. 添加了一种用于确定基础媒体的扇区大小的新的OS接口方法:sqlite3OsSectorSize()。
  3. INSERT INTO table1 SELECT * FROM table2形式的语句的新算法 更快并且减少了碎片。VACUUM使用这种形式的语句,因此运行速度更快,碎片整理效果更好。
  4. 通过减少磁盘I / O来提高性能:
    1. 删除行时不要阅读溢出链的最后一页-只需将该页面添加到空闲列表即可。
    2. 不要将要删除的页面存储在回滚日志中。
    3. 不要读入从自由列表中提取的页面的(无意义的)内容。
    4. 除非另一个进程更改了基础数据库文件,否则不要刷新页面高速缓存(从而避免重新填充高速缓存)。
    5. 在以独占访问方式提交事务或提交TEMP数据库时,截断而不是删除回滚日志。
  5. 添加了对使用 “ PRAGMAlocking_mode = EXCLUSIVE”的独占访问模式的支持
  6. 在分页器中的大型缓冲区中使用堆空间而不是堆栈空间-在具有堆栈空间限制的嵌入式平台上很有用。
  7. 添加一个生成文件目标“ sqlite3.c”,该目标将合并在一起,在单个文件中包含核心SQLite库C代码。
  8. 使用GCC选项“ -fstrict-aliasing”进行编译时,使库正常工作。
  9. 消除了残留的SQLITE_PROTOCOL错误。
  10. 改进了测试范围,修复了其他一些小错误,插入了内存泄漏,对代码进行了重构和/或建议在某些地方推荐,以便于阅读。

2007-02-13(3.3.13)

  1. 在sqlite3_analyzer的输出中添加“碎片”度量。
  2. 添加用于显式设置表达式使用的整理顺序的COLLATE运算符。该功能被认为是实验性的,尚待其他测试。
  3. 一个联接中最多允许64个表-以前的限制是32个。
  4. 添加了两个新的实验功能: randomBlob()hex()。它们的预期用途是促进生成 UUID
  5. 修复了PRAGMA count_changes导致使用触发器更新表的结果不正确的问题
  6. 修复ORDER BY子句优化器中针对联接的最左表受UNIQUE索引约束的联接的错误。
  7. 修复了TCL界面的“复制”方法中的错误。
  8. 修复了fts1和fts2模块中的错误。

2007-01-27(3.3.12)

  1. 修复了版本3.3.9中添加的IS NULL优化中的另一个错误。
  2. 修复在深度嵌套的视图上发生的断言错误。
  3. 限制PRAGMA integrity_check 生成的输出量 。
  4. 较小的语法更改,以支持更多种类的编译器。

2007-01-22(3.3.11)

  1. 修复了新的sqlite3_prepare_v2() API的实现中的另一个错误 。我们最终会正确的...
  2. 修复了版本3.3.9中添加的IS NULL优化中的错误-该错误导致WHERE子句中包含的某些LEFT JOIN的错误结果,该错误是LEFT JOIN右表的IS NULL约束。
  3. 由于WinCE不支持此功能,因此在WinCE中将AreFileApisANSI()设置为无操作宏。

2007-01-09(3.3.10)

  1. 修复了新的sqlite3_prepare_v2() API的实现中的错误,这些错误 可能导致段错误。
  2. 修复strftime()函数中的1秒舍入错误
  3. 增强Windows操作系统层以提供详细的错误代码
  4. 解决win2k问题,以便SQLite可以使用单字符数据库文件名
  5. user_versionschema_version编译指示正确地设置自己的列名的结果集
  6. 文档更新

2007-01-04(3.3.9)

  1. 修复了pager.c中的错误,如果两个进程都试图同时恢复热日志,则该错误可能导致数据库损坏
  2. 添加了sqlite3_prepare_v2() API。
  3. 修复了命令行外壳中的“ .dump”命令,以再次显示索引,触发器和视图。
  4. 更改table_info编译指示,以便在没有默认值的情况下返回默认值NULL
  5. 支持Win95文件名中的非ASCII字符
  6. 查询优化器增强功能:
    1. 优化程序可以更好地使用索引来满足对整数主键排序的ORDER BY子句
    2. 在WHERE子句中使用索引满足IS NULL运算符
    3. 修复导致优化器错过OR优化机会的错误
    4. 即使存在LEFT联接,优化器也有更大的自由来对FROM子句中的表进行重新排序。
  7. 支持扩展加载到WinCE
  8. 在表定义中的DEFAULT子句上允许约束名称
  9. 在命令行外壳中添加了“ .bail”命令
  10. 使命令行外壳程序的CSV(逗号分隔值)输出更紧密地与接受的做法对齐
  11. 实验性FTS2模块已添加
  12. 使用sqlite3_mprintf()代替strdup()避免libc依赖
  13. VACUUM使用官方TEMP文件夹中的临时文件,而不是与原始数据库位于同一目录中
  14. Windows上临时文件名的前缀从“ sqlite”更改为“ etilqs”。

2006-10-09(3.3.8)

  1. 支持使用FTS1模块(测试版)进行全文搜索
  2. 添加了Mac OS X锁定补丁程序(测试版-默认情况下处于禁用状态)
  3. 介绍扩展错误代码,并为各种I / O错误添加错误代码。
  4. 添加了对CREATE / DROP TRIGGER / VIEW上的IF EXISTS的支持
  5. 修复回归测试套件,使其可与Tcl8.5一起使用
  6. 增强sqlite3_set_authorizer()以提供对SQL函数的调用通知。
  7. 添加了实验API:sqlite3_auto_extension()
  8. 各种小错误修复

2006-08-12(3.3.7)

  1. 增加了对虚拟表的支持(测试版)
  2. 新增了对动态加载的扩展程序(测试版)的支持
  3. sqlite3_interrupt() 程序可以要求不同的线程
  4. 添加了MATCH运算符。
  5. 现在默认文件格式为1。

2006-06-06(3.3.6)

  1. 在Windows上使用病毒扫描程序可以更好地播放
  2. 更快的:memory:数据库
  3. 修复了UTF-8到UTF-16转换中晦涩的段错误
  4. 添加了OS / 2的驱动程序
  5. 更正为聚合查询返回的列元信息
  6. EXPLAIN QUERY PLAN的增强输出
  7. LIMIT 0现在可用于子查询
  8. 查询优化器中的错误修复和性能增强
  9. 正确处理ATTACH和DETACH中的NULL文件名
  10. 解析器中改进的语法错误消息
  11. 修复IN运算符的类型强制规则

2006-04-05(3.3.5)

  1. CHECK约束正确使用冲突解决算法。
  2. SUM()函数在整数溢出时引发错误。
  3. 从最左侧的SELECT(而不是最右侧)中选择复合查询中的列名。
  4. sqlite3_create_collat​​ion()函数支持SQLITE_UTF16_ALIGNED标志。
  5. SQLITE_SECURE_DELETE编译时选项会导致删除操作将旧数据覆盖为零。
  6. 检测abs()中的整数溢出。
  7. random()函数提供64位的随机性,而不是仅32位。
  8. 解析器检测并报告自动机堆栈溢出。
  9. 更改round()函数以返回REAL而不是TEXT。
  10. 允许LEFT OUTER JOIN左侧表上的WHERE子句条款包含聚合子查询。
  11. 跳过文本中的前导空格以进行数字转换。
  12. 各种小错误和文档拼写错误修复和性能增强。

2006-02-11(3.3.4)

  1. 修复Unix互斥量实现中的一个错误,该错误可能导致多线程系统上的死锁。
  2. 修复64位计算机上的对齐问题
  3. 添加了fullfsync编译指示。
  4. 修复可能导致一些异常的LEFT OUTER JOIN给出错误结果的优化程序错误。
  5. SUM函数检测整数溢出,并使用浮点数转换为累加近似结果
  6. 主机参数名称可以以“ @”开头,以与SQL Server兼容。
  7. 其他杂项错误修复

2006-01-31(3.3.3)

  1. 删除了对CREATE INDEX上的ON CONFLICT子句的支持-它永远无法正常工作,因此不会出现任何向后兼容性问题。
  2. 现在通知授权者回调ALTER TABLE ADD COLUMN命令
  3. 在对TEMP数据库模式进行任何更改之后,所有准备好的语句都将失效,必须使用对sqlite3_prepare()的新调用来重新创建它
  4. 其他小错误修复程序,为版本3.3的第一个稳定版本做准备

2006年1月24日(3.3.2测试版)

  1. 错误修复和速度改进。改进的测试范围。
  2. 更改OS层接口:互斥锁现在必须是递归的。
  3. 停止使用特定于线程的数据进行内存不足异常处理

2006年1月16日(3.3.1 alpha)

  1. 修复了无数错误
  2. 速度提升
  3. 现在,数据库连接可以被多个线程使用,而不仅仅是创建它们的线程。

2006-01-11(3.3.0 alpha)

  1. 检查约束
  2. CREATE / DROP TABLE / INDEX上的IF EXISTS和IF NOT EXISTS子句。
  3. DESC指数
  4. 布尔值的更有效编码导致数据库文件更小
  5. 更具侵略性的SQLITE_OMIT_FLOATING_POINT
  6. 独立的INTEGER和REAL关联
  7. 为OS界面添加了虚拟功能层
  8. 已将“存在”方法添加到TCL接口
  9. 改进了对内存不足错误的响应
  10. 可以选择在同一线程的连接之间共享数据库缓存
  11. 当数据库连接共享一个公共缓存时,可选的READ UNCOMMITTED隔离(而不是默认的SERIALIZABLE隔离级别)和表级别锁定。

2005-12-19(3.2.8)

  1. 修复了在以下异常情况下可能导致数据库损坏的晦涩错误:由于唯一性约束,包含事务提交的大型INSERT或UPDATE语句(甚至是更大事务的一部分)失败。

2005-12-19(2.8.17)

  1. 修复了在以下异常情况下可能导致数据库损坏的晦涩错误:由于唯一性约束,包含事务的提交会导致较大的INSERT或UPDATE语句(甚至是更大的事务的一部分)失败。

2005-09-24(3.2.7)

  1. GROUP BY现在认为NULL再次相等,因为它应该
  2. 现在可以在缺少fdatasync()函数的Solaris和OpenBSD以及其他Unix变体上进行编译
  3. 现在再次在MSVC ++ 6上编译
  4. 修复未初始化的变量,导致各种晦涩的查询出现故障
  5. 正确计算仅在左表上受约束的LEFT OUTER JOIN

2005-09-17(3.2.6)

  1. 修复了如果VACUUM(或autovacuum)失败并在大于1GiB的数据库上回滚的错误,该错误可能导致数据库损坏
  2. 现在,LIKE优化适用于具有COLLATE NOCASE的列
  3. ORDER BY和GROUP BY现在使用受限内存
  4. 添加了对COUNT(DISTINCT expr)的支持
  5. 更改SUM()处理NULL值的方式以符合SQL标准
  6. 尽可能使用fdatasync()而不是fsync()以便稍微加快提交速度
  7. 在联接中使用CROSS关键字将关闭表重新排序优化
  8. 添加了实验性和未记录的EXPLAIN QUERY PLAN功能
  9. 在Windows中使用unicode API

2005-08-27(3.2.5)

  1. 修复了一个影响DELETE和UPDATE语句的错误,该错误更改了40960多行。
  2. 更改makefile,使其不再需要GNUmake扩展
  3. 修复配置脚本上的--enable-threadsafe选项
  4. 修复了当IN运算符的左侧为常数且右侧为SELECT语句时发生的代码生成器错误
  5. 现在,除了正常的回滚日志之外,PRAGMA sync = off语句还将禁用主日志文件的同步

2005-08-24(3.2.4)

  1. 修复了先前版本中引入的错误,该错误在为复杂的WHERE子句生成代码时可能导致段错误。
  2. 允许浮点文字以小数点开头或结尾。

2005-08-21(3.2.3)

  1. 增加了对CAST运算符的支持
  2. Tcl接口允许将BLOB值传输到用户定义的函数
  3. 在Tcl界面中添加了“交易”方法
  4. 允许列的DEFAULT值调用具有常量操作数的函数
  5. 添加了ANALYZE命令,用于收集索引统计信息并在优化器中选择索引时使用这些统计信息
  6. 删除WHERE子句中的术语数限制(以前为100)
  7. 现在,IN运算符的右侧可以是表达式列表,而不仅仅是常数列表
  8. 重做优化器,以便能够更好地利用索引
  9. 连接中表的顺序会自动调整,以更好地利用索引
  10. 现在,即使左侧不是索引的最左项,IN运算符也可以作为优化的候选。多个IN运算符可以与同一索引一起使用。
  11. 使用BETWEEN和OR的WHERE子句表达式现在是优化的候选对象
  12. 添加了“ case_sensitive_like”编译指示和SQLITE_CASE_SENSITIVE_LIKE编译时选项,以将其默认值设置为“ on”。
  13. 启用case_sensitive_like编译指示时,也可以使用索引来帮助GLOB表达式和LIKE表达式
  14. 添加了对重音引号的支持,以实现与MySQL的兼容性
  15. 改善测试范围
  16. 数十个小错误修复

2005-06-12(3.2.2)

  1. 添加了sqlite3_db_handle()API
  2. 添加了sqlite3_get_autocommit()API
  3. 在解析器中添加了REGEXP运算符。在标准版本中没有备份该运算符的函数,但用户可以使用sqlite3_create_function()添加自己的运算符
  4. 速度提高,磁带库占用空间减少。
  5. 修复64位体系结构上的字节对齐问题。
  6. 许多许多小错误修复和文档更新。

2005-03-29(3.2.1)

  1. 修复新的ADD COLUMN注释中的内存分配错误。
  2. 文档更新

2005-03-21(3.2.0)

  1. 添加了对ALTER TABLE ADD COLUMN的支持。
  2. 在ISO-8601日期/时间字符串中增加了对“ T”分隔符的支持。
  3. 改进了对Cygwin的支持。
  4. 大量错误修复和文档更新。

2005-03-17(3.1.6)

  1. 修复了在将记录插入约125列的表中时可能导致数据库损坏的错误。
  2. sqlite3_step()现在更有可能调用忙处理程序,而不太可能返回SQLITE_BUSY。
  3. 修复了malloc()失败后曾经发生的内存泄漏。

2005-03-11(3.1.5)

  1. Mac OS X上用于控制与磁盘同步的ioctl是F_FULLFSYNC,而不是F_FULLSYNC。先前的版本有错误。

2005-03-11(3.1.4)

  1. 修复了由于违反约束而导致CREATE UNIQUE INDEX失败时,可能导致数据库损坏的autovacuum中的错误。仅当打开版本3.1中引入的新的自动真空功能时,才会出现此问题。
  2. 如果将同步编译指示设置为“ full”以外的其他功能,则禁用F_FULLSYNC ioctl(当前仅在Mac OS X上受支持)。
  3. 向将来的3.2版数据库文件格式添加其他向前兼容性。
  4. 修复以下形式的WHERE子句中的错误(rowid <'2')
  5. 添加了新的SQLITE_OMIT _...编译时选项
  6. 更新手册页
  7. 从外壳中删除对strcasecmp()的使用
  8. Windows DLL导出符号Tclsqlite_Init和Sqlite_Init

2005-02-19(3.1.3)

  1. 修复了从其中删除了包含AUTOINCREMENT的表的数据库上VACUUM的问题。
  2. 向将来的版本3.2数据库文件格式添加前向兼容性。
  3. 文档更新

2005-02-15(3.1.2)

  1. 修复了以下错误:如果同一数据库有两个打开的连接,而一个连接进行了VACUUM,而第二个连接对数据库做了一些更改,则该错误可能导致数据库损坏。
  2. 允许 ”?” LIMIT子句中的参数。
  3. 修复VACUUM,使其与AUTOINCREMENT一起使用。
  4. 修复AUTOVACUUM中的竞争状况,该竞争状况可能导致数据库损坏
  5. 在sqlite3.h包含文件中添加一个数字版本号。
  6. 其他小错误修复和性能增强。

2005-02-15(2.8.16)

  1. 修复了以下错误:如果同一数据库有两个打开的连接,而一个连接进行了VACUUM,而第二个连接对数据库做了一些更改,则该错误可能导致数据库损坏。
  2. 正确处理CREATE INDEX语句中带引号的名称。
  3. 修复了sqlite.h和sqlite3.h之间的命名冲突。
  4. 复制表达式时避免过多的堆使用。
  5. 其他小错误修复。

2005-02-01(3.1.1 BETA)

  1. 在TCL接口中自动缓存准备好的语句
  2. ATTACH和DETACH以及其他一些操作会使现有的准备好的语句到期。
  3. 修复了许多小错误

2005-01-21(3.1.0 ALPHA)

  1. 增加了自动真空支持
  2. 添加了CURRENT_TIME,CURRENT_DATE和CURRENT_TIMESTAMP
  3. 添加了对EXISTS子句的支持。
  4. 添加了对相关子查询的支持。
  5. 在LIKE运算符上添加了ESCAPE子句。
  6. 支持ALTER TABLE ... RENAME TABLE ...
  7. INTEGER PRIMARY KEY支持AUTOINCREMENT关键字
  8. 许多SQLITE_OMIT_宏插入可在编译时省略功能并减少库占用空间。
  9. REINDEX命令已添加。
  10. 如果引擎可以从索引中获取所需的所有信息,则它不再查询主表。
  11. 修复了许多令人讨厌的错误。

2004-10-12(3.0.8)

  1. 添加对DEFERRED,IMMEDIATE和EXCLUSIVE事务的支持。
  2. 当已经有一个或多个预编译的SQL语句时,允许创建新的用户定义函数。
  3. 修复MinGW / MSYS的可移植性问题。
  4. 修复了64位Sparc计算机上的字节对齐问题。
  5. 修复外壳程序的“ .import”命令,以使其忽略行尾的\ r字符。
  6. 外壳程序中的“ csv”模式选项将字符串放在双引号中。
  7. 修复文档中的错别字。
  8. 将代码中的数组常量转换为类型为“ const”。
  9. 许多代码优化,特别是旨在使代码占用空间更小的优化。

2004-09-18(3.0.7)

  1. BTree模块使用malloc()分配较大的缓冲区,而不是使用堆栈外的缓冲区,以便在堆栈空间有限的计算机上更好地发挥作用。
  2. 修复了命名冲突,以便可以在同一ANSI-C源文件中链接和一起使用2.8版和3.0版。
  3. 新介面:sqlite3_bind_parameter_index()
  4. 添加对形式为“?nnn”的通配符的支持
  5. 修复在64位系统上发现的问题。
  6. 从3.0版源树中删除了encode.c文件(包含未使用的例程)。
  7. sqlite3_trace()回调发生在每个语句执行之前,而不是在编译语句时。
  8. Makefile更新和其他错误修复。

2004-09-02(3.0.6 beta)

  1. 更好地检测和处理损坏的数据库文件。
  2. 如果由于锁定而无法提交更改,则sqlite3_step()接口返回SQLITE_BUSY
  3. 将LIKE和GLOB的实现组合到单个模式匹配子例程中。
  4. 其他代码大小优化和错误修复

2004-08-29(3.0.5 Beta)

  1. 支持“:AAA”样式绑定参数名称。
  2. 添加了新的sqlite3_bind_parameter_name()接口。
  3. 支持TCL绑定中的SQL语句中嵌入的TCL变量名。
  4. TCL绑定无需传输到字符串就可以传输数据。
  5. 直到需要时才创建TEMP表的数据库。
  6. 添加使用“ sqlite_temp_directory”全局变量指定备用临时文件目录的功能。
  7. 当存在对RESERVED锁的争用时,编译时选项(SQLITE_BUSY_RESERVED_LOCK)导致繁忙处理程序被调用。
  8. 各种错误修复和优化

2004-08-09(3.0.4 Beta)

  1. CREATE TABLE和DROP TABLE现在可以作为准备好的语句正常工作。
  2. 修复了VACUUM和UNIQUE索引中的错误。
  3. 将“ .import”命令添加到命令行外壳。
  4. 修复了当挂起查询阻止删除表中的行的尝试时可能导致索引损坏的错误。
  5. 库大小优化。
  6. 其他小错误修复。

2004-07-22(2.8.15)

  1. 这仅是维护版本。修复了各种小错误,并增加了一些可移植性增强功能。

2004-07-22(3.0.3 Beta)

  1. SQLite 3.0的第二个beta版本。
  2. 添加对“ PRAGMA page_size”的支持以调整数据库的页面大小。
  3. 各种错误修复和文档更新。

2004-06-30(3.0.2 beta)

  1. SQLite 3.0的第一个beta版本。

2004-06-22(3.0.1 Alpha)

  1. *** Alpha版本-仅供研究和测试使用***
  2. 许多错误修复。

2004-06-18(3.0.0 alpha)

  1. *** Alpha版本-仅供研究和测试使用***
  2. 支持国际化,包括UTF-8,UTF-16和用户定义的整理序列。
  3. 新文件格式通常可使用小25%至35%。
  4. 改进的并发性。
  5. ATTACHed数据库的原子提交。
  6. 从API中删除残骸。
  7. BLOB支持。
  8. 64位Rowid。
  9. 更多信息

2004-06-09(2.8.14)

  1. 修复min()和max()优化器,以便在FROM子句包含子查询时可以使用。
  2. 忽略“。”末尾的多余空格。Shell中的命令。
  3. 将sqlite_encode_binary()和sqlite_decode_binary()与该库捆绑在一起。
  4. TEMP_STORE和DEFAULT_TEMP_STORE编译指示现在可以使用。
  5. 代码更改后可以使用OpenWatcom进行干净地编译。
  6. 使用IN运算符中的INSTEAD OF触发器和NULL修复VDBE堆栈溢出问题。
  7. 添加全局变量sqlite_temp_directory,如果已设置,则定义存储临时文件的目录。
  8. sqlite_interrupt()与VACUUM配合良好。
  9. 其他小错误修复。

2004-03-08(2.8.13)

  1. 重构部分代码,以减少代码占用量。现在,代码也更快了。
  2. sqlite_exec()现在实现为sqlite_compile()和sqlite_step()的包装。
  3. 内置的min()和max()函数现在支持NUMERIC和TEXT数据类型之间的区别。以前,min()和max()始终假定其参数为NUMERIC类型。
  4. 内置日期/时间函数的新HH:MM:SS修饰符。
  5. 添加了实验性sqlite_last_statement_changes()API。修复了last_insert_rowid()函数,使其可以与触发器一起正常工作。
  6. 为数据库加密API添加函数原型。
  7. 修复几个令人讨厌的错误。

2004-02-08(2.8.12)

  1. 修复了在COMMIT中间发生电源故障或外部程序停止时可能损坏回滚日志的错误。损坏的日志回滚时可能导致数据库损坏。
  2. 减小大小并提高各种模块(尤其是虚拟机)的速度。
  3. 允许将“ <expr> IN <表>”用作“ <expr> IN(SELECT * FROM <表>”)的简写。
  4. 对sqlite_mprintf()例程的优化。
  5. 确保MIN()和MAX()优化在子查询中起作用。

2004-01-14(2.8.11)

  1. 修复了IN运算符如何处理子查询中的NULL的错误。该错误是先前版本引入的。

2004-01-14(2.8.10)

  1. 修复了由于关闭POSIX文件时所有POSIX咨询锁都会被​​清除而导致的Unix上潜在的数据库损坏问题。锁定未完成时,它的工作将禁运所有close()调用。
  2. 在COUNT(*)的一些特殊情况下的性能增强。
  3. 如果malloc()失败,请确保内存中后端响应正确。
  4. 允许从用户定义的SQL函数中调用sqlite_exec()。
  5. Improved accuracy of floating-point conversions using "long double".
  6. Bug fixes in the experimental date/time functions.

2004-01-06 (2.8.9)

  1. Fix a 32-bit integer overflow problem that could result in corrupt indices in a database if large negative numbers (less than -2147483648) were inserted into an indexed numeric column.
  2. Fix a locking problem on multi-threaded Linux implementations.
  3. Always use "." instead of "," as the decimal point even if the locale requests ",".
  4. Added UTC to localtime conversions to the experimental date/time functions.
  5. Bug fixes to date/time functions.

2003-12-18 (2.8.8)

  1. Fix a critical bug introduced into 2.8.0 which could cause database corruption.
  2. Fix a problem with 3-way joins that do not use indices
  3. The VACUUM command now works with the non-callback API
  4. 对“ PRAGMA integrity_check”命令的改进

2003-12-04(2.8.7)

  1. 添加了实验性的sqlite_bind()和sqlite_reset()API。
  2. 如果数据库名称为空字符串,请在临时文件中打开一个新数据库,该文件在关闭数据库后会自动删除。
  3. Lemon生成的解析器中的性能增强
  4. 实验日期/时间功能已修改。
  5. 禁止在永久表上使用临时索引。
  6. 文档更新和拼写错误修复
  7. 添加了实验性sqlite_progress_handler()回调API
  8. 删除了对Oracle8外连接语法的支持。
  9. 允许GLOB和LIKE运算符用作功能。
  10. 其他次要文档和Makefile更改以及错误修复。

2003-08-22(2.8.6)

  1. 将CVS存储库移至www.sqlite.org
  2. 更新NULL处理文档。
  3. 实验日期/时间功能已添加。
  4. 错误修复:正确评估视图的视图而无段错误。
  5. 漏洞修复:如果删除了与表同名的触发器,可以防止数据库损坏。
  6. 错误修复:设置EMPTY_RESULT_CALLBACKS编译指示后,允许在空数据库上进行VACUUM(无段错误)。
  7. 错误修复:如果整数值不适合32位int,则将其存储在double中。
  8. 错误修复:写入数据库文件之前,请确保日志文件目录条目已提交到磁盘。

2003-07-22(2.8.5)

  1. 使LIMIT对复合SELECT语句起作用。
  2. LIMIT 0现在不显示任何行。使用LIMIT -1查看所有行。
  3. 正确处理INTEGER PRIMARY KEY和浮点数之间的比较。
  4. 修复新的ATTACH和DETACH命令中的几个重要错误。
  5. 更新了NULL处理文档
  6. 在sqlite_compile()和sqlite_step()中允许使用NULL参数。
  7. 修复了许多小错误

2003-06-29(2.8.4)

  1. 增强了“ PRAGMA integrity_check”命令以验证索引。
  2. 为新的ATTACH和DETACH命令添加了授权挂钩。
  3. 许多文档更新
  4. 修复了许多小错误

2003-06-04(2.8.3)

  1. 修复了如果对包含INTEGER PRIMARY KEY和一个或多个索引的表进行INSERT OR REPLACE或UPDATE或REPLACE的操作,将损坏表的索引的问题。
  2. 修复了Windows锁定代码中的一个错误,以便在Win95和WinNT系统同时访问时,锁定可以正常工作。
  3. 添加INSERT和UPDATE语句引用“ rowid”(或“ _rowid_”或“ oid”)列的功能。
  4. 其他重要的错误修复

2003-05-17(2.8.2)

  1. 修复了以下问题:如果从具有TEMP索引的主数据库中删除表,则该文件将损坏数据库文件。

2003-05-17(2.8.1)

  1. 重新激活了VACUUM命令,该命令回收了数据库文件中未使用的磁盘空间。
  2. 添加了ATTACH和DETACH命令,以允许同时与多个数据库文件进行交互。
  3. 添加了对TEMP触发器和索引的支持。
  4. 添加了对内存数据库的支持。
  5. 删除了实验性的sqlite_open_aux_file()。它的功能包含在新的ATTACH命令中。
  6. 更改了ON CONFLICT子句的优先顺序,以使BEGIN语句上的ON CONFLICT子句的优先级高于约束上的ON CONFLICT子句的优先级。
  7. 许多很多错误修复和兼容性增强。

2003-02-16(2.8.0)

  1. 修改了日志文件格式,以使其更能抵抗操作系统崩溃或电源故障后可能发生的损坏。
  2. 添加了一个新的C / C ++ API,该API不使用回调来返回数据。

2003-01-25(2.7.6)

  1. 性能改进。该库现在快得多了。
  2. 添加了sqlite_set_authorizer() API。尚未编写正式文档-有关如何使用此功能的说明,请参见源代码注释。
  3. 修复了GLOB运算符中的一个错误,该错误使它无法使用大写字母。
  4. 各种小错误修复。

2002-12-28(2.7.5)

  1. 修复pager.c中未初始化的变量,该变量可能(大约40亿分之一)导致数据库损坏。

2002-12-17(2.7.4)

  1. 数据库文件现在可以增长到2 ^ 41字节。旧限制为2 ^ 31个字节。
  2. 如果这样做满足ORDER BY ... DESC子句,则优化器现在将反向扫描表。
  3. 即使将相对路径传递到sqlite_open(),现在也可以记住数据库文件的完整路径名。这使库在chdir()之后可以继续正确运行。
  4. VDBE中的速度改进。
  5. 许多小错误修复。

2002-10-31(2.7.3)

  1. 各种编译器兼容性修补程序。
  2. 修复“ expr IN()”运算符中的错误。
  3. 接受括号中的列名。
  4. 修复了VDBE中的字符串内存管理问题
  5. 修复“ table_info”编译指示中的错误
  6. 在Windows DLL中导出sqlite_function_type()API函数
  7. 修复Windows下的锁定行为
  8. 修复LEFT OUTER JOIN中的错误

2002-09-25(2.7.2)

  1. 防止在大型交易中日记文件溢出。
  2. 修复了sqlite_open()失败时发生的内存泄漏。
  3. 遵守SELECT的ORDER BY和LIMIT子句,即使结果集用于INSERT。
  4. 不要在用于保存TEMP表的文件上放置写锁。
  5. 添加了有关SELECT DISTINCT以及SQLite如何处理NULL的文档。
  6. 修复了一个sqlite_exec()调用执行成千上万条SQL语句时导致性能下降的问题。

2002-08-31(2.7.1)

  1. 修复了版本2.7.0中引入的ORDER BY逻辑中的错误
  2. 现在,分词器可以接受C样式的注释。
  3. 当源是SELECT语句时,INSERT的运行速度会更快一些。

2002-08-25(2.7.0)

  1. 排序时区分数字值和文本值。文本值根据memcmp()排序。数值按数字顺序排序。
  2. 通过模拟Win95 / 98 / ME中缺少的读取器/写入器锁,在Windows下允许多个同时读取器。
  3. 如果另一个事务已经处于活动状态,则尝试启动事务时现在返回错误。

2002-08-13(2.6.3)

  1. 增加了读取小端数据库和大端数据库的功能。因此,可以在Linux或Windows下读写在SunOS或Mac OS X下创建的数据库,反之亦然。
  2. 转换为新网站:http://www.sqlite.org/
  3. 允许事务跨Linux线程
  4. 在针对GROUP BY查询的ORDER BY子句处理中的错误修复

2002-07-31(2.6.2)

  1. COPY命令读取的文本文件现在可以具有LF,CRLF或CR的行终止符。
  2. 如果在数据库初始化期间遇到SQLITE_BUSY,则会正确处理。
  3. 修复TEMP表上的UPDATE触发器。
  4. 文档更新。

2002-07-19(2.6.1)

  1. 在库中包括一个静态字符串,该字符串响应RCS“ ident”命令,并包含库的版本号。
  2. 修复了在打开“ count_changes”编译指示的情况下删除表的所有行时发生的断言失败的情况。
  3. 在自动2.5.6到2.6.0数据库格式升级过程中出现问题时,可以更好地报告错误。

2002-07-18(2.6.0)

  1. 更改索引格式,以纠正源于版本2.1.0的设计缺陷。 ***这是不兼容的文件格式更改*** 当库的版本2.6.0或更高版本尝试打开由版本2.5.6或更早版本创建的数据库文件时,它将自动且不可逆地转换文件格式。 在使用库的版本2.6.0打开旧数据库文件之前,请对其进行备份。

2002-07-07(2.5.6)

  1. 解决回滚的更多问题。增强测试套件以广泛地执行回滚逻辑,以防止将来出现任何问题。

2002-07-06(2.5.5)

  1. 修复了在回滚过程中可能导致数据库损坏的错误。此错误是由检入的自由列表优化在版本2.4.0中引入的[410]。
  2. 修复了VIEW的汇总函数中的错误。
  3. 其他较小的更改和增强。

2002-07-01(2.5.4)

  1. 再次使“ AS”关键字为可选。
  2. 现在,列的数据类型出现在回调的第4个参数中。
  3. 添加了sqlite_open_aux_file() API,尽管该API大部分仍未记录和未经测试。
  4. 添加了其他测试用例,并修复了这些测试用例发现的一些错误。

2002-06-25(2.5.3)

  1. 错误修复:2.4.0版中引入了优化(签入[410]),因此可能导致数据库损坏。现在应该解决此问题。不建议使用2.4.0到2.5.2版本。

2002-06-25(2.5.2)

  1. 添加了新的SQLITE_TEMP_MASTER表,该表以与SQLITE_MASTER对永久表相同的方式记录临时表的模式。
  2. 为UNION ALL添加了优化
  3. 修复了LEFT OUTER JOIN处理中的错误
  4. LIMIT子句现在适用于子选择
  5. ORDER BY适用于子选择
  6. 有一个新的TypeOf()函数用于确定表达式是数字还是文本。
  7. 现在,自动增量可用于SELECT中的INSERT。

2002-06-19(2.5.1)

  1. 查询优化器现在尝试使用索引来实现ORDER BY子句。如果没有合适的索引,仍将使用排序。

2002-06-17(2.5.0)

  1. 添加了对行触发器的支持。
  2. 添加了与SQL-92兼容的NULL处理。
  3. 添加对完整SQL-92连接语法和LEFT OUTER JOIN的支持。
  4. 用双引号引起来的字符串被解释为列名,而不是文本文字。
  5. 解析(但不实现)外键。
  6. 解析器,寻呼机和WHERE子句代码生成器中的性能改进。
  7. 使LIMIT子句对子查询起作用。(不过,ORDER BY仍然无效。)
  8. 在sqlite _ * _ printf()中添加了“%Q”扩展。
  9. 错误修复程序不胜枚举(请参阅更改日志)。

2002-05-10(2.4.12)

  1. 添加了逻辑,以检测何时不按顺序调用库API例程。

2002-05-08(2.4.11)

  1. 错误修复:对于某些(相当复杂的)VIEW,未正确生成结果集中的列名。在某些情况下,这可能会导致段错误。

2002-05-03(2.4.10)

  1. 错误修复:将复合SELECT用作子查询时,生成正确的列标题。
  2. Added the sqlite_encode_binary() and sqlite_decode_binary() functions to the source tree. But they are not yet linked into the library.
  3. Documentation updates.
  4. Export the sqlite_changes() function from Windows DLLs.
  5. Bug fix: Do not attempt the subquery flattening optimization on queries that lack a FROM clause. To do so causes a segfault.

2002-04-22 (2.4.9)

  1. Fix a bug that was causing the precompiled binary of SQLITE.EXE to report "out of memory" under Windows 98.

2002-04-20 (2.4.8)

  1. Make sure VIEWs are created after their corresponding TABLEs in the output of the .dump command in the shell.
  2. Speed improvements: Do not do synchronous updates on TEMP tables.
  3. Many improvements and enhancements to the shell.
  4. Make the GLOB and LIKE operators functions that can be overridden by a programmer. This allows, for example, the LIKE operator to be changed to be case sensitive.

2002-04-12 (2.4.7)

  1. Add the ability to put TABLE.* in the column list of a SELECT statement.
  2. Permit SELECT statements without a FROM clause.
  3. Added the last_insert_rowid() SQL function.
  4. Do not count rows where the IGNORE conflict resolution occurs in the row count.
  5. Make sure functions expressions in the VALUES clause of an INSERT are correct.
  6. Added the sqlite_changes() API function to return the number of row that changed in the most recent operation.

2002-04-02 (2.4.6)

  1. Bug fix: Correctly handle terms in the WHERE clause of a join that do not contain a comparison operator.

2002-04-02 (2.4.5)

  1. Bug fix: Correctly handle functions that appear in the WHERE clause of a join.
  2. When the PRAGMA vdbe_trace=ON is set, correctly print the P3 operand value when it is a pointer to a structure rather than a pointer to a string.
  3. When inserting an explicit NULL into an INTEGER PRIMARY KEY, convert the NULL value into a unique key automatically.

2002-03-30 (2.4.4)

  1. Allow "VIEW" to be a column name
  2. Added support for CASE expressions (patch from Dan Kennedy)
  3. Added RPMS to the delivery (patches from Doug Henry)
  4. Fix typos in the documentation
  5. Cut over configuration management to a new CVS repository with its own CVSTrac bug tracking system.

2002-03-23 (2.4.3)

  1. Fix a bug in SELECT that occurs when a compound SELECT is used as a subquery in the FROM of a SELECT.
  2. The sqlite_get_table() function now returns an error if you give it two or more SELECTs that return different numbers of columns.

2002-03-20 (2.4.2)

  1. Bug fix: Fix an assertion failure that occurred when ROWID was a column in a SELECT statement on a view.
  2. Bug fix: Fix an uninitialized variable in the VDBE that would could an assert failure.
  3. Make the os.h header file more robust in detecting when the compile is for Windows and when it is for Unix.

2002-03-13 (2.4.1)

  1. Using an unnamed subquery in a FROM clause would cause a segfault.
  2. The parser now insists on seeing a semicolon or the end of input before executing a statement. This avoids an accidental disaster if the WHERE keyword is misspelled in an UPDATE or DELETE statement.

2002-03-11 (2.4.0)

  1. Change the name of the sanity_check PRAGMA to integrity_check and make it available in all compiles.
  2. SELECT min() or max() of an indexed column with no WHERE or GROUP BY clause is handled as a special case which avoids a complete table scan.
  3. Automatically generated ROWIDs are now sequential.
  4. Do not allow dot-commands of the command-line shell to occur in the middle of a real SQL command.
  5. Modifications to the Lemon parser generator so that the parser tables are 4 times smaller.
  6. Added support for user-defined functions implemented in C.
  7. Added support for new functions: coalesce(), lower(), upper(), and random()
  8. Added support for VIEWs.
  9. Added the subquery flattening optimizer.
  10. Modified the B-Tree and Pager modules so that disk pages that do not contain real data (free pages) are not journaled and are not written from memory back to the disk when they change. This does not impact database integrity, since the pages contain no real data, but it does make large INSERT operations about 2.5 times faster and large DELETEs about 5 times faster.
  11. Made the CACHE_SIZE pragma persistent
  12. Added the SYNCHRONOUS pragma
  13. Fixed a bug that was causing updates to fail inside of transactions when the database contained a temporary table.

2002-02-19 (2.3.3)

  1. Allow identifiers to be quoted in square brackets, for compatibility with MS-Access.
  2. Added support for sub-queries in the FROM clause of a SELECT.
  3. More efficient implementation of sqliteFileExists() under Windows. (by Joel Luscy)
  4. The VALUES clause of an INSERT can now contain expressions, including scalar SELECT clauses.
  5. Added support for CREATE TABLE AS SELECT
  6. Bug fix: Creating and dropping a table all within a single transaction was not working.

2002-02-14 (2.3.2)

  1. Bug fix: There was an incorrect assert() in pager.c. The real code was all correct (as far as is known) so everything should work OK if you compile with -DNDEBUG=1. When asserts are not disabled, there could be a fault.

2002-02-13 (2.3.1)

  1. Bug fix: An assertion was failing if "PRAGMA full_column_names=ON;" was set and you did a query that used a rowid, like this: "SELECT rowid, * FROM ...".

2002-02-03 (2.3.0)

  1. Fix a serious bug in the INSERT command which was causing data to go into the wrong columns if the data source was a SELECT and the INSERT clauses specified its columns in some order other than the default.
  2. Added the ability to resolve constraint conflicts is ways other than an abort and rollback. See the documentation on the "ON CONFLICT" clause for details.
  3. Temporary files are now automatically deleted by the operating system when closed. There are no more dangling temporary files on a program crash. (If the OS crashes, fsck will delete the file after reboot under Unix. I do not know what happens under Windows.)
  4. NOT NULL constraints are honored.
  5. The COPY command puts NULLs in columns whose data is '\N'.
  6. In the COPY command, backslash can now be used to escape a newline.
  7. Added the SANITY_CHECK pragma.

2002-01-28 (2.2.5)

  1. Important bug fix: the IN operator was not working if either the left-hand or right-hand side was derived from an INTEGER PRIMARY KEY.
  2. Do not escape the backslash '\' character in the output of the sqlite command-line access program.

2002-01-22 (2.2.4)

  1. The label to the right of an AS in the column list of a SELECT can now be used as part of an expression in the WHERE, ORDER BY, GROUP BY, and/or HAVING clauses.
  2. Fix a bug in the -separator command-line option to the sqlite command.
  3. Fix a problem with the sort order when comparing upper-case strings against characters greater than 'Z' but less than 'a'.
  4. Report an error if an ORDER BY or GROUP BY expression is constant.

2002-01-16 (2.2.3)

  1. 修复VC ++ 7.0中的警告消息。(来自nicolas352001的补丁)
  2. 使库成为线程安全的。(该代码已经存在并且似乎可以正常工作,但是并没有受到压力。)
  3. 添加了新的sqlite_last_insert_rowid() API函数。

2002-01-14(2.2.2)

  1. 错误修复:带有索引的临时表与单独进程创建的永久表同名时,断言失败。
  2. 错误修复:更新包含INTEGER PRIMARY KEY和索引的表可能会失败。

2002-01-09(2.2.1)

  1. 错误修复:不存在这样的rowid时,尝试删除WHERE子句为“ ROWID = x”的表的单行会导致错误。
  2. 错误修复:将NULL作为第三个参数传递给sqlite_open() 有时会导致核心转储。
  3. 错误修复:在单个事务中,DROP TABLE后跟一个具有相同名称的CREATE TABLE会导致核心转储。
  4. A. Rottmann的Makefile更新

2001-12-22(2.2.0)

  1. 实际上,类型INTEGER PRIMARY KEY的列在表的基础B树表示中用作主键。
  2. 在实施前一个项目符号的整数主键更改时,发现并修复了一些晦涩,无关的错误。
  3. 在SELECT语句的结果部分中添加了将“ *”指定为较大列列表的一部分的功能。例如: SELECT rowid,* FROM table1;
  4. 更新注释和文档。

2001-12-15(2.1.7)

  1. 修复了CREATE TEMPORARY TABLE中的一个错误,该错误导致该表最初分配在主数据库文件中,而不是在单独的临时文件中。此错误可能导致库遭受断言失败,并且可能导致主数据库文件中的“页面泄漏”。
  2. 修复了b树子系统中的错误,该错误有时可能导致在数据库扫描期间重复表的第一行。

2001-12-14(2.1.6)

  1. 再次修复锁定机制,以防止 sqlite_exec()不必要地返回SQLITE_PROTOCOL。这次,该错误是锁定代码中的竞争条件。此更改会影响POSIX和Windows用户。

2001-12-06(2.1.5)

  1. 解决了另一个问题(与2.1.4中解决的问题无关),该问题有时会导致sqlite_exec()不必要地返回SQLITE_PROTOCOL。这次,该错误位于POSIX锁定代码中,不会影响Windows用户。

2001-12-05(2.1.4)

  1. 有时sqlite_exec()在应返回SQLITE_BUSY时会返回SQLITE_PROTOCOL。
  2. 对先前错误的修复发现了一个死锁,该死锁也已得到修复。
  3. 添加将单个.command放入sqlite shell的第二个参数的功能
  4. FAQ更新

2001-11-24(2.1.3)

  1. 修复比较运算符的行为(例如:“ < ”,“ == ”等),以使其与索引中条目的顺序一致。
  2. 正确处理SQL表达式中大于机器整数可以表示的整数的整数。

2001-11-23(2.1.2)

  1. 更改以支持64位体系结构。
  2. 修复锁定协议中的错误。
  3. 修复了一个错误,该错误可能(很少)导致由于损坏SQLITE_MASTER表而导致在DROP TABLE之后数据库变得不可读。
  4. 更改代码,以便即使该SQLITE_MASTER表(略有)损坏,该版本的库也可以读取由于上述错误而变得不可读的2.1.1版数据库。

2001-11-13(2.1.1)

  1. 错误修复:当列的实际值为NULL时,有时会将任意字符串传递给回调函数。

2001-11-12(2.1.0)

  1. 更改数据记录的格式,以便可以存储最大16MB的记录。
  2. 更改索引格式,以实现更好的查询优化。
  3. 在SELECT语句上实现“ LIMIT ... OFFSET ...”子句。

2001-11-03(2.0.8)

  1. 在API函数const中选择参数。这应该是完全向后兼容的。
  2. 文档更新
  3. 通过将分类器和列表的数量限制为1,简化了VDBE的设计。实际上,无论如何,最多只能使用一个分类器和一个列表。

2001-10-22(2.0.7)

  1. 任何UTF-8字符或ISO8859字符都可以用作标识符的一部分。
  2. Christian Werner的修补程序,以改善ODBC兼容性并修复round()函数中的错误。
  3. 插入一些在malloc()失败时曾经发生的内存泄漏。只要malloc()有效,我们一直在并且将继续保持无内存泄漏。
  4. 更改了一些测试脚本,以便它们可以在Windows和Unix上运行。

2001-10-19(2.0.6)

  1. 添加了EMPTY_RESULT_CALLBACKS编译指示
  2. 支持列名和表名中的UTF-8和ISO8859字符。
  3. 错误修复:使用FULL_COLUMN_NAMES编译指示计算正确的表名。

2001-10-15(2.0.5)

  1. 添加了COUNT_CHANGES个编译指示。
  2. 更改为FULL_COLUMN_NAMES编译指示以帮助ODBC驱动程序。
  3. 错误修复:“ SELECT count(*)”为空表返回NULL。现在它返回0。

2001-10-13(2.0.4)

  1. 错误修复:打开gcc优化后,一个晦涩且相对无害的错误导致其中一项测试失败。此版本解决了该问题。

2001-10-13(2.0.3)

  1. 错误修复:sqlite_busy_timeout()函数在失败之前延迟了1000次。
  2. 错误修复:如果保存数据库文件的磁盘已满或由于其他原因停止接受写入,则断言失败。添加了新测试以检测将来的类似问题。
  3. 添加了新的运算符:(按位与) | (按位或),(单数补码), <<(向左移动),>>(向右移动)。
  4. 添加了新功能:round()abs()

2001-10-09(2.0.2)

  1. 修复锁定协议中的两个错误。(一个正在掩盖另一个。)
  2. 删除了一些未使用的“ #include ”,这会导致VC ++出现问题。
  3. 修复了sqlite.h,以便可以在C ++中使用
  4. 添加了FULL_COLUMN_NAMES编译指示。设置为“ ON”时,列的名称将以TABLE.COLUMN的形式报告,而不仅仅是COLUMN。
  5. 添加了TABLE_INFO()和INDEX_INFO()编译指示以帮助支持ODBC接口。
  6. 添加了对TEMPORARY表和索引的支持。

2001-10-02(2.0.1)

  1. 从btree.c中删除一些C ++样式注释,以便它将使用gcc以外的编译器进行编译。
  2. 如果数据中的任何位置都有嵌入的换行符,则外壳程序的“ .dump”输出将不起作用。这是一个较早的错误,是从1.0版继承下来的。要修复此问题,“。dump”输出不再使用COPY命令。而是生成INSERT语句。
  3. 除了“ expr NOTNULL”(无空格)外,扩展表达式语法以支持“ expr NOT NULL”(在“ NOT”和“ NULL”之间有一个空格)。

2001-09-28(2.0.0)

  1. 自动为Linux和Windows构建二进制文件并将其放在网站上。

2001-09-28(2.0-alpha-4)

  1. 结合A. Rottmann的makefile补丁以使用LIBTOOL

2001-09-27(2.0-alpha-3)

  1. SQLite现在在CREATE UNIQUE INDEX中使用UNIQUE关键字。主键必须唯一。
  2. 文件格式变回原来的alpha-1
  3. 修复了回滚和锁定行为

2001-09-20(2.0-alpha-2)

  1. 2.0版的初始发行版。将库重命名为“ SQLus”的想法被放弃了,而是保留了“ SQLite”名称并增加了主要版本号。
  2. The pager and btree subsystems added back. They are now the only available backend.
  3. The Dbbe abstraction and the GDBM and memory drivers were removed.
  4. Copyright on all code was disclaimed. The library is now in the public domain.

2001-07-23 (1.0.32)

  1. Pager and btree subsystems removed. These will be used in a follow-on SQL server library named "SQLus".
  2. Add the ability to use quoted strings as table and column names in expressions.

2001-04-15 (1.0.31)

  1. Pager subsystem added but not yet used.
  2. More robust handling of out-of-memory errors.
  3. New tests added to the test suite.

2001-04-06 (1.0.30)

  1. Remove the sqlite_encoding TCL variable that was introduced in the previous version.
  2. Add options -encoding and -tcl-uses-utf to the sqlite TCL command.
  3. Add tests to make sure that tclsqlite was compiled using Tcl header files and libraries that match.

2001-04-05 (1.0.29)

  1. The library now assumes data is stored as UTF-8 if the --enable-utf8 option is given to configure. The default behavior is to assume iso8859-x, as it has always done. This only makes a difference for LIKE and GLOB operators and the LENGTH and SUBSTR functions.
  2. If the library is not configured for UTF-8 and the Tcl library is one of the newer ones that uses UTF-8 internally, then a conversion from UTF-8 to iso8859 and back again is done inside the TCL interface.

2001-04-04 (1.0.28)

  1. Added limited support for transactions. At this point, transactions will do table locking on the GDBM backend. There is no support (yet) for rollback or atomic commit.
  2. Added special column names ROWID, OID, and _ROWID_ that refer to the unique random integer key associated with every row of every table.
  3. Additional tests added to the regression suite to cover the new ROWID feature and the TCL interface bugs mentioned below.
  4. Changes to the Lemon parser generator to help it work better when compiled using MSVC.
  5. Bug fixes in the TCL interface identified by Oleg Oleinick.

2001-03-20 (1.0.27)

  1. When doing DELETE and UPDATE, the library used to write the record numbers of records to be deleted or updated into a temporary file. This is changed so that the record numbers are held in memory.
  2. The DELETE command without a WHILE clause just removes the database files from the disk, rather than going through and deleting record by record.

2001-03-20 (1.0.26)

  1. A serious bug fixed on Windows. Windows users should upgrade. No impact to Unix.

2001-03-15 (1.0.25)

  1. Modify the test scripts to identify tests that depend on system load and processor speed and to warn the user that a failure of one of those (rare) tests does not necessarily mean the library is malfunctioning. No changes to code.

2001-03-14 (1.0.24)

  1. Fix a bug which was causing the UPDATE command to fail on systems where "malloc(0)" returns NULL. The problem does not appear on Windows, Linux, or HPUX but does cause the library to fail on QNX.

2001-02-20 (1.0.23)

  1. An unrelated (and minor) bug from Mark Muranwski fixed. The algorithm for figuring out where to put temporary files for a "memory:" database was not working quite right.

2001-02-19 (1.0.22)

  1. The previous fix was not quite right. This one seems to work better.

2001-02-19 (1.0.21)

  1. The UPDATE statement was not working when the WHERE clause contained some terms that could be satisfied using indices and other terms that could not. Fixed.

2001-02-11 (1.0.20)

  1. Merge development changes into the main trunk. Future work toward using a BTree file structure will use a separate CVS source tree. This CVS tree will continue to support the GDBM version of SQLite only.

2001-02-06 (1.0.19)

  1. Fix a strange (but valid) C declaration that was causing problems for QNX. No logical changes.

2001-01-04 (1.0.18)

  1. Print the offending SQL statement when an error occurs.
  2. Do not require commas between constraints in CREATE TABLE statements.
  3. Added the "-echo" option to the shell.
  4. Changes to comments.

2000-12-10 (1.0.17)

  1. Rewrote sqlite_complete() to make it faster.
  2. Minor tweaks to other code to make it run a little faster.
  3. Added new tests for sqlite_complete() and for memory leaks.

2000-11-28 (1.0.16)

  1. Documentation updates. Mostly fixing of typos and spelling errors.

2000-10-23 (1.0.15)

  1. Documentation updates
  2. Some sanity checking code was removed from the inner loop of vdbe.c to help the library to run a little faster. The code is only removed if you compile with -DNDEBUG.

2000-10-19 (1.0.14)

  1. Added a "memory:" backend driver that stores its database in an in-memory hash table.

2000-10-19 (1.0.13)

  1. Break out the GDBM driver into a separate file in anticipation to added new drivers.
  2. Allow the name of a database to be prefixed by the driver type. For now, the only driver type is "gdbm:".

2000-10-17 (1.0.12)

  1. Fixed an off-by-one error that was causing a coredump in the '%q' format directive of the new sqlite_..._printf() routines.
  2. Added the sqlite_interrupt() interface.
  3. In the shell, sqlite_interrupt() is invoked when the user presses Control-C
  4. Fixed some instances where sqlite_exec() was returning the wrong error code.

2000-10-11 (1.0.10)

  1. Added notes on how to compile for Windows95/98.
  2. Removed a few variables that were not being used. Etc.

2000-10-09 (1.0.9)

  1. Added the sqlite_..._printf() interface routines.
  2. Modified the sqlite shell program to use the new interface routines.
  3. Modified the sqlite shell program to print the schema for the built-in SQLITE_MASTER table, if explicitly requested.

2000-09-30 (1.0.8)

  1. Begin writing documentation on the TCL interface.

2000-09-29 (Not Released)

  1. Added the sqlite_get_table() API
  2. Updated the documentation for due to the above change.
  3. Modified the sqlite shell to make use of the new sqlite_get_table() API in order to print a list of tables in multiple columns, similar to the way "ls" prints filenames.
  4. 修改了sqlite shell,以在“ .schema”命令的输出中的每个CREATE语句的末尾打印分号。

2000-09-21(未发布)

  1. 如果未指定回调脚本,则更改tclsqlite的“ eval”方法以返回结果列表。
  2. 更改tclsqlite.c以使用Tcl_Obj接口
  3. 将tclsqlite.c添加到libsqlite.a库中

2000-09-14(1.0.5)

  1. 将浮点值的打印格式从“%g”更改为“%.15g”。
  2. 更改了比较功能,以使指数符号中的数字(例如:1.234e + 05)按数字顺序排序。

2000-08-28(1.0.4)

  1. 添加了函数length()substr()
  2. 修复了sqlite shell程序中的一个错误,该错误在输出模式为“ column”且数据的第一行包含NULL时导致了核心转储。

2000-08-22(1.0.3)

  1. 在sqlite shell中,将“ Database open READ ONLY”消息打印到stderr而不是stdout。
  2. 在sqlite shell中,现在在初次启动时打印版本号。
  3. sqlite_version []字符串常量添加到库中
  4. Makefile更新
  5. 错误修复:在以下情况下生成了不正确的VDBE代码:对包含WHERE子句的索引表进行的查询,带有IN运算符的查询在其右侧具有子查询。

2000-08-18(1.0.1)

  1. 修复配置脚本中的错误。
  2. 网站的较小修订。

2000-08-17(1.0)

  1. 更改sqlite程序,以便它可以读取缺少写许可权的数据库。(它曾经拒绝所有无法写入的访问。)

2000-08-09

  1. 将回车符视为空白。

2000-08-08

  1. 向“ sqlite”命令外壳中的“ .table”命令添加了模式匹配。

2000-08-04

  1. 文档更新
  2. 在Tcl界面中添加了“忙”和“超时”方法

2000-08-03

  1. 文件格式版本号已多次存储在sqlite_master.tcl中。这是无害的,但没有必要。现在已修复。

2000-08-02

  1. 索引的文件格式略有更改,以解决效率低下的问题,当大型索引包含许多具有相同键的条目时,GDBM有时会导致效率低下。 **不相容的变更**

2000-08-01

  1. 解析器的堆栈在很长的UPDATE语句上溢出。现在,此问题已解决。

2000-07-31

  1. 完成VDBE教程
  2. 添加了有关编译到WinNT的文档。
  3. 修复WinNT的配置程序。
  4. 修复了HPUX的配置问题。

2000-07-29

  1. 在结果的列名上使用更好的标签。

2000-07-28

  1. 添加了sqlite_busy_handler()sqlite_busy_timeout()接口。

2000-06-23

  1. 开始编写VDBE教程

2000-06-21

  1. 清理注释和变量名。对文档的更改。代码没有功能更改。

2000-06-19

  1. UPDATE语句中的列名区分大小写。现在,此错误已得到解决。

2000-06-18

  1. 添加了串联字符串运算符(||)

2000-06-12

  1. Added the fcnt() function to the SQL interpreter. The fcnt() function returns the number of database "Fetch" operations that have occurred. This function is designed for use in test scripts to verify that queries are efficient and appropriately optimized. Fcnt() has no other useful purpose, as far as I know.
  2. Added a bunch more tests that take advantage of the new fcnt() function. The new tests did not uncover any new problems.

2000-06-08

  1. Added lots of new test cases
  2. Fix a few bugs discovered while adding test cases
  3. Begin adding lots of new documentation

2000-06-06

  1. Added compound select operators: UNION, UNION ALL, INTERSECT, and EXCEPT
  2. Added support for using (SELECT ...) within expressions
  3. Added support for IN and BETWEEN operators
  4. Added support for GROUP BY and HAVING
  5. NULL values are now reported to the callback as a NULL pointer rather than an empty string.

2000-06-03

  1. Added support for default values on columns of a table.
  2. Improved test coverage. Fixed a few obscure bugs found by the improved tests.

2000-06-02

  1. All database files to be modified by an UPDATE, INSERT or DELETE are now locked before any changes are made to any files. This makes it safe (I think) to access the same database simultaneously from multiple processes.
  2. The code appears stable so we are now calling it "beta".

2000-06-01

  1. Better support for file locking so that two or more processes (or threads) can access the same database simultaneously. More work needed in this area, though.

2000-05-31

  1. Added support for aggregate functions (Ex: COUNT(*), MIN(...)) to the SELECT statement.
  2. Added support for SELECT DISTINCT ...

2000-05-30

  1. Added the LIKE operator.
  2. Added a GLOB operator: similar to LIKE but it uses Unix shell globbing wildcards instead of the '%' and '_' wildcards of SQL.
  3. Added the COPY command patterned after PostgreSQL so that SQLite can now read the output of the pg_dump database dump utility of PostgreSQL.
  4. Added a VACUUM command that calls the gdbm_reorganize() function on the underlying database files.
  5. And many, many bug fixes...

2000-05-29

  1. Initial Public Release of Alpha code