Expand description
Pagination support for libsql-orm
This module provides both offset-based and cursor-based pagination for handling large datasets efficiently. Offset-based pagination is simpler but less efficient for large datasets, while cursor-based pagination provides better performance and consistency.
§Offset-based Pagination
use libsql_orm::{Pagination, PaginatedResult, Model};
async fn paginate_users(db: &Database) -> Result<(), Box<dyn std::error::Error>> {
let pagination = Pagination::new(1, 10); // Page 1, 10 items per page
let result: PaginatedResult<User> = User::find_paginated(&pagination, db).await?;
println!("Page {}/{}", result.pagination.page, result.pagination.total_pages.unwrap_or(0));
println!("Total items: {}", result.pagination.total.unwrap_or(0));
for user in result.data {
println!("User: {}", user.name);
}
Ok(())
}
§Cursor-based Pagination
use libsql_orm::{CursorPagination, CursorPaginatedResult};
async fn cursor_paginate(db: &Database) -> Result<(), Box<dyn std::error::Error>> {
let mut cursor_pagination = CursorPagination::new(10);
loop {
// Implement cursor-based pagination logic here
// This would typically use a timestamp or ID as the cursor
break;
}
Ok(())
}
Structs§
- Cursor
Paginated Result - Cursor-based paginated result
- Cursor
Pagination - Cursor-based pagination for better performance with large datasets
- Paginated
Result - Paginated result containing data and pagination metadata
- Pagination
- Pagination parameters for queries