diff --git a/src/lib.rs b/src/lib.rs index e2dc4ae..03533f4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,8 +6,10 @@ use std::{env, error::Error, fs}; #[derive(Debug, Parser)] #[command(author, version, about)] pub struct Config { - #[arg(help = "Input file path")] - file: String, + #[arg(help = "Target database name")] + db_name: String, + #[arg(short = 'b', long = "backup", help = "Backup execution")] + backup: bool, } type MyResult = Result>; @@ -31,3 +33,29 @@ pub async fn run(config: Config) -> MyResult<()> { Ok(()) } + +async fn execute_query(db: &Pool, queries: Vec) { + // Gererate transaction + let mut tx = db.begin().await.expect("transaction error."); + + for query in queries { + // Execute SQL query + let result = sqlx::query(&query).execute(&mut *tx).await; + + match result { + Ok(_) => {} + Err(e) => { + println!("Database query failed: {}", e); + println!("Failed query: {:?}", &query); + // rollback + tx.rollback().await.expect("Transaction rollback error."); + return; + } + } + } + + // transaction commit + let _ = tx.commit().await.unwrap_or_else(|e| { + println!("{:?}", e); + }); +}