Skip to main content

DatabaseAdapter

Trait DatabaseAdapter 

Source
pub trait DatabaseAdapter:
    Send
    + Sync
    + 'static {
Show 15 methods // Required methods fn name(&self) -> &'static str; fn ping<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn close<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn create_table<'life0, 'life1, 'async_trait>( &'life0 self, schema: &'life1 TableSchema, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn drop_table<'life0, 'life1, 'async_trait>( &'life0 self, table: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn table_exists<'life0, 'life1, 'async_trait>( &'life0 self, table: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn insert<'life0, 'life1, 'async_trait>( &'life0 self, table: &'life1 str, row: Row, ) -> Pin<Box<dyn Future<Output = Result<Row>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn insert_many<'life0, 'life1, 'async_trait>( &'life0 self, table: &'life1 str, rows: Vec<Row>, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn find<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<Vec<Row>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn find_one<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<Option<Row>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn update<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn delete<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn count<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn execute_raw<'life0, 'life1, 'async_trait>( &'life0 self, sql: &'life1 str, bindings: Vec<Value>, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn query_raw<'life0, 'life1, 'async_trait>( &'life0 self, sql: &'life1 str, bindings: Vec<Value>, ) -> Pin<Box<dyn Future<Output = Result<Vec<Row>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait;
}
Expand description

Async database adapter — the interface every backend must implement.

All methods are async. Use SyncAdapter to run them in a blocking context without managing a Tokio runtime yourself.

You typically interact with adapters indirectly through Repository, but you can call adapter methods directly for raw queries or schema ops that the repository doesn’t expose.

Required Methods§

Source

fn name(&self) -> &'static str

Human-readable backend name, e.g. "postgres", "mongo".

Source

fn ping<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Ping the server — cheapest possible health check.

Source

fn close<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Close all connections and release pool resources.

Source

fn create_table<'life0, 'life1, 'async_trait>( &'life0 self, schema: &'life1 TableSchema, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Create the table / collection described by schema if it does not exist.

For SQL backends this emits CREATE TABLE IF NOT EXISTS plus any index statements. For MongoDB it calls createCollection then creates declared indexes.

Source

fn drop_table<'life0, 'life1, 'async_trait>( &'life0 self, table: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Drop the table / collection. Irreversible.

Source

fn table_exists<'life0, 'life1, 'async_trait>( &'life0 self, table: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Return true if the table / collection exists.

Source

fn insert<'life0, 'life1, 'async_trait>( &'life0 self, table: &'life1 str, row: Row, ) -> Pin<Box<dyn Future<Output = Result<Row>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Insert one row and return it with any database-generated fields populated (e.g. auto-increment IDs, DEFAULT expressions).

Postgres uses RETURNING *. MySQL re-fetches via LAST_INSERT_ID().

Source

fn insert_many<'life0, 'life1, 'async_trait>( &'life0 self, table: &'life1 str, rows: Vec<Row>, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Insert multiple rows in a single transaction. Returns the count inserted.

Source

fn find<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<Vec<Row>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Execute the SELECT described by query and return all matching rows.

Source

fn find_one<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<Option<Row>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Execute the SELECT described by query and return the first row if any.

Source

fn update<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Execute the UPDATE described by query. Returns the number of rows affected.

Source

fn delete<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Execute the DELETE described by query. Returns the number of rows deleted.

Source

fn count<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 QueryBuilder, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Count rows matching query.

Source

fn execute_raw<'life0, 'life1, 'async_trait>( &'life0 self, sql: &'life1 str, bindings: Vec<Value>, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Execute a raw SQL string (or JSON command for MongoDB) with positional parameter bindings. Returns the number of rows affected.

Use this when the query builder cannot express what you need.

Source

fn query_raw<'life0, 'life1, 'async_trait>( &'life0 self, sql: &'life1 str, bindings: Vec<Value>, ) -> Pin<Box<dyn Future<Output = Result<Vec<Row>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Execute a raw SQL string with positional bindings and return the result rows.

Dyn Compatibility§

This trait is dyn compatible.

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

Implementors§