我正在按照文件格式规范中的描述遍历 SQLite 数据库文件,但我并没有真正理解我们必须确定单元标头中是否有指向溢出页的指针的部分。如此处所述https://www.sqlite.org/fileformat.html 第 1.6 节,如果 p < X,则整个有效负载将适合页面,其中 X 是 U-35(p 是有效负载大小,U 是页面大小 - 保留空间)。
我现在正在尝试读取根页面的 sqlite_master 表,第一个单元格从字节 3164 开始。第一个 varint 解码为 929,这是有效负载的大小。单元标头大小为 3 个字节,包括有效负载的大小,因此总计完美为 4096 个字节。但如果我的 ap > 929 该怎么办?
根据给出的描述,任何小于(页面大小 - 保留空间 - 35)的有效负载都应该适合该页面。假设我有一个 4KB 的页面,其中有 0 个保留字节空间,则 X 为 4096 - 35 = 4061。如果我的有效负载大小为 4000 字节,且单元起始位置的偏移量为 3164,会发生什么情况?或者这种情况对于 SQLite 设置其页面的方式来说是不可能的吗?我只是有点困惑,公式忽略了实际单元格如何从页面末尾开始,所以我们不应该考虑公式中的偏移量吗?