From 4e4bb1fd0045571ca710e05127fec3842cd574c3 Mon Sep 17 00:00:00 2001 From: Milan Hauth Date: Sun, 2 Apr 2023 19:36:19 +0200 Subject: [PATCH] Revert "Revert "fixup: lazy db.pages"" This reverts commit 7b697c67a2ac889c4152ce6021065993be5d509b. --- database/sqlite3.ksy | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/database/sqlite3.ksy b/database/sqlite3.ksy index bce8cc642..b0916eada 100644 --- a/database/sqlite3.ksy +++ b/database/sqlite3.ksy @@ -37,17 +37,7 @@ seq: type: database_header instances: pages: - type: - switch-on: '(_index == header.idx_lock_byte_page ? 0 : _index >= header.idx_first_ptrmap_page and _index <= header.idx_last_ptrmap_page ? 1 : 2)' - cases: - 0: lock_byte_page(_index + 1) - 1: ptrmap_page(_index + 1) - # TODO: Free pages and cell overflow pages are incorrectly interpreted as btree pages - # This is unfortunate, but unavoidable since there's no way to recognize these types at - # this point in the parser. - 2: btree_page(_index + 1) - pos: 0 - size: header.page_size + type: page(_index + 1, header.page_size * _index) repeat: expr repeat-expr: header.num_pages doc: | @@ -57,6 +47,27 @@ instances: TODO how exactly? add example code if: false types: + page: + params: + - id: page_number + type: s4 + - id: ofs_body + type: s4 + instances: + page_index: + value: 'page_number - 1' + body: + pos: ofs_body + size: _root.header.page_size + type: + switch-on: '(page_index == _root.header.idx_lock_byte_page ? 0 : page_index >= _root.header.idx_first_ptrmap_page and page_index <= _root.header.idx_last_ptrmap_page ? 1 : 2)' + cases: + 0: lock_byte_page(page_number) + 1: ptrmap_page(page_number) + # TODO: Free pages and cell overflow pages are incorrectly interpreted as btree pages + # This is unfortunate, but unavoidable since there's no way to recognize these types at + # this point in the parser. + 2: btree_page(page_number) database_header: seq: - id: magic