Skip to main content

Crate opensqlany

Crate opensqlany 

Source
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 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

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.
PageStore
An SA17 page-store opened from disk.
PageTrailer
Parsed view of the 12-byte trailer at offsets 0xFF0..0xFFB.
Pages
Iterator returned by PageStore::pages.
SlotDirectory
Decoded slot directory.
SlottedPage
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.
PageType
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.

Type Aliases§

Result
Convenience result type aliased to Error.