extern crate criterion;
extern crate diesel;
extern crate diesel_migrations;
extern crate juniper;
extern crate serde_json;
extern crate wundergraph;
extern crate wundergraph_bench;
extern crate wundergraph_example;
#[macro_use]
extern crate lazy_static;
#[cfg(feature = "postgres")]
type DbConnection = diesel::pg::PgConnection;
#[cfg(feature = "sqlite")]
type DbConnection = diesel::sqlite::SqliteConnection;
#[cfg(not(any(feature = "postgres", feature = "sqlite")))]
compile_error!("At least one feature of \"sqlite\" or \"postgres\" needs to be enabled");
#[path = "../tests/helper.rs"]
mod helper;
use criterion::*;
use diesel::r2d2::{ConnectionManager, PooledConnection};
use wundergraph_bench::Schema;
const QUERIES: &[&str] = &[
r#"query albums_tracks_genre_all {
Albums {
album_id
title
tracks {
track_id
name
genre_id {
name
}
}
}
}"#,
r#"query albums_tracks_genre_some {
Albums(filter: {artist_id: {artist_id: {eq: 127}}}) {
album_id
title
tracks {
track_id
name
genre_id {
name
}
}
}
}"#,
r#"query tracks_media_all {
Tracks {
track_id
name
media_type_id {
name
}
}
}"#,
r#"query tracks_media_some {
Tracks (filter: {composer: {eq: "Kurt Cobain"}}){
track_id
name
album_id {
album_id
title
}
media_type_id {
name
}
}
}"#,
r#"query artists_collaboration {
Artists(filter: {albums: {tracks: {composer: {eq: "Ludwig van Beethoven"}}}})
{
artist_id
name
}
}"#,
r#"query artistByArtistId {
Artists(filter: {artist_id: {eq:3}}) {
artist_id
name
}
}"#,
];
fn query(
query: &str,
schema: &Schema<DbConnection>,
ctx: &PooledConnection<ConnectionManager<DbConnection>>,
) {
let res = helper::execute_query(&schema, &ctx, query);
assert!(res.is_ok());
}
fn bench(c: &mut Criterion) {
let (schema, pool) = helper::get_bench_schema();
let ctx = pool.get().unwrap();
c.bench_function_over_inputs(
"query",
move |b, &&query_string| {
b.iter(|| query(query_string, &schema, &ctx));
},
QUERIES,
);
}
criterion_group!(benches, bench);
criterion_main!(benches);