welds-connections 0.3.6

An async ORM for (postgres, mssql, mysql, sqlite)
docs.rs failed to build welds-connections-0.3.6
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: welds-connections-0.5.0

Welds Connections

This is the common interface used by welds for all Databases.

It allows you to talk to sqlx and tiberius over traits in a simple common way.

Features

  • async for all.
  • Connections are pooled.
  • Transactions for all. (looking at you tiberius)
  • Support for multiple SQL databases (Mssql, MySql, Postgres, Sqlite)
  • Written for ease of development. Simple interface

The Simple interface

/// The common trait for database connections and transactions.
pub trait Client {
    /// Execute a sql command. returns the number of rows that were affected
    async fn execute(&self, sql: &str, params: &[&(dyn Param + Sync)]) -> Result<ExecuteResult>;

    /// Runs SQL and returns a collection of rows from the database.
    async fn fetch_rows(&self, sql: &str, params: &[&(dyn Param + Sync)]) -> Result<Vec<Row>>;

    /// Run several `fetch_rows` command on the same connection in the connection pool
    async fn fetch_many(&self, args: &[Fetch]) -> Result<Vec<Vec<Row>>>;

    // Returns what syntax (dialect) of SQL the backend is expecting
    fn syntax(&self) -> Syntax;
}

Thats it.

Thats All this crate is.

You get this for:

  • MySql and its transactions
  • Postgres and its transactions
  • Sqlite and its transactions
  • Mssql and its transactions

Transactions

You can get a transaction with the TransactStart Trait.


use welds_connections::{Client, TransactStart};
#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    let url = "sqlite://./test.sqlite";
    let client = welds_connections::sqlite::get_conn(url).await?;
    let transaction = client.begin().await?;
    transaction.rollback.await?;
}

Example


use welds_connections::{Client, TransactStart};

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {

    let url = "sqlite://./test.sqlite";
    let client = welds_connections::sqlite::get_conn(url).await?;

    let sql = "SELECT name from people where name like ?";
    let filter = "James%".to_string();
    let rows = client.fetch_rows(sql, &[&filter]).await?;

    for row in rows {
        let name: String = row.get("name").unwrap();
        println!("ROW: {:?}", &name);
    }
}