6 releases
Uses new Rust 2024
new 0.3.0 | Jun 21, 2025 |
---|---|
0.2.2 | Jun 21, 2025 |
0.1.1 | Jun 20, 2025 |
0.1.0 | Dec 30, 2024 |
#970 in Database interfaces
29 downloads per month
160KB
5K
SLoC
qraft
qraft
is a lightweight SQL query builder for Rust. It provides a fluent API
for assembling select
, insert
, update
and delete
statements and
supports parameter binding out of the box. When the optional sqlx
features
are enabled, queries can be executed directly against a database.
Features
-
Compose complex queries using a builder style API
-
Support for PostgreSQL, MySQL and SQLite dialects
-
Integration with
sqlx
for executing queries -
Helper functions to embed raw SQL fragments or sub‑queries
-
Optional features for
time
,chrono
,uuid
andserde_json
bindings
Installation
Add qraft
to your Cargo.toml
and enable the dialect features you need:
[dependencies]
qraft = { version = "0.1.0", features = ["postgres", "chrono"] }
Example
use qraft::{Builder, Postgres};
let mut query = Builder::table("users");
query.select(["id", "username"]).where_eq("id", 1);
let sql = query.to_sql::<Postgres>();
assert_eq!("select \"id\", \"username\" from \"users\" where \"id\" = $1", sql);
Joins
use qraft::{Builder, Postgres};
let mut query = Builder::table("users");
query
.join("contacts", "users.id", "=", "contacts.user_id")
.join("orders", "users.id", '=', "orders.user_id")
.select(["users.*", "contacts.phone", "orders.price"]);
let sql = query.to_sql::<Postgres>();
assert_eq!(
r#"select "users".*, "contacts"."phone", "orders"."price" from "users" inner join "contacts" on "users"."id" = "contacts"."user_id" inner join "orders" on "users"."id" = "orders"."user_id""#,
sql,
);
Aggregates
let mut query = Builder::table("users");
query.where_eq("id", 1).select_avg("price as avg_price");
let sql = query.to_sql::<Postgres>();
assert_eq!(r#"select avg("price") as "avg_price" from "users" where "id" = $1"#, sql);
Inserts
let mut builder = Builder::table("users");
let insert_sql = builder
.inserting()
.values_with(|row| {
row.field("id", 1).field("username", "ovior");
})
.to_sql::<Postgres>();
assert_eq!(
r#"insert into "users" ("id", "username") values ($1, $2)"#,
insert_sql,
);
Exists Subquery
let mut query = Builder::new();
query.select_exists(|b| {
b.select_one().from("users").where_eq("id", 1);
});
let sql = query.to_sql::<Postgres>();
assert_eq!(
r#"select exists (select 1 from "users" where "id" = $1) as "exists""#,
sql,
);
License
This project is released under the MIT License.
Dependencies
~1–15MB
~186K SLoC