///|
/// 返回 freelist 中的 trunk 与 leaf 页号,并校验计数与循环。
/// 校验 freelist trunk/leaf、数量和重复引用,返回空闲页号;页号从 1 开始并受页预算限制。
pub fn Database::freelist(self : Database) -> Array[Int] raise SqliteError {
self.freelist_observed((_, _, _) => ())
}
///|
fn Database::freelist_observed(
self : Database,
claim : (Int, PageKind, Int?) -> Unit raise SqliteError,
trace? : InspectionTrace = InspectionTrace::new(),
) -> Array[Int] raise SqliteError {
let cursor = self.freelist_cursor(claim, trace)
while cursor.next() is Some(number) {
cursor.supplied = Some(self.read_page(number))
}
cursor.result
}