1.0执行摘要SQLite4是一个紧凑的、自包含的、零维护的库中的ACID数据库引擎,与SQLite3类似,但具有改进的接口和文件格式。运行时的环境被封装成一个对象。使用一个非常好的键值对存储引擎:一个单独的大键空间——而不是像SQLite3中那样每个表都有一个单独的键空间和索引。按字典顺序进行键排序。多个存储引擎,可以在运行时互换。默认情况下,磁盘上的存储使用日志结构的合并数据库。表的PRIMARYKEY实际上是作为存储引擎的key使用的。可以使用小数点运算。默认情况下启用外键约束和递归触发器。覆盖指数可以显示报表。2.0概述SQLite4是SQLite3的一个选项,而不是替代品。SQLite3并没有过时。SQLite3和QLite4将被并行支持。SQLite3LegacySQLite3的好处不会被放弃。SQLite3将继续得到维护和改进。但如果有必要,新系统的设计者现在可以选择SQLite4而不是SQLite3。SQLite4努力保持SQLite3的最佳特性,同时解决SQLite3中无法在不破坏兼容性的情况下修复的问题。SQLite3和SQLite4中将继续保持相同的特性是:专有、ACID、SQL数据库引擎。没有服务器,I/O直接到磁盘。任何人都可以出于任何目的使用SQLite4源代码。没有版权、分发或开源代码或编译的二进制文件。无需担心烦人的许可证。使用动态类型代替大多数其他SQL数据库引擎使用的严格静态类型。(默认)磁盘映像是使用公认且稳定的文件格式的单个磁盘文件,使SQLite4库适合用作应用程序的文件格式。SQLite4将快速可靠,并且无需管理员担心即可正常工作。SQLite4实现只有极少的依赖性,因此它可以很容易地集成到嵌入式系统或其他非常规的运行时环境中。仍然使用常用的汇编语言C来实现。与SQLite3相比,SQLite4使用了更多的C99特性,但仍然可以用普通的编译器编译。SQLite4使用标准数据类型,如size_t、int64_t、uint64_t等。SQLite4的编程接口与SQLite3非常相似,只是命名前缀由sqlite3_改为了sqlite4_。SQLite3中旧的和过时的接口已从SQLite4中删除。为一些函数添加了参数,有时会稍微修改参数或重新排序它们的参数顺序。修改了一些接口名称,使其更符合其功能。总的来说,SQLite4的编程接口与SQLite3非常相似,所以将一个SQLite3上的应用程序移植到SQLite4上,只需要一两个小时就可以完成查找和替换。SQLite3和SQLite4不共享任何符号,所以将SQLite3和SQLite4同时嵌入到同一个进程中,同时使用是可行的。3.0SQLite4中的主要变化3.1运行时对象)指向定义运行时环境的sqlite4_env对象的指针。接收指向sqlite4_env指针的示例程序包括:sqlite4_open()sqlite4_malloc()、sqlite4_realloc()和sqlite4_free()sqlite4_mprintf()sqlite4_random()sqlite4_config()sqlite4_env对象的一个??实例定义了SQLite4如何与其他系统交互。sqlite4_env对象包含以下方法:分配、进入、离开和解除分配互斥锁,调整大小和释放堆内存,访问和控制底层键/值存储引擎,使用高质量随机种子初始化内置PRNG,获取当前时间和日期以及本地时区,以及错误日志消息。标准平台(windows和Unix)SQLite4构建包括一个全局sqlite4_env对象,它通常适用于该平台。如果接口程序的参数中有指向sqlite4_env对象的指针,而传递给该参数的指针是空指针,则接口程序会使用默认的全局sqlite4_env对象。此外,某些应用程序可能需要两个或多个SQLite4实例在同一地址空间上运行,并且每个实例使用自己不同的互斥原语、不同的内存堆、不同的时间和日期函数等。SQLite4通过为每个数据库实例创建不同的sqlite4_env对象来满足此要求。sqlite4_env对象中也废除了全局变量和静态变量,这样SQLite4就可以方便地移植到对静态或全局数据提供有限支持的嵌入式系统中。3.2简化的key/value存储引擎与SQLite3相比,SQLite4使用的key/value存储引擎接口大大简化。这个存储引擎是可插拔的;它可以在运行时通过在打开新的数据库连接之前对qlite4_env对象进行适当的更改来更改。SQLite4需要一个实现有序键/值对的存储引擎,其中键和值是任意长度的二进制数据。键必须是唯一的并按字典顺序排序。即key要按照比较函数排序,例如:复制代码代码如下:
