diff --git a/core/storage/sqlite3_ondisk.rs b/core/storage/sqlite3_ondisk.rs index 469645146..b3b0c8836 100644 --- a/core/storage/sqlite3_ondisk.rs +++ b/core/storage/sqlite3_ondisk.rs @@ -661,10 +661,9 @@ impl PageContent { /// The size of the page header in bytes. /// 8 bytes for leaf pages, 12 bytes for interior pages (due to storing rightmost child pointer) pub fn header_size(&self) -> usize { - match self.page_type() { - PageType::IndexInterior | PageType::TableInterior => INTERIOR_PAGE_HEADER_SIZE_BYTES, - PageType::IndexLeaf | PageType::TableLeaf => LEAF_PAGE_HEADER_SIZE_BYTES, - } + let is_interior = self.read_u8(BTREE_PAGE_TYPE) <= PageType::TableInterior as u8; + (!is_interior as usize) * LEAF_PAGE_HEADER_SIZE_BYTES + + (is_interior as usize) * INTERIOR_PAGE_HEADER_SIZE_BYTES } /// The total number of bytes in all fragments @@ -864,12 +863,7 @@ impl PageContent { } pub fn is_leaf(&self) -> bool { - match self.page_type() { - PageType::IndexInterior => false, - PageType::TableInterior => false, - PageType::IndexLeaf => true, - PageType::TableLeaf => true, - } + self.read_u8(BTREE_PAGE_TYPE) > PageType::TableInterior as u8 } pub fn write_database_header(&self, header: &DatabaseHeader) {