SQlite源码分析

日志

2.7.1日志模式
1、可以通过sqlite3PagerSetJournalMode()函数在pager中设置日志的模式eMode,其中包括:
①journalMode==页面日志模式删除(delete)
②journalMode==页面日志模式截断(truncate)
③journalMode==页面日志模式存留(persist)
④journalMode==页面日志模式关闭(off)
⑤journalMode==页面日志模式存储(memory)
⑥journalMode==页面日志模式预写式日志(wal)
如果有下列两种情况中的任意一种,日志模式不允许改变:
一个内存数据库可以直邮他的日志模式设置_off或者_memory。
临时数据库不能有_wal日志模式。
否则日志模式一般被sqlite3PagerSetJournalMode()设为特定值,并通过sqlite3PagerGetJournalMode()返回指出当前(可能更新的)的日志模式。
2、如果页面在改变日志模式赋值OK的状态下返回真。日志模式可以在数据库没有模式化的时候发生改变。
2.7.2 日志大小
用sqlite3PagerJournalSizeLimit()函数得到/设置日志文件不变的大小限制;如果赋值为-1意味着没有限制被执行,如果小于-1就表示尝试是空操作。
2.7.3 日志文件格式:
①8字节的前缀。
②高位4个字节的整数是日志文件有效页的数量。
③高位4个字节的整数是完整性检查的初始值。
④高位4个字节的整数是截短的数据库页面的数量。
⑤高位4个字节的整数是扇区大小。
⑥高位4个字节的整数是页面大小。
⑦下个扇区大小填充为0。