/ SQLite源代码库
Login

该存储库包含SQLite数据库引擎的完整源代码. 还包括一些测试脚本. 但是,许多其他测试脚本和大多数文档是分开管理的.

Version Control

SQLite源使用Fossil (一个专门设计和编写来支持SQLite开发的分布式版本控制系统)进行管理. Fossil存储库包含urtext.

如果您正在GitHub或其他Git存储库或服务上阅读本文,那么您正在看镜子. Git镜像中的签入和其他工件的名称与这些对象的正式名称不同. 可在授权镜像的检入注释的页脚中找到检入的正式名称. 官方签入名称也可以在树根目录的manifest.uuid文件中找到. 在交流有关SQLite签入时,请始终使用正式名称,而不是Git名称.

如果您从辅助源中提取了SQLite源代码并希望验证其完整性,则下面的" 验证代码真实性"部分中将提供有关如何执行此操作的提示.

Obtaining The Code

如果您不想使用Fossil,则可以按以下方式下载tarball或ZIP存档或SQLite存档

如果您确实想使用Fossil检出源代码树,请首先安装Fossil 2.0或更高版本. ( 此处提供源压缩包和预编译的二进制文件.Fossil是一个独立程序.要安装,只需下载或构建单个可执行文件,然后将该文件放在$ PATH的某个位置即可.)然后运行以下命令:

    mkdir ~/sqlite
    cd ~/sqlite
    fossil clone https://www.sqlite.org/src sqlite.fossil
    fossil open sqlite.fossil

使用上述步骤设置存储库后,您始终可以使用以下方法更新到最新版本:

    fossil update trunk   ;# latest trunk check-in
    fossil update release ;# latest official release

或键入" fossil ui"以获取基于Web的用户界面.

Compiling

首先创建一个目录,在其中放置构建产品. 建议(但不是必需)将构建目录与源目录分开. 将CD放入构建目录,然后从构建目录运行在源树的根目录下找到的configure脚本. 然后运行" make".

例如:

    tar xzf sqlite.tar.gz    ;#  Unpack the source tree into "sqlite"
    mkdir bld                ;#  Build will occur in a sibling directory
    cd bld                   ;#  Change to the build directory
    ../sqlite/configure      ;#  Run the configure script
    make                     ;#  Run the makefile.
    make sqlite3.c           ;#  Build the "amalgamation" source file
    make test                ;#  Run some tests (requires Tcl)

有关其他目标,请参见makefile.

配置脚本使用autoconf 2.61和libtool. 如果您无法使用configure脚本,则在源树的顶层目录中将找到一个名为" Makefile.linux-gcc"的通用makefile,您可以对其进行复制和编辑以适应您的需要. 对通用makefile的注释显示需要进行哪些更改.

Using MSVC

在Windows上,所有适用的构建产品都可以使用MSVC进行编译. 首先打开与所需编译器版本关联的命令提示符窗口(例如" VS2013开发人员命令提示符"). 接下来,将NMAKE与提供的" Makefile.msc"一起使用以构建受支持的目标之一.

例如:

    mkdir bld
    cd bld
    nmake /f Makefile.msc TOP=..\sqlite
    nmake /f Makefile.msc sqlite3.c TOP=..\sqlite
    nmake /f Makefile.msc sqlite3.dll TOP=..\sqlite
    nmake /f Makefile.msc sqlite3.exe TOP=..\sqlite
    nmake /f Makefile.msc test TOP=..\sqlite

可以通过NMAKE命令行设置几个构建选项. 例如,要为WinRT构建,只需在上面的" sqlite3.dll"命令行中添加" FOR_WINRT = 1"参数即可. 在调试SQLite代码时,建议将" DEBUG = 1"参数添加到上述命令行之一.

SQLite不需要运行Tcl ,但makefile(包括MSVC的文件)需要Tcl安装. SQLite包含许多生成的代码,而Tcl用于完成大部分代码生成.

Source Code Tour

大多数核心源文件位于src /子目录中. src /文件夹还包含用于构建" testfixture"测试工具的文件. " testfixture"使用的源文件的名称均以" test"开头. src /还包含作为命令行程序" sqlite3.exe"主程序的" shell.c"文件和为SQLite实现Tcl绑定的" tclsqlite.c"文件. (历史记录:SQLite最初是Tcl扩展,后来又作为独立库狂奔而出.)

测试脚本和程序位于test /子目录中. 在其他源存储库中可以找到其他测试代码. 有关其他信息,请参见如何测试SQLite .

ext /子目录包含扩展代码. 全文搜索引擎位于ext / fts3中 . R-Tree引擎在ext / rtree中 . ext / misc子目录包含许多较小的单文件扩展名,例如REGEXP运算符.

工具/子目录包含各种脚本和程序,这些脚本和程序用于构建生成的源代码文件或用于测试或生成附件程序,例如" sqlite3_analyzer(.exe)".

Generated Source Code Files

SQLite使用的一些C语言源文件是从其他源生成的,而不是由程序员手动键入的. 本节将总结那些自动生成的文件. 要创建所有自动生成的文件,只需运行" make target_source". " target_source" make目标将创建一个子目录" tsrc /",并将其填充构建SQLite所需的所有源文件,包括手动编辑的文件和自动生成的文件.

SQLite接口由sqlite3.h头文件定义,该头文件是从src / sqlite.h.in,./ manifest.uuid和./VERSION生成的. 工具/mksqlite3h.tcl上的Tcl脚本执行转换. manifest.uuid文件包含特定签入的SHA3哈希,并用于生成SQLITE_SOURCE_ID宏. VERSION文件包含当前的SQLite版本号. sqlite3.h标头实际上只是src / sqlite.h.in的一个副本,在正确的位置插入了源ID和版本号. 请注意,sqlite3.h文件中的注释文本用于生成许多SQLite API文档. 用于生成该文档的Tcl脚本位于单独的源存储库中.

SQL语言解析器是parse.c ,它是从src / parse.y文件中的语法生成的. 由柠檬 LALR(1)解析器生成器将" parse.y"转换为" parse.c". Lemon的源代码在tool / lemon.c中. Lemon使用tool / lempar.c文件作为模板来生成其解析器. Lemon还生成parse.h头文件,同时生成parse.c.

opcodes.h头文件包含定义与" VDBE"虚拟机中的操作码相对应的数字的宏. opcodes.h文件是通过扫描src / vdbe.c源文件生成的. ./mkopcodeh.tcl的Tcl脚本执行此扫描并生成opcodes.h. 第二个Tcl脚本./mkopcodec.tcl,然后扫描opcodes.h生成opcodes.c源文件,该文件包含从opcode-number到opcode-name的反向映射,用于EXPLAIN输出.

keywordhash.h头文件包含哈希表的定义,该哈希表将SQL语言关键字(例如:" CREATE"," SELECT"," INDEX"等)映射到parse.c解析器使用的数字代码中. keywordhash.h文件由C语言程序mkkeywordhash.c生成.

pragma.h头文件包含用于解析和实现PRAGMA语句的各种定义. 标头由脚本工具/mkpragmatab.tcl生成 . 如果要添加新的PRAGMA,请编辑tool / mkpragmatab.tcl文件以为新的PRAGMA插入解析器所需的信息,然后运行脚本以重新生成pragma.h头文件.

The Amalgamation

可以将所有单独的C源代码和头文件(手动编辑并自动生成)合并为一个大的源文件sqlite3.c,称为"合并". 合并是在较大的应用程序中使用SQLite的推荐方法. 将所有单独的源代码文件组合成一个大的源代码文件,可使C编译器执行更多的跨过程分析并生成更好的代码. 从合并中编译时,与从单个源文件编译时相比,SQLite的运行速度快大约5%.

合并是从工具/mksqlite3c.tcl Tcl脚本生成的. 首先,必须将所有单独的源文件收集到tsrc /子目录中(使用" make target_source"的等效项),然后运行tool / mksqlite3c.tcl脚本以正确的顺序将它们全部复制在一起,同时解决内部" #include"引用.

合并源文件的长度超过200K行. 一些符号调试器(最著名的是MSVC)无法处理超过64K行的文件. 要解决此问题,可以在合并后运行一个单独的Tcl脚本tool / split-sqlite3c.tcl,将其分解为一个名为sqlite3-all.c的小型C文件,该文件在名为其他名称的其他七个文件上执行#include sqlite3-1.csqlite3-2.c ,..., sqlite3-7.c . 这样,所有源代码都包含在一个翻译单元中,因此编译器可以进行额外的跨过程优化,但是没有一个源文件的长度超过32K行.

How It All Fits Together

SQLite在设计上是模块化的. 有关详细信息,请参见体系结构描述 . 其他有用的文档(有助于理解SQLite的工作方式)包括文件格式描述,运行准备好的语句的虚拟机事务处理方式的描述以及查询计划程序概述 .

无论是小尺寸还是高性能,多年来都在优化SQLite方面投入了大量精力. 优化往往导致复杂的代码. 因此,当前的SQLite实现存在很多复杂性. 它不会是世界上最容易破解的图书馆.

关键文件:

还有许多其他源文件. 每个文件都有一个简短的标题注释,描述其在较大系统中的用途和作用.

Verifying Code Authenticity

源树根目录中的manifest文件包含存储库中每个源文件的SHA3-256哈希(对于较新的文件)或SHA1哈希(对于较旧的文件). manifest文件本身的SHA3-256哈希是您拥有的源树版本的正式名称. 该manifest.uuid文件应包含SHA3​​-256哈希值的manifest文件. 如果以上所有哈希比较都正确,那么您可以确信您的源代码树是真实的并且是纯正的.

manifest文件的格式应该大部分是不言自明的,但是如果您想了解详细信息,可以在此处获得 .

Contacts

SQLite的主要网站是http://www.sqlite.org/ ,在http://www2.sqlite.org/http://www3.sqlite.org/上具有地理位置分散的备份.

by  ICOPY.SITE