SQLite3 整体结构以及所在的 .C文件

本文介绍SQLite library结构,先看下面这个图,从图中可以看出SQLite各个组件之间的相互关系。

 

 

1.  Interface (main.c,legacy.c,vdbeapi.c, table.c)
SQLite主要对外C/C++ Interface都可以在main.c, legacy.c和vdbeapi.c中找到,还有其他一些分布在其他文件中。为了防止与其他library冲突,SQLite对外接口都以sqlite3_开头。

以下给出一些分散的例子
sqlite3_get_table()   table.c
sqlite3_mprintf()       printf.c
sqlite3_complete()    tokenize.c

2. Tokenizer(tokenize.c)
当SQLite收到SQL时, 会交给Tokenizer处理, Tokenizer将SQL分词并传给Parser组件, Tokenizer组件代码可以在tokenize.c中找到。关于分词可以回去复习下编译原理以及YACC,BISON。

3. Parser (parse.c)
SQLite using Lemon parser, Lemon does the same job as YACC/BISON. 使用Lemon的代码在parse.c中

4. Code Generator (attach.c, auth.c, build.c, delete.c, expr.c, insert.c, pragma.c, select.c, trigger.c, update.c, vacuum.c and where.c)
The code generator to produce virtual machine code that will do the work that the SQL statements request。

In these files is where most of the serious magic happens.
expr.c: handles code generation for expressions.
where.c: handles code generation for WHERE clauses on SELECT, UPDATE and DELETE statements.
attach.c: delete.c, insert.c, select.c, trigger.c update.c, and vacuum.c handle the code generation for SQL statements with the same names.(Each of these files calls routines in expr.c and where.c as necessary.)
build.c: other SQL statements are coded out of .
auth.c: implements the functionality of sqlite3_set_authorizer().


5.Virtual Machine(vdbe.h,vdbe.c)
virtual machine 执行Code Generator生成的代码。关于Virtual Machine的详细介绍可以看另外的文章。总的来说,virtual machine实现了操作数据库文件的引擎。
vdbeInt.h 定义了VM私有的一些结构
vdbeaux.c 定义了一些工具函数
vdbeapi.c 定义了VM供外部组件使用的函数,比如sqlite3_bind_xxx()
vdbemem.c 定义了类型变量Mem
func.c: SQL functions (比如coalesce(), count(), substr())使用c 回调函数的形式实现

6.B-Tree(btree.h, btree.c)

7.Page Cache (pager.h, pager.c)
Cache requested data in buffer。
The page cache also provides the rollback and atomic commit abstraction and takes care of locking of the database file

8. OS Interface(os.h, os_xx.c)
为了可移植性,SQLite为操作系统操作提供了一个抽象层, 对于不同的平台有自己的实现,os_unix.c,os_win.c

9.Utilities(util.c)
util.c: Memory allocation and caseless string comparison routines
hash.c: Symbol tables used by the parser are maintained by hash tables
utf.c: contains Unicode conversion subroutines
printf.c: SQLite's own private printf()
random.c: SQLite's random number generator

10. Test Code (test1.c~test5.c, md5.c, os_test.c)
os_test.c: simulate power failures to verify the crash-recovery mechanism in the pager

 

参考

http://www.sqlite.org/arch.html SQLite Architecture

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值