Skip to main content

RelayDatabaseAdapter

Trait RelayDatabaseAdapter 

Source
pub trait RelayDatabaseAdapter: DatabaseAdapter {
    // Required method
    fn execute_relay_page<'a>(
        &'a self,
        view: &'a str,
        cursor_column: &'a str,
        after: Option<CursorValue>,
        before: Option<CursorValue>,
        limit: u32,
        forward: bool,
        where_clause: Option<&'a WhereClause>,
        order_by: Option<&'a [OrderByClause]>,
        include_total_count: bool,
    ) -> impl Future<Output = Result<RelayPageResult>> + Send + 'a;
}
Expand description

Database adapter supertrait for adapters that implement Relay cursor pagination.

Only adapters that genuinely support keyset pagination need to implement this trait. Non-implementing adapters carry no relay code at all — no stubs, no flags.

§Implementors

  • PostgresAdapter — full keyset pagination
  • MySqlAdapter — keyset pagination with ? params
  • CachedDatabaseAdapter<A> — delegates to inner A

§Usage

Construct an Executor with Executor::new_with_relay to enable relay query execution. The bound A: RelayDatabaseAdapter is enforced at that call site.

Required Methods§

Source

fn execute_relay_page<'a>( &'a self, view: &'a str, cursor_column: &'a str, after: Option<CursorValue>, before: Option<CursorValue>, limit: u32, forward: bool, where_clause: Option<&'a WhereClause>, order_by: Option<&'a [OrderByClause]>, include_total_count: bool, ) -> impl Future<Output = Result<RelayPageResult>> + Send + 'a

Execute keyset (cursor-based) pagination against a JSONB view.

§Arguments
  • view — SQL view name (will be quoted before use)
  • cursor_column — column used as the pagination key (e.g. pk_user, id)
  • after — forward cursor: return rows where cursor_column > after
  • before — backward cursor: return rows where cursor_column < before
  • limit — row fetch count (pass page_size + 1 to detect hasNextPage)
  • forwardtrue → ASC order; false → DESC (re-sorted ASC via subquery)
  • where_clause — optional user-supplied filter applied after the cursor condition
  • order_by — optional custom sort; cursor column appended as tiebreaker
  • include_total_count — when true, compute the matching row count before LIMIT
§Errors

Returns FraiseQLError::Database on SQL execution failure.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§