看SQLite源码时,遇到的问题

前端之家收集整理的这篇文章主要介绍了看SQLite源码时,遇到的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

开始看sqlite3.7的代码了,但是感觉到好像先天不足似的:

第一,就是注释问题,注释全部是英语,借助金山词霸或者灵格斯词霸单词的问题解决了,翻译好像也不太困难,但是要记录下来,花费的时间就是很大的了,所以在考虑要不要不放弃翻译?写出来的难度大。现在想了想,还是不翻译了,自己能看懂就行了,以后将重要的部分标注出来。

第二,就是对于C/C++掌握的还不是很清晰,当时数据结构学的不是很透彻,所以在看的过程中,会有很多语法不懂,不过因为是第一遍看,倒是发现了这些代码写的很整齐,像个搞艺术的人写出来的,严谨、细致。

第三,对于source insight的使用,一般的用法解决,这个应该来说不会困难。

第四,也是迫切需要解决的问题,我需要一个相对来说安静的环境。当然,心不静是一方面,最近有点犯迷糊。但是,这个学习,还是很需要安静的环境的。尤其是在需要细细思考的时候,是需要安静的。还要学会控制情绪,源码很多,大概包含注释的话15万行左右吧,还需要做好打大战役的准备,尤其是对我这样基础比较薄弱的人,还需要回忆先前的知识,比如C++、数据结构、编译原理等等。

暂时想到这么多。

以下内容转载自:MrDB.http://www.cnblogs.com/hustcat/archive/2009/02/26/1398896.html

Version 3.3.6代码文件结构

——整理:hustcat2009-2-19

@H_403_42@文件名称

@H_403_42@大小byte

@H_403_42@备注

API部分

main.c

35414

sqlite Library@H_403_42@的大部分接口

legacy.c

3734

sqlite3_exec@H_403_42@的实现

table.c

5464

the sqlite3_get_table() and sqlite3_free_table()@H_403_42@的实现,它们是sqlite3_exec@H_403_42@的包装

preprare.c

17983

@H_403_42@主要实现sqlite3_prepare()

分词器部分(Tokenizer)

tokenize.c

14495

@H_403_42@分词器的实现

语法分析器部分(Parser)

parser.c

116917

@H_403_42@分析器的实现,由Lemon@H_403_42@实现

parser.h

6847

@H_403_42@分析器内部定义的关键字

代码生成器部分(Code Generator)

update.c

23878

@H_403_42@处理UPDATTE@H_403_42@语句

delete.c

21978

@H_403_42@处理DELETE@H_403_42@语句

insert.c

62026

@H_403_42@处理INSERT@H_403_42@语句

trigger.c

29065

@H_403_42@处理TRIGGER@H_403_42@语句

attach.c

15941

@H_403_42@处理ATTACHT @H_403_42@和DEATTACH@H_403_42@语句

select.c

112084

@H_403_42@处理SELECT@H_403_42@语句

where.c

75826

@H_403_42@处理WHERE@H_403_42@语句

vacuum.c

11005

@H_403_42@处理VACUUM@H_403_42@语句

pragma.c

34289

@H_403_42@处理PRAGMA@H_403_42@命令

expr.c

73963

处理sql语句中的表达式

auth.c

7496

主要实现sqlite3_set_authorizer()

analyze.c

13149

实现ANALYZE命令

alter.c

18414

实现ALTER TABLE功能

build.c

104052

处理以下语法:

CREATE TABLE

DROP TABLE

CREATE INDEX

DROP INDEX

creating ID lists

BEGIN TRANSACTION

COMMIT

ROLLBACK

func.c

34335

实现sql语句的函数语句

date.c

24031

与日期和时间转换有关的函数

虚拟机部分(Virtual Machine)

vdbeapi.c

23300

@H_403_42@虚拟机提供上层模块调用API@H_403_42@实现部分

vdbe.c

143552

@H_403_42@虚拟机的主要实现部分

vdbe.h

5309

@H_403_42@定义了VDBE@H_403_42@的接口,VdbeOp@H_403_42@结构体(@H_403_42@代表一条指令)

vdbeaux.c

58741

Vdbe.h@H_403_42@的接口的实现

vdbeInt.h

17595

Vdbe.c@H_403_42@的私有头文件,定义了VDBE@H_403_42@常用的数据结构:

Cursor@H_403_42@——虚拟机中使用的游标

Mem@H_403_42@——vdbe@H_403_42@在内部把所有的sql@H_403_42@值当作一个Mem@H_403_42@数据结构来处理

Vdbe@H_403_42@——虚拟机数据结构

vdbemem.c

26375

@H_403_42@操作”Mem”@H_403_42@数据结构的函数

vdbefifo.c

2927

B-Tree部分

btree.h

5260

@H_403_42@头文件,定义了B-tree@H_403_42@提供的操作接口

btree.c

215570

B-Tree@H_403_42@部分的主要实现,并定义了以下数据结构:

Btree@H_403_42@——Btree handler

BtCursor@H_403_42@——使用的游标

BtLock@H_403_42@——锁

BtShared@H_403_42@——包含了一个打开的数据库的所有信息

MemPage@H_403_42@——文件在内存存放在该数据结构中

CellInfo

Pager部分

pager.h

4161

@H_403_42@定义sqlite page cache@H_403_42@子系统提供的接口

pager.c

127490

Pager@H_403_42@模块的主要实现,并定义了以下数据结构:

PgHdr@H_403_42@——每一个内存中的页面页面

Pager@H_403_42@——该模块中最重要的数据结构

PgHistory

OS Interface部分

os.h

18355

@H_403_42@定义了为上层模块提供的操作函数,并定义了以下数据结构:

OsFile@H_403_42@——描述一个文件

IoMethod@H_403_42@——OsFile@H_403_42@所支持的操作函数(对所有架构都适用的OS Interface@H_403_42@)

os.c

2866

@H_403_42@对IoMethod@H_403_42@中的函数的包装

os_win.c

42975

Windows@H_403_42@平台下的OS Interface

os_unix.c

60831

Unix@H_403_42@平台下的OS Interface

os_os2.c

28451

OS2@H_403_42@平台下的OS Interface

其它部分

utf.c

20891

@H_403_42@与UTF@H_403_42@编码有关的函数

util.c

43575

@H_403_42@一些实用函数,比如:

sqlite3Malloc()@H_403_42@,sqlite3FreeX()

sqlite3.h

63873

sqlite@H_403_42@的头文件,定义了提供给应用使用的API@H_403_42@和数据结构。

sqliteInt.h

78886

@H_403_42@定义了sqlite@H_403_42@内部使用的接口和数据结构

printf.c

29556

@H_403_42@主要实现与printf@H_403_42@有关的函数

random.c

3078

@H_403_42@随机生成

hash.c

11896

sqlite@H_403_42@使用的hash@H_403_42@表

hash.h

4033

Hash @H_403_42@表头文件

猜你在找的Sqlite相关文章