非常教程

Sqlite参考手册

其他 | Miscellaneous

Maintaining Private Branches Of SQLite

1.介绍

2.基本理念

3.程序

3.1.获取软件

3.2.创建一个项目库

3.3.在化石中安装SQLite基线

3.4.创建私人分支

3.5.向私人分支中的代码添加自定义项

3.6.整合新的公有SQLite版本

3.7.将公有SQLite更新合并到私有分支中

3.8.进一步更新

4.变化

SQLite旨在满足大多数开发人员的需求,而无需进行任何更改或定制。当需要更改时,通常可以使用启动时间(1)或运行时间(2)(3)(4)配置方法或通过编译时选项来完成。应用程序开发人员需要编辑SQLite源代码才能将SQLite合并到产品中的情况非常罕见。

我们调用SQLite源代码的自定义修改,这些源代码是为了将一个应用程序用作“私人分支”而持有的。当需要私有分支时,应用程序开发人员必须承担保持私有分支与公共SQLite源同步的任务。这很乏味。它也可能很棘手,因为虽然SQLite文件格式和发布的接口非常稳定,但SQLite的内部实现变化非常迅速。对于任何给定的SQLite点发行版,成百上千行代码可能会发生变化。

本文概述了保持SQLite的私有分支与公共SQLite源代码同步的一种可能方法。当然,维护私营部门有很多方法。没有人被迫使用这里描述的方法。本文并不试图对私人分支机构的维护者强加特定的程序。本文的重点在于提供一个维护私有分支的流程示例,该分支可用作设计最适合每个单独项目环境的流程的模板。

Maintaining Private Branches Of SQLite

我们建议使用化石软件配置管理系统建立两个分支。一个分支(“公共分支”或“trunk”)包含已发布的SQLite源,另一个分支是包含为该项目自定义的代码的专用分支。无论何时创建SQLite的新公开版本,该版本都会添加到公共分支中,然后将这些更改合并到私有分支中。

本文档提出使用化石,但任何其他分布式软件配置管理系统,如单调或mercurial(又名“hg”)或git都可以提供。这个概念将是相同的,尽管程序的细节会有所不同。

右图说明了这个概念。一个从标准的SQLite版本开始。为了举例,假设有人打算从SQLite版本3.6.15创建一个私有分支。在图中这是版本(1)。维护人员将基线SQLite精确复制到分支空间中,如版本(2)所示。请注意,(1)和(2)完全相同。然后,维护人员将版本(2)的私人更改应用于版本(3)。换句话说,版本(3)是SQLite版本3.6.15加编辑。

后来,SQLite版本3.6.16发布,如图中圆圈(4)所示。在这一点上,私营部门维护人员进行合并,将(1)至(4)中的所有变更都应用到(3)。结果是版本(5),这是SQLite 3.6.16加编辑。

可能会有合并冲突。换句话说,从(2)到(3)的变化可能与(1)到(4)的变化不相容。在这种情况下,维护者将不得不手动解决冲突。希望冲突不会经常出现。私人编辑保持在最低限度时,冲突发生的可能性较小。

上面的循环可以重复多次。该图在圆圈(6)中显示了第三个SQLite版本3.6.17。私有分支维护者可以进行另一次合并,以便将从(4)到(6)的更改合并到私有分支中,生成版本(7)。

本文档的其余部分将指导读者完成维护私人分支所需的步骤。总体思路与上面概述的相同。本节仅提供更多细节。

我们再次强调,这些步骤并非旨在成为维持私营部门的唯一可接受的方法。这种方法是其中之一。将此文档用作准备项目特定程序的基准。不要害怕尝试。

3.1.获取软件

Fossil是一个计算机程序,在使用之前必须安装在您的机器上。幸运的是,安装化石非常简单。化石是一个简单的“* .exe”文件,你只需下载并运行。要卸载化石,只需删除exe文件。化石网站提供化石安装和入门的详细说明。

3.2.创建一个项目库

使用以下命令创建化石资源库以托管私有分支:

fossil new private-project.fossil

你可以打电话给你的项目任何你喜欢的。“ .fossil”后缀是可选的。对于本文档,我们将继续称这个项目为“ private-project.fossil”。请注意,这private-project.fossil是一个普通的磁盘文件(实际上是一个SQLite数据库),它将包含完整的项目历史记录。您可以简单地复制一个文件来备份项目。

如果要配置新项目,请键入:

fossil ui private-project.fossil

“ui”命令将使化石运行一个微型内置网络服务器并启动指向该网络服务器的网络浏览器。您可以使用您的网页浏览器以各种方式配置您的项目。有关更多信息,请参阅化石网站上的说明。

一旦创建了项目库,通过移动到您想要保留所有项目源代码并键入的目录来创建项目的开放结账:

fossil open private-project.fossil

如果你愿意,你可以有多个同一个项目的签出。你可以将存储库“克隆”到不同的机器上,以便多个开发人员可以使用它。查看化石网站获取更多信息。

3.3.在Fossil中安装SQLite基线

在上一步中创建的存储库最初是空的。下一步是加载基线SQLite版本 - 上图中的circle(1)。

首先以您使用它的任何形式获取SQLite的副本。您获得的公共SQLite应尽可能接近您的私有编辑副本。如果您的项目使用SQLite合并,则获取合并副本。如果您使用预处理的独立源文件,请改为使用这些文件。将所有源文件放在上一步创建的结帐目录中。

公共SQLite版本中的源代码使用unix行结尾(ASCII代码10:“仅新行”,NL)和空格而不是制表符。如果您将要更改以windows样式行结束的行(ASCII代码13,10:“carriage-return”和“newline”; CR-NL),或者如果要将空格缩进更改为制表符缩进,请进行更改现在在您检查基线之前。如果公共部门和私营部门之间的差异很小,合并过程才会奏效。如果源文件的每一行都在专用分支中更改,因为您已从NL更改为CR-NL行尾,则合并步骤将无法正常工作。

让我们假设你正在使用合并源代码。如下所示将基线添加到项目中:

fossil add sqlite3.c sqlite3.h

如果您使用单独的源文件,请命名所有源文件,而不仅仅是两个合并源文件。完成此操作后,按如下方式提交您的更改:

fossil commit

系统会提示您提供签入评论。说出你喜欢的一切。提交完成后,您的基线将成为存储库的一部分。如果你愿意,下面的命令可以在“时间线”上看到:

fossil ui

最后一个命令与我们之前运行的命令是相同的“ui”命令。它启动一个迷你网络服务器运行并将您的网络浏览器指向它。但是这一次我们不需要指定存储库文件,因为我们位于一个checkout内,所以化石可以找出它自己的存储库。如果你想输入资源库文件名作为第二个参数,你可以。但它是可选的。

如果您不想使用Web浏览器查看新签入,则可以使用以下命令从命令行获取一些信息:

fossil timeline
fossil info
fossil status

3.4.创建私人分支

上一步在上图中创建了圆圈(1)。这一步将创建圆圈(2)。运行以下命令:

 
fossil branch new private trunk -bgcolor "#add8e8"

该命令将创建一个名为“private”的新分支(如果您愿意,可以使用不同的名称)并为其分配浅蓝色背景色(“#add8e8”)。如果需要,可以省略背景颜色,但具有不同的背景确实可以更容易地在时间线显示上从“主干”(公共分支)告知分支。如果您愿意,可以使用Web界面更改专用分支或公共分支(“中继”)的背景颜色。

上面的命令创建了新的分支。但是,您的结帐仍然在主干上 - 您可以通过运行命令来看到一个事实:

fossil info

要将退房更改为私人分支,请键入:

fossil update private

您可以再次运行“info”命令来验证您是否在私人分支上。要返回公共分支,请键入:

fossil update trunk

通常情况下,化石将在私人和公共分支机构之间切换时修改结帐中的所有文件。但在这一点上,这两个分支中的文件是相同的,因此不需要进行修改。

3.5.向私人分支中的代码添加自定义项

现在是时候对SQLite进行私有的自定义修改了,这是本次练习的重点。使用“ fossil update private”命令切换到专用分支(如果您不在其中),然后在您的文本编辑器中调出源文件,并进行所需的任何更改。完成更改后,使用以下命令提交这些更改:

fossil commit

系统会再次提示您输入描述更改的提交。然后提交会发生。该提交会在存储库中创建一个与上图中的circle(3)对应的新签入。

现在公共和私人分支是不同的,你可以运行“ fossil update trunk”和“ fossil update private”命令,并看到化石确实在分支之间来回切换时会改变结帐中的文件。

请注意,在上图中,我们将私有编辑显示为单个提交。这只是为了清晰呈现。没有什么可以阻止你做几十个或几百个单独的微小更改并分别进行。事实上,做出许多小改变是首选的工作方式。在单次提交中完成所有更改的唯一原因是它使图更易于绘制。

3.6.整合新的公有SQLite版本

假设经过一段时间(通常大约一个月),SQLite的新版本发布了:3.6.16。你会想把这个新的公共版本的SQLite整合到公共分支(干线)的仓库中。为此,首先将您的存储库更改为trunk:

fossil update trunk

然后下载新版本的SQLite源并覆盖结帐中的文件。

如果您将NL更改为CR-NL行结束更改或空格更改原始基准中的缩进更改,请对新的源文件进行相同的更改。

一切准备就绪后,运行“ fossil commit”命令检查更改。这会在上图中创建圆圈(4)。

3.7.将公有SQLite更新合并到私有分支中

下一步是将公共分支中的更改转移到私人分支。换句话说,我们想要在上图中创建圆圈(5)。首先使用“ fossil update private” 切换到私人分支。然后输入这个命令:

fossil merge trunk

“合并”命令尝试将圆圈(1)和(4)之间的所有更改应用于本地签出中的文件。请注意,圆圈(5)尚未创建。您需要运行“提交”来创建圆圈(5)。

合并中可能存在冲突。当同一行代码在圆圈(1)和(4)与圆圈(2)和(3)之间以不同方式更改时会发生冲突。合并命令将宣布任何冲突,并将在输出中包含两个版本的冲突行。您将需要调出包含冲突的文件并手动解决冲突。

在解决冲突之后,许多用户在提交到版本库之前都喜欢编译和测试新版本。或者你可以先提交并在稍后测试。无论哪种方式,运行“ fossil commit”命令检入圆圈(5)版本。

3.8.进一步更新

随着SQLite的新版本发布,请重复步骤3.6和3.7,将新版本中的更改添加到专用分支。如果需要,可以在两个发行版之间对私人分支进行其他私人更改。

自从这篇文档首次撰写以来,规范的SQLite源代码已经从古老的CVS系统转移到了http://www.sqlite.org/src的Fossil存储库中。这意味着如果你正在使用规范的SQLite源代码(而不是合并源代码文件,sqlite3.c和sqlite3.h),那么你可以简单地通过克隆官方仓库来创建一个私有仓库:

fossil clone http://www.sqlite.org/src private-project.fossil

这个命令都创建了新的存储库,并用最新的SQLite来填充它。然后您可以创建一个私人分支,如3.4节所述。

当通过克隆创建私有存储库时,整合新的公共SQLite版本也变得更加容易。要从公共SQLite存储库中获取所有最新的更改,只需进入开放式检出并执行以下操作:

fossil update

然后继续将“trunk”中的更改与您的“私有”更改合并在一起,如3.7节所述。

 SQLite在公共领域。

其他 | Miscellaneous相关

1.35% Faster Than The Filesystem
2.8+3 Filenames
3.An Asynchronous I/O Module For SQLite
4.Appropriate Uses For SQLite
5.Architecture of SQLite
6.Atomic Commit In SQLite
7.Automatic Undo/Redo With SQLite
8.Benefits of SQLite As A File Format
9.Change in Default Page Size in SQLite Version 3.12.0
10.Clustered Indexes and the WITHOUT ROWID Optimization
11.Compile-time Options
12.Constraint Conflict Resolution in SQLite
13.Custom Builds Of SQLite
14.Deterministic SQL Functions
15.Distinctive Features Of SQLite
16.EXPLAIN QUERY PLAN
17.Features Of SQLite
18.File Format Changes in SQLite
19.Full-Featured SQL
20.High Reliability
21.Hints for Debugging SQLite
22.How SQLite Is Tested
23.How To Compile SQLite
24.How To Download Canonical SQLite Source Code
25.Imposter Tables
26.In-Memory Databases
27.Indexes On Expressions
28.Internal Versus External BLOBs
29.Isolation In SQLite
30.Long Term Support
31.Many Small Queries Are Efficient In SQLite
32.Measuring and Reducing CPU Usage in SQLite
33.Memory-Mapped I/O
34.NULL Handling in SQLite
35.Partial Indexes
36.Pointer Passing Interfaces
37.Powersafe Overwrite
38.Release History Of SQLite
39.Result and Error Codes
40.Row Values
41.Rowid Tables
42.Run-Time Loadable Extensions
43.SQL Features That SQLite Does Not Implement
44.sqldiff.exe: Database Difference Utility
45.SQLite As An Application File Format
46.SQLite Autoincrement
47.SQLite Backup API
48.SQLite Changes From Version 3.4.2 To 3.5.0
49.SQLite Changes From Version 3.5.9 To 3.6.0
50.SQLite Database Speed Comparison
51.SQLite File IO Specification
52.SQLite Frequently Asked Questions
53.SQLite In 5 Minutes Or Less
54.SQLite is a Self Contained System
55.SQLite Is Serverless
56.SQLite Is Transactional
57.SQLite Library Footprint
58.SQLite Shared-Cache Mode
59.SQLite Unlock-Notify API
60.SQLite Version 3 Overview
61.SQLite: Single File Database
62.Temporary Files Used By SQLite
63.TH3
64.The COMPLETION() Table-Valued Function
65.The CSV Virtual Table
66.The dbhash.exe Utility Program
67.The DBSTAT Virtual Table
68.The Error And Warning Log
69.The generate_series Table-Valued Function
70.The OS Backend (VFS) To SQLite
71.The Spellfix1 Virtual Table
72.The SQLite Amalgamation
73.The SQLite Bytecode Engine
74.The sqlite3_analyzer.exe Utility Program
75.The SQLITE_STMT Virtual Table
76.The UNION Virtual Table
77.The Virtual Database Engine of SQLite
78.Uniform Resource Identifiers
79.Using SQLite In Multi-Threaded Applications
80.Version Numbers in SQLite
81.What If OpenDocument Used SQLite?
82.Why Is SQLite Coded In C
83.Zero-Configuration
Sqlite

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来

主页 https://sqlite.org/
源码 https://www.sqlite.org/src/
发布版本 3.21.0

Sqlite目录

1.C界面 | C Interface
2.C Interface: Session Module
3.CLI
4.数据库文件表 | Database File Format
5.数据类 | Datatypes
6.动态内存分配 | Dynamic Memory Allocation
7.外键约束 | Foreign Key Constraints
8.全文索引 | Full-Text Search
9.损坏方式 | How To Corrupt
10.JSON
11.语言 | Language
12.局限性 | Limits
13.锁定和并发 | Locking and Concurrency
14.其他 | Miscellaneous
15.PRAGMA Statements
16.查询计划程序 | Query Planner
17.R*Tree Module
18.RBU Extension
19.语法图 | Syntax Diagrams
20.Tcl Interface
21.虚拟表机制 | Virtual Table Mechanism
22.预写日志 | Write-Ahead Logging
23.SQL 教程
24.SQL 简介
25.SQL 语法
26.SQL DELETE 语句
27.SQL UPDATE 语句
28.SQL NOT NULL 约束
29.SQL 约束
30.SQL CREATE TABLE 语句
31.SQL CREATE DATABASE 语句
32.SQL INSERT INTO SELECT 语句
33.SQL SELECT INTO 语句
34.SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
35.SQL AUTO INCREMENT 字段
36.SQL ALTER TABLE 语句
37.SQL 撤销索引、表以及数据库
38.SQL CREATE INDEX 语句
39.SQL DEFAULT 约束
40.SQL CHECK 约束
41.SQL FOREIGN KEY 约束
42.SQL PRIMARY KEY 约束
43.SQL UNIQUE 约束
44.SQL 通用数据类型
45.SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
46.SQL NULL 值 – IS NULL 和 IS NOT NULL
47.SQL Server 和 MySQL 中的 Date 函数
48.SQL MS Access、MySQL 和 SQL Server 数据类型
49.SQL 函数
50.SQL 总结
51.SQL 主机
52.SQL 快速参考
53.SQL ROUND() 函数
54.SQL Server GETDATE() 函数
55.MySQL DATE_FORMAT() 函数
56.MySQL DATEDIFF() 函数
57.MySQL DATE_SUB() 函数
58.MySQL DATE_ADD() 函数
59.MySQL EXTRACT() 函数
60.MySQL DATE() 函数
61.MySQL CURTIME() 函数
62.MySQL CURDATE() 函数
63.MySQL NOW() 函数
64.SQL Server CONVERT() 函数
65.SQL Server DATEDIFF() 函数
66.SQL Server DATEADD() 函数
67.SQL Server DATEPART() 函数
68.SQLite 命令
69.SQLite 安装
70.SQLite 简介
71.SQLite 运算符
72.SQLite Select 语句
73.SQLite 删除表
74.SQLite 创建表
75.SQLite Insert 语句
76.SQLite 分离数据库
77.SQLite 附加数据库
78.SQLite 创建数据库
79.SQLite 数据类型
80.SQLite 语法
81.SQLite Order By
82.SQLite Limit 子句
83.SQLite Glob 子句
84.SQLite Like 子句
85.SQLite Delete 语句
86.SQLite Update 语句
87.SQLite AND/OR 运算符
88.SQLite Where 子句
89.SQLite 表达式
90.SQLite Distinct 关键字
91.SQLite Having 子句
92.SQLite Group By
93.SQLite Join
94.SQLite 约束
95.SQLite PRAGMA
96.SQLite 事务
97.SQLite 视图
98.SQLite Truncate Table
99.SQLite Alter 命令
100.SQLite Indexed By