SQlite源码分析

Pager状态

       状态最终都是通过连接的B-tree和pager从数据库读/写数据,通过B-tree的游标遍历存储在页面中的记录。游标在访问页面之前要把数所从磁盘加载到内存,而这就是页面的任务。任何时候,如果B-tree需要页面,它都会请求页面从磁盘中读取数据,然后把页面(page)加载到页面缓冲区,之后B-tree和与之关联的游标就可以访问位于页面中的记录了。Pager.eState可变的存储页面的当前‘state’。一个页面可能下列七个状态中的一个(打开,读取,写锁,错误,写缓存模式,写数据库模式,写结束)。事务状态的列表展示如下:        打开——读取(加一个共享锁)
       读取——打开(页面解锁)
       读取——写锁(在页面上开始一个写事务)
       写锁——写缓存模式(页面打开日志)
       写缓存模式——写数据库模式(同步日志)
       写数据库模式——写结束(把页面同步到数据库文件中)
       写——读取(页面结束进程)
       写**——错误(页面错误)
       错误——打开(页面解锁)
       如果游标改变了页面,为了防止事务回滚,页面必须采取特殊的方式保存原来的page。总的来说,pager负责读写数据库,管理内存缓存和页面(page),以及管理事务,锁和崩溃恢复。