SQLite 3.47.0 发布,大量新功能来袭

news2024/11/29 10:44:32

SQLite 开发团队于 2024 年 10 月 21 日发布了 SQLite 3.47.0 版本,我们来了解一下新版本的改进功能。

触发器增强

SQLite 3.47.0 版本开始,触发器函数 RAISE() 的 error-message 参数可以支持任意 SQL 表达式。在此之前,该参数只能是字符串常量。

在这里插入图片描述

新版本的函数可以输出更加灵活有用的错误信息。

JSON 运算符

新版本的 JSON 运算符 ->> 支持从数组右侧开始计算元素下标,例如:

sqlite> select '[1,2,3,4]' ->> 1;
2
sqlite> select '[1,2,3,4]' ->> -1;
4

当表达式右侧参数为负数时,表示从右侧开始开始计算元素位置。

SQL 函数

新版本改进了聚合函数 group_concat(),当输入参数只有一行空字符串时返回空字符串而不是 NULL。

sqlite> CREATE TABLE t(cid int, val varchar(10));
sqlite>
sqlite> INSERT INTO t values(1, 'S'),(1, 'Q'),(1, 'L');
sqlite> INSERT INTO t values(2, '');
sqlite> INSERT INTO t values(3, null);
sqlite>
sqlite> .nullvalue 'None'
sqlite> SELECT group_concat(val)
   ...> FROM t
   ...> GROUP BY cid;
S,Q,L

None

新版本增强了表值函数 generate_series(),可以识别并且使用基于返回结果值的约束。

性能优化

SQLite 3.47.0 性能优化包括:

  • 优化了 IN 运算符中的子查询重用,尤其是存在谓词下推导致的 IN 运算符重用。
  • 针对 IN 运算符中的子查询,在可能带来优化性能的场景时使用布隆过滤器。
  • 对于类似“SELECT func(a) FROM tab GROUP BY 1”的查询,确保每行数据只调用一次 func() 函数。
  • 如果已知某个字段的选择性很低(通过分析该字段参与的其他索引获得),基于该字段的查询不会尝试创建自动索引(查询时索引)。
  • 针对涉及大量维度表的星型查询优化了查询计划。
  • 增加了排序子查询(order-by-subquery)优化功能,当查询最终的排序结果和子查询中的 ORDER BY 结果一致时,可以避免最终的排序操作。
  • 针对表达式索引,如果查询计划器可以确认不会使用表达式的子类型,indexed-subtype-expr 优化就会尽量使用作为索引一部分的表达式的数值,而不会基于表中的数据重新计算表达式。
  • 其他优化运行速度的代码调整。

命令行工具

SQLite 3.47.0 增加了一个试验性质的命令行工具 sqlite3_rsync,它可以用于实现 SQLite 主从复制。显然这是一个非常重要的功能,可以完成 SQLite 原生一致性复制,期待正式版本。

命令行工具默认增加了扩展聚合/窗口函数 median()、percentile()、percentile_cont() 以及 percentile_disc()。

命令行工具增加了一个元命令 .www,它等价于“.once -w”,可以将查询结果以 HTML 表格形式在浏览器中显示。

sqlite3_analyzer 工具可以获取 WITHOUT ROWID 数据表的详细统计信息。

当数据库比较工具 sqldiff 第二个参数指定的数据库不存在时,不再创建一个空白数据库。

其他改进

修复了非主流 unix-dotfile VFS 回滚热日志文件时存在的一个问题。

即使使用了没有注册的非标准分词器,也可以删除 FTS5 数据表。

通过 ALTER TABLE ADD COLUMN 语句新增非空且存在默认值的字段时,可以识别更新前的钩子程序。

增强了 sqlite_dbpage 虚拟表,INSERT 语句可以用于增加或者减少数据库文件大小。

SQLite 不在使用 long double 数据类型,因为支持该类型的硬件越来越少,而且一些编译工具链无法支持。

新版本支持的 TCL 接口升级为 TCL 9。虽然 TCL 8.5 以及更高版本可能正常工作,但是不能保证,建议升级到 TCL9。

新版本还修复了 JavaScript/WASM 相关的一些问题。同时还改进了 FTS5 相关功能。

完整的发行说明可以参考官方文档:

https://www.sqlite.org/releaselog/3_47_0.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go 语言 Gin Web 框架的实现原理探究

Gin 是一个用 Go (Golang) 编写的 Web 框架,性能极优,具有快速、支持中间件、crash处理、json验证、路由组、错误管理、内存渲染、可扩展性等特点。 官网地址:https://gin-gonic.com/ 源码地址:https://github.com/gin-gonic/gi…

CMOS 图像传感器:像素寻址与信号处理

CMOS image sensor : pixel addressing and signal processing CMOS image sensor 对于寻址和信号处理有三种架构 pixel serial readout and processingcolumn parallel readout and processingpixel parallel readout and processing 其中,图 (b) column paralle…

从 Web2 到 Web3:区块链技术的演进与未来趋势

在互联网的发展历程中,我们正经历着从 Web2 向 Web3 的重大转变。这个转变的核心驱动力之一,便是区块链技术的不断演进。 Web2 时代,互联网上的社交媒体、在线购物、视频分享等平台蓬勃发展。用户可以便捷地获取信息、与他人交流互动&#x…

css模糊遮罩效果

原图&#xff1a; 模糊后的图片&#xff1a; html: <div class"bj"><div class"mengban"></div> </div> css: .bj {width: 750rpx;height: 643rpx;background-image:url(https://onlinekc.a.hlidc.cn/uploads/20241023/9e552fc…

如何快速解决游戏提示系统中的emp.dll缺失问题

emp.dll是一个动态链接库&#xff08;Dynamic Link Library, DLL&#xff09;文件&#xff0c;这类文件在Windows操作系统中扮演着至关重要的角色。它们包含了可由多个程序同时使用的代码和数据&#xff0c;其主要目的是实现模块化&#xff0c;以便于程序的更新和动态链接。emp…

ECharts饼图-饼图34,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个饼图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供详…

【毕业设计】基于SpringBoot的网上商城系统

前言 &#x1f525;本系统可以选作为毕业设计&#xff0c;运用了现在主流的SSM框架&#xff0c;采用Maven来帮助我们管理依赖&#xff0c;所选结构非常合适大学生所学的技术&#xff0c;非常合适作为大学的毕业设计&#xff0c;难以适中。 &#x1f525;采用技术&#xff1a;Sp…

Java项目-基于springboot框架的疫苗接种管理系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

huggingface的数据集下载(linux下clone)

1. 安装lfs sudo apt-get install git-lfs 或者 apt-get install git-lfs 2. git lfs install git lfs install 3. git clone dataset包 第2&#xff0c;3步骤的截图如下&#xff1a;

CentOS7 上安装GitLab的经历

一、安装必要的基础环境 1.安装依赖包 [rootgitlab-server ~]#yum install curl policycoreutils openssh-server openssh-clients postfix wget git patch -y [rootgitlab-server ~]# systemctl start postfix 2.配置yum源(由于网络问题&#xff0c;国内用户请使用清华大学…

架构设计笔记-21-案例分析

1.遗留系统策略 / 数据迁移 / REST和RPC风格 2.分布式系统 / 分布式对象调用 3.开放式架构 / GOA 4.ESB 5.FMEA故障分析 6. 加密 / 公钥体系机制 / 加解密API和透明加密 7.嵌入式系统故障 / 故障滤波算法 / 容错算法 8.开源框架struts / spring / Hibenate 9.企业应用集成 10.T…

Python 应用可观测重磅上线:解决 LLM 应用落地的“最后一公里”问题

作者&#xff1a;彦鸿 背景 随着 LLM&#xff08;大语言模型&#xff09;技术的不断成熟和应用场景的不断拓展&#xff0c;越来越多的企业开始将 LLM 技术纳入自己的产品和服务中。LLM 在自然语言处理方面表现出令人印象深刻的能力。然而&#xff0c;其内部机制仍然不明确&am…

2023 WMCTF pwn【blindless jit】

文章目录 blindlessIDA结构体命名逆向漏洞方法1方法2 exp jitstrtol(v9, &endptr, 16)__errno_location和__throw_out_of_range详细解释&#xff1a; __errno_location相关具体操作详细分析为什么要执行上述代码&#xff1f;示例代码段的解释 _acrt_iob_funcSetProcessMiti…

Vue.js 学习总结(9)—— Vue 3 组件封装技巧

1、需求说明 需求背景&#xff1a;日常开发中&#xff0c;我们经常会使用一些UI组件库诸如and design vue、element plus等辅助开发&#xff0c;提升效率。有时我们需要进行个性化封装&#xff0c;以满足在项目中大量使用的需求。错误示范&#xff1a;基于a-modal封装一个自定…

MinIO安装教程

MinIO简介 Minio是一个开源的、云原生的分布式对象存储系统&#xff0c;是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据。 它一大特点就是轻量&#xff0c;虽然轻量&#xff0c;却拥有着不…

适合忙碌职场人的进度计划工具

明确的进度计划是一种约束机制&#xff0c;职场人往往面临多项任务&#xff0c;通过进度计划管理&#xff0c;可以将工作按照优先级和时间要求进行分解&#xff0c;而进度计划管理可以很好地帮助职场人发现时间浪费的环节。此外&#xff0c;对于忙碌的职场人来说&#xff0c;不…

基于K8S的StatefulSet部署mysql主从

StatefulSet特性 StatefulSet的网络状态 拓扑状态&#xff1a;应用的多个实例必须按照某种顺序启动&#xff0c;并且必须成组存在&#xff0c;例如一个应用中必须存在一个A Pod和两个B Pod&#xff0c;且A Pod必须先于B Pod启动的场景 存储状态&#xff1a;应用存在多个实例&…

《使用Gin框架构建分布式应用》阅读笔记:p88-p100

《用Gin框架构建分布式应用》学习第6天&#xff0c;p88-p100总结&#xff0c;总计13页。 一、技术总结 1.MongoDB CRUD操作 (1)InsertOne(), InsertMany() (2)Find() (3)UpdateOne, UpdateMany() (4)DeleteOne(), DeleteMany() 2.MongoDB primitive p96&#xff0c;rec…

Docker 基础入门

Docker 基础入门 前言 在云计算和微服务架构日益盛行的今天&#xff0c;软件开发与部署的效率和灵活性成为了企业竞争力的关键因素之一。Docker&#xff0c;作为一种开源的容器化平台&#xff0c;凭借其轻量级、可移植性和易于管理的特性&#xff0c;迅速成为现代软件开发和运…

pdf编辑软件有哪些?方便好用的pdf编辑软件分享

PDF文件因其跨平台、格式固定的特性&#xff0c;成为了工作、学习和生活中不可或缺的一部分。然而&#xff0c;随着需求的不断增加&#xff0c;仅仅阅读PDF文件已难以满足我们的需求&#xff0c;编辑、转换PDF文件成为了新的焦点&#xff0c;下面给大家分享几款方便好用的PDF编…