SQLite 3.35 发布

SQLite 3.35 版本已经发布,这是一个设计为插件库的轻量级 DBMS。 SQLite 代码分布在公共领域,即可以不受限制地免费用于任何目的。 SQLite 开发人员的财务支持由专门创建的联盟提供,该联盟包括 Adob​​e、Oracle、Mozilla、Bentley 和 Bloomberg 等公司。

主要变化:

  • 添加了可在 SQL 中使用的内置数学函数(log2()、cos()、tg()、exp()、ln()、pow() 等)。 启用内置函数需要使用“-DSQLITE_ENABLE_MATH_FUNCTIONS”选项进行构建。
  • 实现了对“ALTER TABLE DROP COLUMN”表达式的支持,以从表中删除列并清除先前存储在给定列中的数据。
  • UPSERT(添加或修改)操作的实现已得到扩展,允许通过诸如“INSERT ... ON CONFLICT DO NOTHING/UPDATE”之类的表达式来忽略错误或在无法添加时执行更新而不是插入通过“INSERT”获取数据(例如,如果一条记录已经存在,则可以执行 UPDATE 而不是 INSERT)。 新版本允许您指定多个 ON CONFLICT 块,这些块将按顺序处理。 最后一个“ON CONFLICT”块允许省略冲突定义参数,以便使用“DO UPDATE”。
  • DELETE、INSERT 和 UPDATE 操作支持 RETURNING 表达式,可用于显示已删除、插入或修改的记录的内容。 例如,表达式“insert into...returning id”将返回添加行的标识符,“update...setprice=price*1.10returningprice”将返回更改后的价格值。
  • 对于允许使用通过WITH 语句指定的临时命名结果集的公共表表达式(CTE),允许选择“MATERIALIZED”和“NOT MATERIALIZED”模式。 “MATERIALIZED”意味着将视图中指定的查询缓存在单独的物理表中,然后从该表中获取数据,而“NOT MATERIALIZED”则每次访问视图时都会执行重复查询。 SQLite 最初默认为“NOT MATERIALIZED”,但现在对于多次使用的 CTE 已更改为“MATERIALIZED”。
  • 在包含非常大的 TEXT 或 BLOB 值的数据库上执行 VACUUM 操作时减少了内存消耗。
  • 已经完成了提高优化器和查询规划器性能的工作:
    • 添加了将 min 和 max 函数与“IN”表达式结合使用时的优化。
    • EXISTS 语句的执行速度已加快。
    • 实现了作为 JOIN 一部分的 UNION ALL 表达式的子查询扩展。
    • 该索引用于 IS NOT NULL 表达式。
    • 确保对于具有“NOT NULL”属性的列,“x IS NULL”和“x IS NOT NULL”转换为 FALSE 或 TRUE。
    • 如果操作未更改与外键关联的列,则跳过在 UPDATE 中检查外键。
    • 允许将 WHERE 块的部分移动到包含窗口函数的子查询中,只要这些部分仅限于使用窗口函数中使用的 PARTITION BY 块中的常量和表达式副本。
  • 命令行界面的变化:
    • 添加了“.filectrl data_version”命令。
    • “.once”和“.output”命令现在支持将输出传递到使用未命名管道(“|”)调用的处理程序。
    • “stmt”和“vmstep”参数已添加到“.stats”命令中,以显示表达式和虚拟机计数器的统计信息。

来源: opennet.ru

添加评论