```Cargo.toml
arel = { version = "0.2", features = ["runtime-tokio", "tls-rustls", "sqlite"] } ```
```rust use arel::prelude::*;
struct User {
#[arel(primarykey)]
id: i64,
name: String,
expiredat: Option
// init db from Environment std::env::setvar("DATABASEURL", "sqlite::memory:"); // or init db from code arel::visitor::getorinit(|| Box::pin(async { arel::DatabasePoolOptions::new().max_connections(5).connect("sqlite::memory:").await })).await?;
// total count let count = User::query().selectsql("COUNT(*)").fetchcount().await?; println!("total: {}", count);
// create let mut activeuser = ArelActiveUser { name: Set("n1"), ..Default::default() }; let ret = activeuser.save().await?; println!("{}", ret.rows_affected());
// select let user: User = User::query().r#where("id", 1).fetchoneas().await?; let activeuser: ArelActiveUser = user.into();
let user: ArelUser = User::query().r#where("id", 1).fetchoneas().await?; let activeuser: ArelActiveUser = user.into();
let uesrs: Vec
// update let user: User = User::query().fetchoneas().await?; let mut activeuser: ArelActiveUser = user.into(); activeuser.name.set("n-1"); let ret = activeuser.save().await?; println!("{}", ret.rowsaffected());
// delete let ret = activeuser.destroy().await?; println!("{}", ret.rowsaffected()); ```
select
rust
User::query().select(vec!(["id", "name"])).fetch;
where
rust
let sql = User::query().r#where("name", "n1").r#where("id", 1).to_sql();
// where_not
let sql = User::query().where_not(id: vec![1, 2, 3]).to_sql();
// where_range
let sql = User::query().where_range("age", 18..25).to_sql;
joins
rust
let sql = User::query().join::<Wallet>(arel::JoinType::InnerJoin).to_sql();
let sql = User::query().join_sql("INNER JOIN wallet on user.id = wallet.user_id").to_sql();
lock
rust
let sql = User::query().r#where("name", "n1").lock().to_sql();
group & having
rust
let sql = User::query().group(vec!["name"]).having("age", 18..).to_sql();
order
rust
let sql = User::query().order("created_at", arel::SortType::Desc).to_sql();
let sql = User::query().order_asc().to_sql();
let sql = User::query().order_desc().to_sql();
limit & offset
rust
let sql = User::query().limit(10).to_sql();
let sql = User::query().offset(10)();
let sql = User::query().paginate(1, 10).to_sql();
transaction
rust
User::with_transaction(|tx| {
Box::pin(async move {
for entry in 1i32..=100 {
sqlx::query("INSERT INTO user (name) VALUES ($1)")
.bind(format!("name-{}", entry))
.bind("Admin")
.execute(tx.as_mut())
.await?;
}
Ok(None)
})
})
.await?;