# SQLx-Page This library provides cursor based pagination for SQLx. It is build around `sqlx::QueryBuilder`, so it has the same security level as `sqlx::QueryBuilder`. Currently only Postgres is supported. Without too much work, other databases can be added. ## Installation The version follows `sqlx`, i.e., `sqlx-page` 0.5 is compatible with `sqlx` 0.5 ``` sqlx-page = { version = "~0.5", features = ["select your sqlx runtime here", "postgres"] ``` ## Example ``` use sqlx::QueryBuilder; use sqlx_page::Page; async fn some_func() { // ... Some business logic let page = Page::new( // Direction to select rows. // If true, will select rows in the "smaller" direction, // e.g. if your want to sort by the time, // `true` means select rows from the current cursor to the past true, // Size of the page 100, // Use these columns for sorting. // The combination of the columns should uniquely identify a row vec![String::from("row_id")] ); // Create a `sqlx::QueryBuilder` as usual let mut builder = QueryBuilder::new(r#" select row_id, user_name from users where true and "#); // ... Maybe other search conditions // Push and bind the pagination condition: `(row_id < $_)`. // `push_where2..5` are also defined, they are used if your cursor consists of multiple columns page.push_where1(&mut builder, Some(11)); // Push the order by clause: `order by row_id desc` page.push_order_by(&mut builder); // Push the limit clause: `limit 100` page.push_limit(&mut builder); // ... Use the builder as usual } ```