use persistant_core::Config;
use persistant_relational::speed::{Environment, SpeedTable, Workload, run};
use persistant_sqlx::{PgBackend, SqliteBackend};
const ITERATIONS: u32 = 100;
#[tokio::main(flavor = "current_thread")]
async fn main() {
let env = Environment::detect(
"cargo run -q --release -p persistant-sqlx --features sqlite,mysql --example rel_speed > bench/sqlx-rel-speed.tsv",
None,
);
let with_digest = |var: &str| Environment {
digest: std::env::var(var).ok(),
..env.clone()
};
let mut table = SpeedTable::default();
let path = std::env::temp_dir().join(format!("persistant-relspeed-{}.db", std::process::id()));
let sqlite = SqliteBackend::open(&path).await.expect("sqlite");
let cfg = Config::new().with("dialect", "sqlite");
table.merge(SpeedTable::from_rows(
run(&sqlite, &cfg, &env, &Workload::ALL, ITERATIONS).await,
));
drop(sqlite);
for ext in ["", "-wal", "-shm"] {
let mut p = path.as_os_str().to_owned();
p.push(ext);
let _ = std::fs::remove_file(p);
}
if let Ok(url) = std::env::var("PERSISTANT_TEST_DATABASE_URL") {
let pg = PgBackend::connect(&url).await.expect("postgres");
let cfg = Config::new().with("dialect", "postgres");
table.merge(SpeedTable::from_rows(
run(
&pg,
&cfg,
&with_digest("PERSISTANT_SPEED_POSTGRES_DIGEST"),
&Workload::ALL,
ITERATIONS,
)
.await,
));
}
#[cfg(feature = "mysql")]
if let Ok(url) = std::env::var("PERSISTANT_TEST_MYSQL_URL") {
let my = persistant_sqlx::MysqlBackend::connect(&url)
.await
.expect("mysql");
let cfg = Config::new().with("dialect", "mysql");
table.merge(SpeedTable::from_rows(
run(
&my,
&cfg,
&with_digest("PERSISTANT_SPEED_MYSQL_DIGEST"),
&Workload::ALL,
ITERATIONS,
)
.await,
));
}
print!("{}", table.to_tsv());
}