Crate tide_sqlx[−][src]
A Tide middleware which holds a pool of SQLx database connections, and automatically hands each tide::Request a connection, which may transparently be either a database transaction, or a direct pooled database connection.
By default, transactions are used for all http methods other than GET
and HEAD
.
When using this, use the SQLxRequestExt
extenstion trait to get the connection.
Examples
Basic
use sqlx::Acquire; // Or sqlx::prelude::*; use sqlx::postgres::Postgres; use tide_sqlx::SQLxMiddleware; use tide_sqlx::SQLxRequestExt; let mut app = tide::new(); app.with(SQLxMiddleware::<Postgres>::new("postgres://localhost/a_database").await?); app.at("/").post(|req: tide::Request<()>| async move { let mut pg_conn = req.sqlx_conn::<Postgres>().await; sqlx::query("SELECT * FROM users") .fetch_optional(pg_conn.acquire().await?) .await; Ok("") });
From sqlx PoolOptions
and with ConnectOptions
use log::LevelFilter; use sqlx::{Acquire, ConnectOptions}; // Or sqlx::prelude::*; use sqlx::postgres::{PgConnectOptions, PgPoolOptions, Postgres}; use tide_sqlx::SQLxMiddleware; use tide_sqlx::SQLxRequestExt; let mut connect_opts = PgConnectOptions::new(); connect_opts.log_statements(LevelFilter::Debug); let pg_pool = PgPoolOptions::new() .max_connections(5) .connect_with(connect_opts) .await?; let mut app = tide::new(); app.with(SQLxMiddleware::from(pg_pool)); app.at("/").post(|req: tide::Request<()>| async move { let mut pg_conn = req.sqlx_conn::<Postgres>().await; sqlx::query("SELECT * FROM users") .fetch_optional(pg_conn.acquire().await?) .await; Ok("") });
Why you may want to use this
Database transactions are very useful because they allow easy, assured rollback if something goes wrong. However, transactions incur extra runtime cost which is too expensive to justify for READ operations that do not need this behavior.
In order to allow transactions to be used seamlessly in endpoints, this middleware manages a transaction if one is deemed desirable.
Modules
postgres | postgres Helpers specific to Postgres |
Structs
SQLxMiddleware | This middleware holds a pool of SQLx database connections, and automatically hands each tide::Request a connection, which may transparently be either a database transaction, or a direct pooled database connection. |
Traits
SQLxRequestExt | An extension trait for tide::Request which does proper unwrapping of the connection from |