process natures and ev spreads

This commit is contained in:
mehbark 2025-07-28 01:03:50 -04:00
parent e87753361d
commit 9c97c3f3ed

View file

@ -17,7 +17,7 @@ fn main() {
if let Err(e) = run(config) {
log::error!("{e}");
process::exit(1);
};
}
}
fn run(
@ -27,7 +27,10 @@ fn run(
}: Config,
) -> Result<(), AppError> {
if fs::exists(&output_file)? {
log::warn!("{output_file:?} already exists: creating the db will probably fail");
log::warn!(
"{} already exists: creating the db will probably fail",
output_file.display()
);
}
// parsing the stats is slow but doing it first avoids creating empty tables
@ -80,41 +83,47 @@ fn create_tables(conn: &mut Connection) -> rusqlite::Result<()> {
"
BEGIN;
CREATE TABLE mon (
name STRING NOT NULL,
name TEXT NOT NULL,
usage REAL,
viability_ceiling REAL
);
CREATE TABLE ability (
mon STRING NOT NULL,
name STRING NOT NULL,
mon TEXT NOT NULL,
name TEXT NOT NULL,
usage REAL NOT NULL
);
CREATE TABLE move (
mon STRING NOT NULL,
name STRING NOT NULL,
mon TEXT NOT NULL,
name TEXT NOT NULL,
usage REAL NOT NULL
);
CREATE TABLE item (
mon STRING NOT NULL,
name STRING NOT NULL,
mon TEXT NOT NULL,
name TEXT NOT NULL,
usage REAL NOT NULL
);
CREATE TABLE tera (
mon STRING NOT NULL,
type STRING NOT NULL,
mon TEXT NOT NULL,
type TEXT NOT NULL,
usage REAL NOT NULL
);
CREATE TABLE team (
mon STRING NOT NULL,
mate STRING NOT NULL,
mon TEXT NOT NULL,
mate TEXT NOT NULL,
usage REAL NOT NULL
);
CREATE TABLE cc (
mon STRING NOT NULL,
opp STRING NOT NULL,
mon TEXT NOT NULL,
opp TEXT NOT NULL,
percentage REAL NOT NULL,
stddev REAL NOT NULL
);
CREATE TABLE spread (
mon TEXT NOT NULL,
nature TEXT NOT NULL,
evs TEXT NOT NULL,
usage REAL NOT NULL
);
COMMIT;
",
)
@ -195,6 +204,14 @@ fn insert_stats(conn: &mut Connection, stats: &Stats) -> rusqlite::Result<()> {
(mon, opp, percentage, stddev),
)?;
}
for (spread, usage) in &data.spreads {
let (nature, evs) = spread.split_once(':').unwrap();
tx.execute(
"INSERT INTO spread VALUES (?1, ?2, ?3, ?4)",
(mon, nature, evs, usage / mon_count),
)?;
}
}
tx.commit()?;
Ok(())
@ -258,4 +275,5 @@ struct Data {
checks_and_counters: HashMap<Box<str>, (f32, f32, f32)>,
#[serde(rename = "usage")]
usage: Option<f32>,
spreads: Counts,
}