1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//! SAP SQL Anywhere page-store reader.
//!
//! This crate parses the on-disk page-store format of SAP SQL Anywhere
//! (initially targeting SA17 build 2182, 2015 release). It provides:
//!
//! * [`PageStore`]: zero-copy random-access iteration over 4 KiB pages.
//! * [`Superblock`]: page-0 parser (magic, format version triple).
//! * [`PageTrailer`]: the universal 12-byte trailer at `0xFF0..0xFFB`.
//! Call [`Page::verify_crc`] for per-page CRC-32 integrity checks.
//! * [`SlottedPage`]: descending row-offset-array catalog-page parser.
//! * [`ApModel`]: arithmetic-progression stream-cipher deobfuscation.
//!
//! # Scope
//!
//! This release (v0.1) covers the **page-store layer only**: opening a file,
//! iterating pages, validating integrity, classifying pages by type,
//! decoding slotted-page directories, and removing the AP fill cipher.
//! System catalog parsing (`SYSTABLE`/`SYSCOLUMN`/`SYSINDEX` rows and
//! typed column values) is planned for a later release.
//!
//! # Example
//!
//! ```no_run
//! use opensqlany::PageStore;
//!
//! let store = PageStore::open("database.db")?;
//! let sb = store.superblock()?;
//! assert!(sb.magic_ok());
//!
//! for (pn, page) in store.pages().enumerate().skip(1) {
//! let trailer = page.trailer();
//! page.verify_crc()?;
//! println!("page {pn}: type {:?}", trailer.page_type());
//! }
//! # Ok::<(), opensqlany::Error>(())
//! ```
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;