Files
2026-08-01 16:11:49 +03:00

80 lines
2.3 KiB
Rust

use std::hint::black_box;
use criterion::{Criterion, criterion_group, criterion_main};
use sea_query::*;
#[derive(Debug, Iden)]
pub enum Char {
Table,
Id,
Character,
}
fn vanilla() -> String {
format!(
"SELECT `{}` from `{}` where `character` = {}",
"character",
"character".to_owned(),
"foobar"
)
}
fn select() -> SelectStatement {
Query::select()
.column(Char::Character)
.from(Char::Table)
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.and_where(Expr::col(Char::Character).eq("foobar"))
.to_owned()
}
fn criterion_benchmark(c: &mut Criterion) {
let mut group = c.benchmark_group("value");
group.bench_function("vanilla", |b| b.iter(vanilla));
group.bench_function("select", |b| b.iter(select));
let select = black_box(select());
group.bench_function("select_and_build::mysql", |b| {
b.iter(|| select.build(MysqlQueryBuilder))
});
group.bench_function("select_and_build::pg", |b| {
b.iter(|| select.build(PostgresQueryBuilder))
});
group.bench_function("select_and_build::sqlite", |b| {
b.iter(|| select.build(SqliteQueryBuilder))
});
group.bench_function("select_and_to_string::mysql", |b| {
b.iter(|| select.to_string(MysqlQueryBuilder))
});
group.bench_function("select_and_to_string::pg", |b| {
b.iter(|| select.to_string(PostgresQueryBuilder))
});
group.bench_function("select_and_to_string::sqlite", |b| {
b.iter(|| select.to_string(SqliteQueryBuilder))
});
group.finish();
}
fn cfg() -> Criterion {
Criterion::default()
.configure_from_args()
.measurement_time(std::time::Duration::new(10, 0))
.sample_size(200)
}
criterion_group! {
name = benches;
config = cfg();
targets = criterion_benchmark
}
criterion_main!(benches);