Stable cursor pagination, keyset query planning, snapshot guards, and resumable traversal for MoonBit
moon add TangShiJi/moonpageflow@0.1.0let rows = [
@moonpageflow.page_row("event-2", [
("created_at", @moonpageflow.int_value(300L)),
]).unwrap(),
@moonpageflow.page_row("event-1", [
("created_at", @moonpageflow.int_value(300L)),
]).unwrap(),
]
let sort = [
@moonpageflow.sort_field("created_at", direction=@moonpageflow.Descending),
]
let page = @moonpageflow.paginate(
rows,
sort,
@moonpageflow.first_page(limit=20).unwrap(),
snapshot=Some("events-revision-42"),
).unwrap()
for row in @moonpageflow.page_rows(page) {
println(row.id())
}git clone https://github.com/TangShiJi/moonpageflow.git
cd moonpageflow
moon run examples/quickstart| 任务 | API |
|---|---|
| 声明记录和排序 | page_row、sort_field |
| 正向/反向请求 | first_page、last_page |
| 内存参考分页 | paginate、page_rows |
| 数据库条件适配 | build_seek_plan、verify_seek_ids |
| 批处理恢复 | traversal_checkpoint、advance_checkpoint |
| 迁移行为审计 | paginate_offset、audit_traversal |
moon fmt --check
moon check --target native --deny-warn
moon build --target native --deny-warn
moon test --target native --deny-warn
moon check --target wasm-gc --deny-warn
moon build --target wasm-gc --deny-warn
moon test --target wasm-gc --deny-warn
moon coverage analyze
moon package --listpub struct KeyPart {
field : String
value : PageValue
direction : SortDirection
nulls : NullPlacement
} derive(Eq, Debug)pub(all) enum PageErrorKind {
EmptyRowId
DuplicateRowId
EmptySortField
DuplicateSortField
MissingSortValue
InvalidPageSize
TooManySortFields
TooManyRows
InvalidCursor
UnsupportedCursorVersion
CursorChecksumMismatch
CursorSortMismatch
CursorTooLong
SnapshotMismatch
RepeatedCursor
DuplicateTraversalItem
InvalidOffset
} derive(Eq, Debug)pub struct SeekBranch {
equal_prefix : Array[EqualityTerm]
field : String
value : PageValue
comparison : SeekComparison
nulls : NullPlacement
} derive(Eq, Debug)pub struct SortField {
name : String
direction : SortDirection
nulls : NullPlacement
} derive(Eq, Debug)fn TraversalCheckpoint::next_request(self : TraversalCheckpoint, limit : Int, limits? : PageLimits) -> Result[PageRequest, PageError]fn advance_checkpoint(checkpoint : TraversalCheckpoint, page : PageResult) -> Result[TraversalCheckpoint, PageError]fn audit_traversal(observed : Array[PageRow], expected : Array[PageRow], sort : Array[SortField], limits? : PageLimits) -> Result[PaginationAudit, PageError]fn compare_page_values(left : PageValue, right : PageValue, direction : SortDirection, nulls : NullPlacement) -> Intfn compare_row_to_position(row : PageRow, position : PagePosition, sort : Array[SortField]) -> Result[Int, PageError]fn expected_seek_ids(input : Array[PageRow], boundary : PagePosition, sort : Array[SortField], mode : PageMode, limit : Int, limits? : PageLimits) -> Result[Array[String], PageError]fn first_page(limit? : Int, after? : String?, limits? : PageLimits) -> Result[PageRequest, PageError]fn last_page(limit? : Int, before? : String?, limits? : PageLimits) -> Result[PageRequest, PageError]fn page_limits(default_size? : Int, max_size? : Int, max_sort_fields? : Int, max_cursor_chars? : Int, max_rows? : Int) -> PageLimitsfn paginate(input : Array[PageRow], sort : Array[SortField], request : PageRequest, snapshot? : String?, limits? : PageLimits) -> Result[PageResult, PageError]fn paginate_offset(input : Array[PageRow], sort : Array[SortField], offset : Int, limit : Int, limits? : PageLimits) -> Result[OffsetPage, PageError]fn restore_checkpoint(cursor : String?, snapshot : String?, pages : Int, items : Int, seen_ids : Array[String]) -> Result[TraversalCheckpoint, PageError]fn verify_seek_ids(actual_ids : Array[String], input : Array[PageRow], boundary : PagePosition, sort : Array[SortField], mode : PageMode, limit : Int, limits? : PageLimits) -> Result[SeekConformance, PageError]Install
Download zipStable cursor pagination, keyset query planning, snapshot guards, and resumable traversal for MoonBit