From 9c97c3f3ed721ef9e626fa92e01ffb2507e818dc Mon Sep 17 00:00:00 2001 From: mehbark Date: Mon, 28 Jul 2025 01:03:50 -0400 Subject: [PATCH] process natures and ev spreads --- src/main.rs | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index d7fe2f4..5c84d90 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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, (f32, f32, f32)>, #[serde(rename = "usage")] usage: Option, + spreads: Counts, }