Module pagination

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

CursorPaginatedResult
Cursor-based paginated result
CursorPagination
Cursor-based pagination for better performance with large datasets
PaginatedResult
Paginated result containing data and pagination metadata
Pagination
Pagination parameters for queries