use criterion::{Criterion, black_box, criterion_group, criterion_main};
use sqlw::{query_qmark as query, schema};
schema!(User "user" {
ID "id",
NAME "name",
AGE "age",
HEIGHT "height",
ACTIVE "active",
});
schema!(Post "post" {
ID "id",
USER_ID "user_id",
TITLE "title",
CONTENT "content",
PUBLISHED "published",
});
fn bench_simple_select(c: &mut Criterion) {
c.bench_function("simple_select", |b| {
b.iter(|| {
let name = black_box("John");
let query = query!(
SELECT User::NAME, User::AGE FROM User::TABLE
WHERE User::NAME = {name}
);
let (sql, args) = query.split();
black_box((sql, args));
});
});
}
fn bench_insert(c: &mut Criterion) {
c.bench_function("insert", |b| {
b.iter(|| {
let name = black_box("John");
let age = black_box(25);
let height = black_box(Some(1.85));
let active = black_box(true);
let query = query!(
INSERT INTO User::TABLE (User::NAME,
User::AGE,
User::HEIGHT,
User::ACTIVE)
VALUES ({name}, {age}, {height}, {active})
);
let (sql, args) = query.split();
black_box((sql, args));
});
});
}
fn bench_update(c: &mut Criterion) {
c.bench_function("update", |b| {
b.iter(|| {
let name = black_box("John");
let age = black_box(30);
let query = query!(
UPDATE User::TABLE
SET User::AGE = {age}
WHERE User::NAME = {name}
);
let (sql, args) = query.split();
black_box((sql, args));
});
});
}
fn bench_delete(c: &mut Criterion) {
c.bench_function("delete", |b| {
b.iter(|| {
let name = black_box("John");
let query = query!(
DELETE FROM User::TABLE
WHERE User::NAME = {name}
);
let (sql, args) = query.split();
black_box((sql, args));
});
});
}
fn bench_complex_join(c: &mut Criterion) {
c.bench_function("complex_join", |b| {
b.iter(|| {
let user_id = black_box(42);
let published = black_box(true);
let query = query!(
SELECT User::NAME,
Post::TITLE,
Post::CONTENT
FROM User::TABLE
INNER JOIN Post::TABLE ON User::ID = Post::USER_ID
WHERE User::ID = {user_id}
AND Post::PUBLISHED = {published}
);
let (sql, args) = query.split();
black_box((sql, args));
});
});
}
criterion_group!(
name = benches;
config = Criterion::default();
targets = bench_simple_select,
bench_insert,
bench_update,
bench_delete,
bench_complex_join
);
criterion_main!(benches);