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", so this trait is not object safe.

Implementors§