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§
Sourcefn ping<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
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.
Sourcefn close<'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,
Close all connections and release pool resources.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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<'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().
Sourcefn 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 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.
Sourcefn 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<'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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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,
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".