Database

Struct Database 

Source
pub struct Database { /* private fields */ }
Expand description

Represents a pool of database connections.

This struct provides a thread-safe wrapper around a connection pool, allowing multiple parts of the application to share database connections efficiently. Supports runtime backend selection between PostgreSQL and SQLite.

§Thread Safety

The Database struct is Clone and can be safely shared between threads. Each clone references the same underlying connection pool.

Implementations§

Source§

impl Database

Source

pub fn new(connection_string: &str, database_name: &str, max_size: u32) -> Self

Creates a new database connection pool with automatic backend detection.

The backend is detected from the connection string:

  • postgres:// or postgresql:// -> PostgreSQL
  • sqlite://, file paths, or :memory: -> SQLite
§Arguments
  • connection_string - The database connection URL or path
  • database_name - The database name (used for PostgreSQL, ignored for SQLite)
  • max_size - Maximum number of connections in the pool
§Panics

Panics if the connection pool cannot be created.

Source

pub fn new_with_schema( connection_string: &str, database_name: &str, max_size: u32, schema: Option<&str>, ) -> Self

Creates a new database connection pool with optional schema support.

The backend is detected from the connection string. Schema support is only effective for PostgreSQL; the schema parameter is stored but ignored for SQLite.

§Arguments
  • connection_string - The database connection URL or path
  • database_name - The database name (used for PostgreSQL, ignored for SQLite)
  • max_size - Maximum number of connections in the pool
  • schema - Optional schema name for PostgreSQL multi-tenant isolation
§Panics

Panics if connection pool creation fails or if the schema name is invalid. Use try_new_with_schema for fallible construction.

Source

pub fn try_new_with_schema( connection_string: &str, _database_name: &str, max_size: u32, schema: Option<&str>, ) -> Result<Self, DatabaseError>

Creates a new database connection pool with optional schema support.

This is the fallible version of new_with_schema.

§Arguments
  • connection_string - The database connection URL or path
  • database_name - The database name (used for PostgreSQL, ignored for SQLite)
  • max_size - Maximum number of connections in the pool
  • schema - Optional schema name for PostgreSQL multi-tenant isolation
§Errors

Returns an error if:

  • The schema name is invalid (SQL injection prevention)
  • The connection pool cannot be created
Source

pub fn backend(&self) -> BackendType

Returns the detected backend type.

Source

pub fn schema(&self) -> Option<&str>

Returns the schema name if set.

Source

pub fn pool(&self) -> AnyPool

Returns a clone of the connection pool.

Source

pub fn get_connection(&self) -> AnyPool

Alias for pool() for backward compatibility.

Source

pub fn close(&self)

Closes the connection pool, releasing all database connections.

After calling this method, all current and future attempts to get connections from the pool will fail immediately. This should be called when shutting down to ensure connections are properly released back to the database server.

§Example
let db = Database::new("postgres://localhost/mydb", "mydb", 10)?;
// ... use database ...
db.close(); // Release all connections
Source

pub async fn run_migrations(&self) -> Result<(), String>

Runs pending database migrations for the appropriate backend.

This method detects the backend type and runs the corresponding migrations.

Source

pub async fn setup_schema(&self, schema: &str) -> Result<(), String>

Sets up the PostgreSQL schema for multi-tenant isolation.

Creates the schema if it doesn’t exist and runs migrations within it. Returns an error if called on a SQLite backend or if the schema name is invalid (to prevent SQL injection).

§Security

Schema names are validated to prevent SQL injection attacks. Only alphanumeric characters and underscores are allowed.

Source

pub async fn get_connection_with_schema( &self, ) -> Result<Object<PgManager>, PoolError<Error>>

Gets a PostgreSQL connection with the schema search path set.

For PostgreSQL, this sets the search path to the configured schema. For SQLite, this is a no-op and returns an error.

§Security

Schema names are validated before use in SQL to prevent injection attacks.

Source

pub async fn get_postgres_connection( &self, ) -> Result<Object<PgManager>, PoolError<Error>>

Gets a PostgreSQL connection.

Returns an error if this is a SQLite backend.

Source

pub async fn get_sqlite_connection( &self, ) -> Result<Object<SqliteManager>, PoolError<Error>>

Gets a SQLite connection.

Returns an error if this is a PostgreSQL backend.

Trait Implementations§

Source§

impl Clone for Database

Source§

fn clone(&self) -> Database

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Database

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> AggregateExpressionMethods for T

Source§

fn aggregate_distinct(self) -> Self::Output
where Self: DistinctDsl,

DISTINCT modifier for aggregate functions Read more
Source§

fn aggregate_all(self) -> Self::Output
where Self: AllDsl,

ALL modifier for aggregate functions Read more
Source§

fn aggregate_filter<P>(self, f: P) -> Self::Output
where P: AsExpression<Bool>, Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,

Add an aggregate function filter Read more
Source§

fn aggregate_order<O>(self, o: O) -> Self::Output
where Self: OrderAggregateDsl<O>,

Add an aggregate function order Read more
§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoSql for T

Source§

fn into_sql<T>(self) -> Self::Expression

Convert self to an expression for Diesel’s query builder. Read more
Source§

fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
where &'a Self: AsExpression<T>, T: SqlType + TypedExpressionType,

Convert &self to an expression for Diesel’s query builder. Read more
§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WindowExpressionMethods for T

Source§

fn over(self) -> Self::Output
where Self: OverDsl,

Turn a function call into a window function call Read more
Source§

fn window_filter<P>(self, f: P) -> Self::Output
where P: AsExpression<Bool>, Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,

Add a filter to the current window function Read more
Source§

fn partition_by<E>(self, expr: E) -> Self::Output
where Self: PartitionByDsl<E>,

Add a partition clause to the current window function Read more
Source§

fn window_order<E>(self, expr: E) -> Self::Output
where Self: OrderWindowDsl<E>,

Add a order clause to the current window function Read more
Source§

fn frame_by<E>(self, expr: E) -> Self::Output
where Self: FrameDsl<E>,

Add a frame clause to the current window function Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more