diff --git a/Cargo.lock b/Cargo.lock index a101b248..b4c2857a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -926,9 +926,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.20.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d31059f22935e6c31830db5249ba2b7ecd54fd73a9909286f0a67aa55c2fbd" +checksum = "2f6332d94daa84478d55a6aa9dbb3b305ed6500fb0cb9400cb9e1525d0e0e188" dependencies = [ "cc", "pkg-config", @@ -1518,9 +1518,9 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.24.2" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38ee71cbab2c827ec0ac24e76f82eca723cee92c509a65f67dee393c25112" +checksum = "48381bf52627e7b0e02c4c0e4c0c88fc1cf2228a2eb7461d9499b1372399f1da" dependencies = [ "bitflags", "fallible-iterator", diff --git a/Cargo.toml b/Cargo.toml index da00d7f7..a016024a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,7 +33,7 @@ dotenv = "0.15.0" sodiumoxide = "0.2.6" [dependencies.rusqlite] -version = "0.24" +version = "0.25" features = ["bundled"] [dependencies.rocket_contrib] diff --git a/src/command/history.rs b/src/command/history.rs index af8aef7d..05aed4b9 100644 --- a/src/command/history.rs +++ b/src/command/history.rs @@ -3,7 +3,7 @@ use std::env; use eyre::Result; use structopt::StructOpt; -use crate::local::database::{Database, QueryParam}; +use crate::local::database::Database; use crate::local::history::History; #[derive(StructOpt)] @@ -96,12 +96,11 @@ impl Cmd { let history = match params { (false, false) => db.list()?, - (true, false) => db.query(QUERY_SESSION, &[QueryParam::Text(session)])?, - (false, true) => db.query(QUERY_DIR, &[QueryParam::Text(cwd)])?, - (true, true) => db.query( - QUERY_SESSION_DIR, - &[QueryParam::Text(cwd), QueryParam::Text(session)], - )?, + (true, false) => db.query(QUERY_SESSION, &[session.as_str()])?, + (false, true) => db.query(QUERY_DIR, &[cwd.as_str()])?, + (true, true) => { + db.query(QUERY_SESSION_DIR, &[cwd.as_str(), session.as_str()])? + } }; print_list(&history); diff --git a/src/local/database.rs b/src/local/database.rs index cba7142c..ad7078e5 100644 --- a/src/local/database.rs +++ b/src/local/database.rs @@ -4,14 +4,10 @@ use std::path::Path; use eyre::Result; use rusqlite::{params, Connection}; -use rusqlite::{Transaction, NO_PARAMS}; +use rusqlite::{Params, Transaction}; use super::history::History; -pub enum QueryParam { - Text(String), -} - pub trait Database { fn save(&mut self, h: &History) -> Result<()>; fn save_bulk(&mut self, h: &[History]) -> Result<()>; @@ -21,7 +17,7 @@ pub trait Database { fn range(&self, from: chrono::DateTime, to: chrono::DateTime) -> Result>; - fn query(&self, query: &str, params: &[QueryParam]) -> Result>; + fn query(&self, query: &str, params: impl Params) -> Result>; fn update(&self, h: &History) -> Result<()>; fn history_count(&self) -> Result; @@ -71,7 +67,7 @@ impl Sqlite { unique(timestamp, cwd, command) )", - NO_PARAMS, + [], )?; Ok(()) @@ -105,16 +101,6 @@ impl Sqlite { } } -impl rusqlite::ToSql for QueryParam { - fn to_sql(&self) -> Result, rusqlite::Error> { - use rusqlite::types::{ToSqlOutput, Value}; - - match self { - Self::Text(s) => Ok(ToSqlOutput::Owned(Value::Text(s.clone()))), - } - } -} - impl Database for Sqlite { fn save(&mut self, h: &History) -> Result<()> { debug!("saving history to sqlite"); @@ -197,7 +183,7 @@ impl Database for Sqlite { Ok(history_iter.filter_map(Result::ok).collect()) } - fn query(&self, query: &str, params: &[QueryParam]) -> Result> { + fn query(&self, query: &str, params: impl Params) -> Result> { let mut stmt = self.conn.prepare(query)?; let history_iter = stmt.query_map(params, |row| history_from_sqlite_row(None, row))?; @@ -208,7 +194,7 @@ impl Database for Sqlite { fn prefix_search(&self, query: &str) -> Result> { self.query( "select * from history where command like ?1 || '%' order by timestamp asc", - &[QueryParam::Text(query.to_string())], + &[query], ) }