80 lines
2.3 KiB
Rust
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);
|