use std::{ffi::OsString, time::Duration}; use clap::Parser; use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; use what2watch::{get_db_pool, import_utils::add_imdb_movies}; #[derive(Debug, Parser)] struct Cli { #[clap(long, short)] pub db_path: OsString, #[clap( long, short, help = "Number of movies to add.", default_value_t = 10_000 )] pub number: u32, } fn main() { let cli = Cli::parse(); let path = cli.db_path; let num = cli.number; let opts = SqliteConnectOptions::new().filename(path).read_only(true); let movie_db = { let rt = tokio::runtime::Builder::new_multi_thread() .enable_all() .build() .unwrap(); rt.block_on( SqlitePoolOptions::new() .idle_timeout(Duration::from_secs(90)) .connect_with(opts), ) .expect("could not open movies db") }; let w2w_db = get_db_pool(); let (dur, rows) = { let rt = tokio::runtime::Builder::new_multi_thread() .enable_all() .build() .unwrap(); rt.block_on(async { let dur = add_imdb_movies(&w2w_db, &movie_db, num).await.unwrap(); let rows: i32 = sqlx::query_scalar("select count(*) from watches") .fetch_one(&w2w_db) .await .unwrap(); w2w_db.close().await; (dur, rows) }) }; println!( "Added {rows} movies in {} seconds ({}ms, {}us)", dur.as_secs_f64(), dur.as_millis(), dur.as_micros() ); }