从 SQLite 3.5.9 迁移到 3.6.0(二十一)

news2024/11/27 10:29:33

 返回:SQLite—系列文章目录   

上一篇:从 SQLite 3.4.2 迁移到 3.5.0(二十)

下一篇:SQLite—系列文章目录   

SQLite 版本 3.6.0 (2008-07-16) 包含许多更改。按照惯例 SQLite项目,大多数更改都是完全向后兼容的。 但是,版本 3.6.0 中的一些更改不兼容,并且 可能需要修改应用程序代码和/或生成文件。 本文档简要介绍了 SQLite 3.6.0 中的变化 特别注意不兼容的更改。

要点:
  • 数据库文件格式保持不变。
  • 所有不兼容都位于晦涩难懂的接口上,因此应该 对大多数应用程序的影响为零。

1.0 不兼容的更改

首先涵盖不兼容的更改,因为它们是最 对维护者和程序员很重要。

1.1 不兼容更改概述

  1. 对 sqlite3_vfs 对象的更改

    1. xAccess 方法的签名已修改为 返回错误代码并将其输出存储到指向的整数中 到,而不是直接返回输出。 此更改允许 xAccess() 方法报告失败。 与此签名更改相关联,新的 添加了扩展错误代码SQLITE_IOERR_ACCESS。

    2. xGetTempname 方法已从sqlite3_vfs中删除。 取而代之的是,xOpen 方法得到了增强,可以打开临时文件 当 filename 参数为 NULL 时,它自己发明的。

    3. 添加了 xGetLastError() 方法到sqlite3_vfs以返回 特定于文件系统的错误消息和错误代码返回 SQLite的。

  2. 修改了 sqlite3_io_methods 上 xCheckReservedLock 方法的签名,以便它返回错误代码并存储其 布尔结果转换为参数指向的整数。在 与此更改关联,添加了新的扩展错误代码SQLITE_IOERR_CHECKRESERVEDLOCK。

  3. 当SQLite被移植到新的操作系统(操作系统 Unix、Windows 和 OS/2 除外,这些端口一起提供 与核心) 两个新函数 sqlite3_os_init() 和 sqlite3_os_end() 必须 作为端口的一部分提供。

  4. IN 和 NOT IN 运算符处理 NULL 值的方式 在他们的右手表达中已经符合 SQL 标准和其他 SQL 数据库引擎。

  5. SELECT 语句的结果集的列名具有 在某些情况下进行了调整,使其更像其他 SQL 数据库一样工作 发动机。

  6. 对编译时选项的更改:

    1. SQLITE_MUTEX_APPDEF compile-time 参数不再是 认可。作为替代,可以创建替代互斥锁实现 在运行时将 sqlite3_config() 与 SQLITE_CONFIG_MUTEX 运算符和 sqlite3_mutex_methods 对象一起使用。

    2. 编译时选项 OS_UNIX、OS_WIN、OS_OS2、OS_OTHER和 TEMP_STORE已重命名,以按顺序包含“SQLITE_”前缀 以帮助避免与应用程序软件的命名空间冲突。这 这些选项的新名称分别是: SQLITE_OS_UNIX、SQLITE_OS_WIN、SQLITE_OS_OS2、SQLITE_OS_OTHER、 和SQLITE_TEMP_STORE。

1.2 对 VFS 层的更改

SQLite 版本 3.5.0 引入了一个新的操作系统接口层, 提供了底层操作系统的抽象。 这是一项重要的创新,并已被证明是有帮助的 在移植和维护 SQLite 中。 但是,开发人员发现了一些小缺陷 3.5.0 版中引入的原始“虚拟文件系统”设计 因此,SQLite 3.6.0包含一些不兼容的小更改 来解决这些缺陷。

眼:不相容的 版本 3.6.0 的 SQLite 操作系统界面中的更改 仅影响使用 虚拟文件系统接口的罕见应用程序或 提供应用程序定义的 互斥锁实现或使用其他晦涩难懂的编译时选项。这 SQLite 3.6.0 版引入的更改对 绝大多数使用内置接口的 SQLite 应用程序 到 Unix、Windows 和 OS/2,并使用标准构建配置。

1.3 IN 运算符处理 NULL 的方式的变化

SQLite的所有版本(包括3.5.9版本)都处理不当 IN 和 NOT IN 运算符右侧的 NULL 值。 具体来说,SQLite以前忽略了右侧的NULL 的 IN 和 NOT IN。

假设我们有一个表 X1,定义如下:

  CREATE TABLE x1(x INTEGER);
  INSERT INTO x1 VALUES(1);
  INSERT INTO x1 VALUES(2);
  INSERT INTO x1 VALUES(NULL);

鉴于上面 X1 的定义,以下表达式具有 在SQLite中历来评估为FALSE,尽管是正确的 答案实际上是 NULL:

  3 IN (1,2,NULL)
  3 IN (SELECT * FROM x1)

同样,以下表达式历来计算为 TRUE,实际上 NULL 也是这里的正确答案:

  3 NOT IN (1,2,NULL)
  3 NOT IN (SELECT * FROM x1)

根据 SQL:1999,SQLite 的历史行为不正确 标准,它与 MySQL 和 PostgreSQL。版本 3.6.0 更改了 IN 和 NOT IN运算符符合标准并给出相同的标准 结果与其他 SQL 数据库引擎一样。

眼:对 NULL 值处理方式的更改 从技术上讲,IN 和 NOT IN 运算符是错误修复,而不是设计 改变。但是,维护人员应检查以确保应用程序 在升级到 版本 3.6.0。

1.4 列命名规则的更改

联接子查询报告的列名略有修改 为了更像其他数据库引擎一样工作。请考虑以下几点 查询:

  CREATE TABLE t1(a);
  CREATE TABLE t2(x);
  SELECT * FROM (SELECT t1.a FROM t1 JOIN t2 ORDER BY t2.x LIMIT 1) ORDER BY 1;

在版本 3.5.9 中,上面的查询将返回一个名为“t1.a”的列。 在版本 3.6.0 中,列名称仅为“a”。

SQLite 从未对 SELECT 语句的结果集,除非该列包含 AS 子句。 因此,从技术上讲,对列名的更改并不是不兼容的。 SQLite只是从一个未定义的行为更改为另一个未定义的行为。 然而,许多应用程序依赖于未指定的列命名 SQLite 的行为,因此此更改将在 不兼容的更改副标题。

1.5 编译时选项的更改

SQLite 的编译时选项由 C 预处理器控制 宏。SQLite 版本 3.6.0 更改了其中一些的名称 宏,以便所有特定于 SQLite以“SQLITE_”前缀开头。这样做是为了减少 与其他软件模块发生名称冲突的风险。

眼:对编译时选项的更改具有 可能会影响执行自定义构建的项目中的生成文件 SQLite的。这些更改对应用程序代码的影响应为零,并且 大多数使用标准、默认构建的 SQLite 的项目。

2.0 完全向后兼容的增强功能

除了上面列出的不兼容的更改外,SQLite 版本 3.6.0 添加了以下向后兼容的更改和 增强:

  1. 新的 sqlite3_config() 接口允许应用程序 自定义 SQLite 在运行时的行为。可定制 使用 sqlite3_config() 包括以下内容:

    1. 使用带有 sqlite3_mutex_methods 对象的 SQLITE_CONFIG_MUTEX 谓词指定备用互斥锁实现。

    2. 使用带有 sqlite3_mem_methods 对象的 SQLITE_CONFIG_MALLOC 谓词指定替代 malloc 实现。

    3. 部分或完全禁用使用 SQLITE_CONFIG_SINGLETHREAD、SQLITE_CONFIG_MULTITHREAD 和 SQLITE_CONFIG_SERIALIZED 的互斥锁。

  2. 一个新的标志SQLITE_OPEN_NOMUTEX可用于 sqlite3_open_v2() 接口。

  3. 新的 sqlite3_status() 接口允许应用程序查询 SQLite在运行时的性能状态。

  4. sqlite3_memory_used() 和 sqlite3_memory_highwater() 接口已弃用。等效功能现已推出 通过 sqlite3_status()。

  5. 可以显式调用 sqlite3_initialize() 接口 初始化 SQLite 子系统。sqlite3_initialize() 接口是 调用某些接口时自动调用,因此不需要使用 sqlite3_initialize(),但建议使用。

  6. sqlite3_shutdown() 接口导致 SQLite 释放任何 系统资源(内存分配、互斥锁、打开文件句柄) 这可能是由 sqlite3_initialize() 分配的。

  7. sqlite3_next_stmt() 接口允许应用程序发现 与数据库连接关联的所有预准备语句。

  8. 添加了page_count PRAGMA,用于返回基础的大小 数据库文件(以页面为单位)。

  9. 添加了新的 R*Tree 索引扩展。

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

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

相关文章

FPGA在医疗的应用,以4K医疗内窥镜为例

前言 随着技术的发展,医学影像作为科学技术的主要成就之一,在无创诊断和治疗领域已经有了多种应用。其中一个应用是内窥镜,在20世纪90年代,当利用电荷耦合装置将图像传输到显示器上成为可能时,内窥镜变得更加广泛。为…

自动化测试框架 Selenium(3)

目录 1.前言 2.等待方式 2.1死等 2.2智能等待 3.游览器操作 3.1游览器最大化 3.2设置游览器的宽 高 3.3 游览器的前进和后退 3.4游览器滚动条 1.前言 本篇博客,我们将继续Selenium自动化测试的学习.在前面的章节中,俺介绍了Selenium是怎么回事,和键盘鼠标操作.还有url和…

数据应用OneID:ID-Mapping Spark GraphX实现

前言 说明 以用户实体为例,ID 类型包含 user_id 和 device_id。当然还有其他类型id。不同id可以获取到的阶段、生命周期均不相同。 device_id 生命周期通常指的是一个设备从首次被识别到不再活跃的整个时间段。 user_id是用户登录之后系统分配的唯一标识&#xff…

(2022级)成都工业学院数据库原理及应用实验三:数据定义语言DDL

唉,用爱发电连赞都没几个,博主感觉没有动力了 想要完整版的sql文件的同学们,点赞评论截图,发送到2923612607qq,com,我就会把sql文件以及如何导入sql文件到navicat的使用教程发给你的 基本上是无脑教程了,…

Vue ElementUI el-input-number 改变控制按钮 icon 箭头为三角形

el-input-number 属性 controls-position 值为 right 时&#xff1b; <el-input-number v-model"num" controls-position"right" :min"1" :max"10"></el-input-number>原生效果 修改后效果 CSS 修改 .el-input-number…

医院订餐平台:为患者提供贴心服务的创新解决方案

在现代医疗服务中&#xff0c;患者的就餐问题一直是一个备受关注的议题。传统的医院饮食服务往往面临着餐品单一、服务不及时等问题&#xff0c;无法满足患者的个性化需求。为了提高患者的就餐体验&#xff0c;医院订餐平台应运而生&#xff0c;通过数字化、个性化的服务&#…

Mac M2安装 Windows

由于需要在 Windows 上使用一些软件&#xff0c;今天在 Mac M2 上安装了 Windows 11。以前在 X86 Mac 上安装很容易&#xff0c;都是 X86 架构随便找个镜像安装上就可以用了。到了 M1/M2 Arm 架构就会麻烦一些&#xff0c;先在网上找到 Windows 10 Arm 架构的安装镜像&#xff…

LVGL9.1移植STM32F103C8T6花屏问题解决

这一次的话算是花了一下午差不多解决了一个问题&#xff0c;具体我是用 stm32f103c8t6(20k RAM, 128k Flash) 移植的LVGL库(屏幕是240x240的st7789, 因为RAM的buf不太够所以缩小了显示面积) 直接切入主题: 如果出现花屏问题&#xff0c; 这个问题出在你自定义编写的lv_set_flu…

搜维尔科技:【煤矿安全仿真】煤矿事故预防处置VR系统,矿山顶板灾害,冲击地压灾害等预防演练!

产品概述 煤矿事故预防处置VR系统 系统内容&#xff1a; 事故预防处置VR系统的内容包括&#xff1a;火灾的预防措施、火灾预兆、防灭火系统、火灾案例重现、顶板事故预兆、顶板事故原因、顶板事故案例重现、瓦斯概念及性质、瓦斯的涌出形式、瓦斯预兆、瓦斯爆炸条件及预防措…

文献速递:深度学习肝脏肿瘤诊断---动态对比增强 MRI 上的自动肝脏肿瘤分割使用 4D 信息:基于 3D 卷积和卷积 LSTM 的深度学习模型

Title 题目 Automatic Liver Tumor Segmentation on Dynamic Contrast Enhanced MRI Using 4D Information: Deep Learning Model Based on 3D Convolution and Convolutional LSTM 动态对比增强 MRI 上的自动肝脏肿瘤分割使用 4D 信息&#xff1a;基于 3D 卷积和卷积 LSTM …

nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)

一、安装nvm 1. 下载nvm 点击 网盘下载 进行下载 2、双击下载好的 nvm-1.1.12-setup.zip 文件 3.双击 nvm-setup.exe 开始安装 4. 选择我接受&#xff0c;然后点击next 5.选择nvm安装路径&#xff0c;路径名称不要有空格&#xff0c;然后点击next 6.node.js安装路径&#…

案例三 BeautifulSoup之链家二手房

本案例用到列表&#xff0c;函数&#xff0c;字符串等知识点&#xff0c;知识点参考链接如下&#xff1a; python基础知识&#xff08;一&#xff09;&输入输出函数 python基础知识&#xff08;二&#xff09;&基本命令 python基础知识&#xff08;三&#xff09;&…

.[[backup@waifu.club]].svh勒索病毒数据怎么处理|数据解密恢复

尊敬的读者&#xff1a; 近年来&#xff0c;随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显&#xff0c;其中勒索病毒成为了一大威胁。.[[backupwaifu.club]].svh、.[[MyFilewaifu.club]].svh勒索病毒就是其中之一&#xff0c;它以其独特的传播方式和恶劣的加密手段…

嵌入式驱动学习第七周——pinctrl子系统

前言 pinctrl子系统用来控制每个端口的复用功能和电气属性&#xff0c;这篇博客来介绍一下pinctrl子系统。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨…

java数据结构与算法刷题-----LeetCode461. 汉明距离

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 异或统计1的个数2. 位移操作处理3. Brian Kernighan算法 位运…

构建强大的物联网平台系统架构:关键步骤与最佳实践

随着物联网&#xff08;IoT&#xff09;技术的快速发展和广泛应用&#xff0c;越来越多的企业开始意识到搭建一个强大而可靠的物联网平台系统架构的重要性。一个完善的物联网平台可以帮助企业高效地管理和监控各种连接设备&#xff0c;并实现数据的收集、处理和分析。在本文中&…

个人劳保用品穿戴检测系统 安全帽、工服、面罩、防护手套、防护鞋、安全背带穿戴检测等

背景 在工业生产、医疗护理、消防救援等高风险领域&#xff0c;正确穿戴个人防护装备或劳保用品&#xff08;PPE&#xff1a;Personal Protective Equipment&#xff09;是保障人员安全的重要措施&#xff0c;如安全帽、反光衣、安全背带等。然而&#xff0c;现实中往往会出现…

数据结构之排序了如指掌(一)

目录 题外话 正题 排序概念 稳定性 直接插入排序 直接插入排序代码详解 直接插入排序复杂度分析 希尔排序(缩小增量排序) 希尔排序代码详解 小结 题外话 昨晚肚子疼没睡好,今天博客写的确实有点晚(找个借口),我一定会坚持,不辜负热爱我的家人们!! 正题 排序概念 一串…

去掉el-date-picker弹窗默认回显当前月份的方法

打开日期弹窗&#xff0c;默认会显示当前月份&#xff0c;如图 会发现加了穿透&#xff1a;&#xff1a;v-deep 样式也不生效 .el-month-table .today .cell {color: pink&#xff1b;font-weight: 400;}要让 popper-class“xclass” :append-to-body“false” 这俩配合着使用…

[Kubernetes[K8S]集群:Slaver从节点初始化和Join]:添加到主节点集群内

文章目录 操作流程&#xff1a;上篇主节初始化地址&#xff1a;前置&#xff1a;Docker和K8S安装版本匹配查看0.1&#xff1a;安装指定docker版本 **[1 — 8] ** [ 这些步骤主从节点前置操作一样的 ]一&#xff1a;主节点操作 查看主机域名->编辑域名->域名配置二&#x…