///|
pub(all) struct Row {
rowid : Int64
values : Array[Value]
page_number : Int
} derive(Debug)
///|
pub extend Row with @debug.Debug::{to_repr}
///|
fn page_varint(
bytes : Bytes,
offset : Int,
usable : Int,
) -> (UInt64, Int) raise SqliteError {
if offset < 0 || offset >= usable {
raise Invalid("cell varint 起点越界")
}
let result = decode_varint(bytes, offset)
if result.1 > usable - offset {
raise Invalid("cell varint 跨越页面保留空间")
}
result
}
///|
/// 以 rowid 顺序读取普通表;保留首版接口与原始存储值语义。
pub fn Database::read_table(
self : Database,
root : Int,
limit? : Int = self.limits.max_rows,
) -> Array[Row] raise SqliteError {
let page = self.page(root)
if page.kind == IndexLeaf || page.kind == IndexInterior {
raise Unsupported(
"该表使用 index B-tree;请使用 table_records 读取原始记录",
)
}
self
.read_btree(root, limit~)
.map(record => {
rowid: record.rowid.unwrap(),
values: record.values,
page_number: record.page_number,
})
}