分析一个具体的sqlite文件的内容
准备工作
sudo make install
安装最新版本的sqlite 如果安装成功,可以通过命令行sqlite3 进入的时候,可以参看sqlite版本。也可以通过vim查看二进制格式验证,后面后方法~
开始动手
- 创建一个sqlite文件,对源码,
sudo make install
使用最新版本
CREATE TABLE reading(
id int primary key,
fname text,
name text
);
INSERT INTO reading VALUES (1,"btreeint.c","zhou");
INSERT INTO reading VALUES (2,"btree.c","yao");
INSERT INTO reading VALUES (3,"sqlite.html","zhouyao");
- 分析这个sqlite文件的结果。
注意,一定要注意sqlite版本
开始分析sqlite
对照官方文档,说明和源代码,二进制文件解剖截屏如下
注意btree 开始的第一个字节。表明这个page用途的16进制为0D
实际上,这个与常量,or运算,最终结果来决定是否是内部页。或者决定,是否为btree 还是b+tree page type first
PTF_ZERODATA
内部page具体fomate说明源码
btree 分为始终
interior table b-tree (B+ tree)
lead table b-tree(B+tree)
interiror index b-tree(B-tree)
leaf index b-tree (B-tree)
variable-length integer 编码的代码
util.c
putVarint64
具体查看varint 这个函数是怎么实现的
二进制格式的解析
filehead 与page head 解析
cell内部信息
------- 思想草稿笔记分割线-------
sqlite源码阅读
关于,sqlite结构的理解,在btreeint.h的文件中
page大小
最大64k一页,默认是1k(最新的3.16.2默认为4K)
记录了以页为单位的数据库大小
schemacookie 当sqlstatement被编译的时候,会检查这个是否相同,如果相同才会被执行
可以把sqltie数据库,单独当一个程序的格式。sqlite很多时候,不是一个完美的自定义程序格式,但是在大多数情况下,比自己设计一个程序格式要好的多。字段中有应用程序字节,可以定制化~
to-do 怎么设计一个自定义的程序格式?从而让特定的程序打开?
可能存在的应用。我自己设计一个桌面端应用。为了方便应用之间方便的拷贝,可以用sqlite作为程序格式
todo----但是,现在,很多时候都用xml来作为程序格式 有什么优缺点?
btree page中的head
head中的信息flag,决定了,这个page的内容是什么。为leaf,
page中的cell的个数
地址,从头部开始。btree内部,都是经过排序的cell
cell中存放了哪些东西?
cell的大小是可变的
cell的变长整数