Expand description
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 at0xFF0..0xFFB. CallPage::verify_crcfor 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
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());
}Structs§
- ApModel
- AP deobfuscation model for a single SA17 page-store file.
- Page
- A borrowed view of a single 4 KiB page.
- Page
Store - An SA17 page-store opened from disk.
- Page
Trailer - Parsed view of the 12-byte trailer at offsets
0xFF0..0xFFB. - Pages
- Iterator returned by
PageStore::pages. - Slot
Directory - Decoded slot directory.
- Slotted
Page - A page that has been parsed for its slotted-directory layout.
- Superblock
- Parsed view of the page-0 superblock.
Enums§
- Error
- Errors returned by the SA17 reader.
- Page
Type - Known page types, from the byte at trailer offset
0xFF2.
Constants§
- PAGE_
SIZE - Size of a single SA17 page in bytes (4 KiB, fixed).
- SA_
COPYRIGHT_ MARKER - The 33-byte copyright substring that pins the engine to SAP SQL Anywhere 17.0.4 build 2182 (2015 release).
- SA_
MAGIC - Magic value at superblock offset 0x14. Appears as bytes
5E BA 7A DA(little-endian u32 =0xDA7ABA5E). - SECTORS_
PER_ PAGE - Number of sectors per page (8 × 512 = 4096 bytes).
- SECTOR_
SIZE - Size of a single AP sector in bytes.