An async ORM written in rust using sqlx and tiberius.
# 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
```rust
/// 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;
/// Runs SQL and returns a collection of rows from the database.
async fn fetch_rows(&self, sql: &str, params: &[&(dyn Param + Sync)]) -> Result>;
/// Run several `fetch_rows` command on the same connection in the connection pool
async fn fetch_many(&self, args: &[Fetch]) -> Result>>;
// 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.
```rust
use welds_connections::{Client, TransactStart};
#[tokio::main]
async fn main() -> std::result::Result<(), Box> {
let url = "sqlite://./test.sqlite";
let client = welds_connections::sqlite::get_conn(url).await?;
let transaction = client.begin().await?;
transaction.rollback.await?;
}
```
## Example
```rust
use welds_connections::{Client, TransactStart};
#[tokio::main]
async fn main() -> std::result::Result<(), Box> {
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);
}
}
```