From dbc810d704158e0106b18f2a0442e11e121a533e Mon Sep 17 00:00:00 2001 From: Drew Wells Date: Tue, 26 Nov 2024 11:00:52 -0600 Subject: [PATCH] surface file i/o errors with config and sqlite.db create parent directory, ignoring errors when doing so --- src/database/sqlite.rs | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/database/sqlite.rs b/src/database/sqlite.rs index f2ed513..df44678 100644 --- a/src/database/sqlite.rs +++ b/src/database/sqlite.rs @@ -1,19 +1,29 @@ -use std::io::{Error, ErrorKind}; -use rusqlite::{Connection, Row}; -use crate::database::{Database, DBRawToStruct}; +use crate::database::{DBRawToStruct, Database}; use crate::results::TelemetryData; +use rusqlite::{Connection, Row}; +use std::io::{Error, ErrorKind}; +use std::path::PathBuf; pub struct SQLite { pub connection: Connection, } -pub fn init (database_file : &Option) -> std::io::Result { +pub fn init(database_file: &Option) -> std::io::Result { match database_file { - None => { - Err(Error::new(ErrorKind::Other,"Error setup sqlite invalid database file.")) - } + None => Err(Error::new( + ErrorKind::Other, + "Error setup sqlite invalid database file.", + )), Some(database_file) => { - let connection = Connection::open(database_file); + let mut database_path = PathBuf::from(database_file); + if !database_path.is_absolute() { + database_path = PathBuf::from(std::env::current_dir().unwrap().join(database_file)); + } + + // attempt to create the parent directory and ignore errors if it already exists + let _ = std::fs::create_dir_all(database_path.parent().unwrap()); + + let connection = Connection::open(database_path); match connection { Ok(connection) => { let create_table = connection.execute(