diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f34b1613..00ff51333 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +### Changes +- refactorings #3354 + ### Fixes - do not unnecessarily SELECT folders if there are no operations planned on them #3333 diff --git a/src/chat.rs b/src/chat.rs index b689dceab..856486e41 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -786,7 +786,7 @@ impl ChatId { ); let row = sql .query_row_optional( - query, + &query, paramsv![ self, MessageState::OutPreparing, @@ -3061,7 +3061,7 @@ pub async fn forward_msgs(context: &Context, msg_ids: &[MsgId], chat_id: ChatId) let ids = context .sql .query_map( - format!( + &format!( "SELECT id FROM msgs WHERE id IN({}) ORDER BY timestamp,id", sql::repeat_vars(msg_ids.len()) ), diff --git a/src/contact.rs b/src/contact.rs index 72a5c66df..210cd1be3 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -699,7 +699,7 @@ impl Contact { context .sql .query_map( - format!( + &format!( "SELECT c.id FROM contacts c \ LEFT JOIN acpeerstates ps ON c.addr=ps.addr \ WHERE c.addr NOT IN ({}) @@ -754,7 +754,7 @@ impl Contact { context .sql .query_map( - format!( + &format!( "SELECT id FROM contacts WHERE addr NOT IN ({}) AND id>? diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 5d101ab0a..09bbf4023 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -2008,7 +2008,7 @@ async fn check_verified_properties( let rows = context .sql .query_map( - format!( + &format!( "SELECT c.addr, LENGTH(ps.verified_key_fingerprint) FROM contacts c \ LEFT JOIN acpeerstates ps ON c.addr=ps.addr WHERE c.id IN({}) ", sql::repeat_vars(to_ids.len()) diff --git a/src/ephemeral.rs b/src/ephemeral.rs index 6923f1b9b..cd1ec3942 100644 --- a/src/ephemeral.rs +++ b/src/ephemeral.rs @@ -307,7 +307,7 @@ pub(crate) async fn start_ephemeral_timers_msgids( let count = context .sql .execute( - format!( + &format!( "UPDATE msgs SET ephemeral_timestamp = ? + ephemeral_timer WHERE (ephemeral_timestamp == 0 OR ephemeral_timestamp > ? + ephemeral_timer) AND ephemeral_timer > 0 AND id IN ({})", diff --git a/src/imap.rs b/src/imap.rs index 00e4723cc..7aac6d199 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -910,7 +910,7 @@ impl Imap { context .sql .execute( - format!( + &format!( "DELETE FROM imap WHERE id IN ({})", sql::repeat_vars(row_ids.len()) ), @@ -947,7 +947,7 @@ impl Imap { context .sql .execute( - format!( + &format!( "DELETE FROM imap WHERE id IN ({})", sql::repeat_vars(row_ids.len()) ), @@ -989,7 +989,7 @@ impl Imap { context .sql .execute( - format!( + &format!( "UPDATE imap SET target='' WHERE id IN ({})", sql::repeat_vars(row_ids.len()) ), @@ -1106,7 +1106,7 @@ impl Imap { context .sql .execute( - format!( + &format!( "DELETE FROM imap_markseen WHERE id IN ({})", sql::repeat_vars(rowid_set.len()) ), diff --git a/src/message.rs b/src/message.rs index f3e08824e..a5f944375 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1283,7 +1283,7 @@ pub async fn markseen_msgs(context: &Context, msg_ids: Vec) -> Result<()> let msgs = context .sql .query_map( - format!( + &format!( "SELECT m.id AS id, m.chat_id AS chat_id, diff --git a/src/smtp.rs b/src/smtp.rs index 514423228..1c1ce9d8b 100644 --- a/src/smtp.rs +++ b/src/smtp.rs @@ -593,7 +593,7 @@ async fn send_mdn_msg_id( ); context .sql - .execute(q, rusqlite::params_from_iter(additional_msg_ids)) + .execute(&q, rusqlite::params_from_iter(additional_msg_ids)) .await?; } Ok(()) diff --git a/src/sql.rs b/src/sql.rs index 2706f498d..f38d5d069 100644 --- a/src/sql.rs +++ b/src/sql.rs @@ -331,24 +331,16 @@ impl Sql { } /// Execute the given query, returning the number of affected rows. - pub async fn execute( - &self, - query: impl AsRef, - params: impl rusqlite::Params, - ) -> Result { + pub async fn execute(&self, query: &str, params: impl rusqlite::Params) -> Result { let conn = self.get_conn().await?; - let res = conn.execute(query.as_ref(), params)?; + let res = conn.execute(query, params)?; Ok(res) } /// Executes the given query, returning the last inserted row ID. - pub async fn insert( - &self, - query: impl AsRef, - params: impl rusqlite::Params, - ) -> Result { + pub async fn insert(&self, query: &str, params: impl rusqlite::Params) -> Result { let conn = self.get_conn().await?; - conn.execute(query.as_ref(), params)?; + conn.execute(query, params)?; Ok(conn.last_insert_rowid()) } @@ -357,7 +349,7 @@ impl Sql { /// result of that function. pub async fn query_map( &self, - sql: impl AsRef, + sql: &str, params: impl rusqlite::Params, f: F, mut g: G, @@ -366,8 +358,6 @@ impl Sql { F: FnMut(&rusqlite::Row) -> rusqlite::Result, G: FnMut(rusqlite::MappedRows) -> Result, { - let sql = sql.as_ref(); - let conn = self.get_conn().await?; let mut stmt = conn.prepare(sql)?; let res = stmt.query_map(params, f)?; @@ -385,11 +375,7 @@ impl Sql { } /// Used for executing `SELECT COUNT` statements only. Returns the resulting count. - pub async fn count( - &self, - query: impl AsRef, - params: impl rusqlite::Params, - ) -> anyhow::Result { + pub async fn count(&self, query: &str, params: impl rusqlite::Params) -> anyhow::Result { let count: isize = self.query_row(query, params, |row| row.get(0)).await?; Ok(usize::try_from(count)?) } @@ -404,7 +390,7 @@ impl Sql { /// Execute a query which is expected to return one row. pub async fn query_row( &self, - query: impl AsRef, + query: &str, params: impl rusqlite::Params, f: F, ) -> Result @@ -412,7 +398,7 @@ impl Sql { F: FnOnce(&rusqlite::Row) -> rusqlite::Result, { let conn = self.get_conn().await?; - let res = conn.query_row(query.as_ref(), params, f)?; + let res = conn.query_row(query, params, f)?; Ok(res) } @@ -474,7 +460,7 @@ impl Sql { /// Execute a query which is expected to return zero or one row. pub async fn query_row_optional( &self, - sql: impl AsRef, + sql: &str, params: impl rusqlite::Params, f: F, ) -> anyhow::Result> diff --git a/src/sync.rs b/src/sync.rs index c3e73b477..ee9994b8e 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -199,7 +199,7 @@ impl Context { pub(crate) async fn delete_sync_ids(&self, ids: String) -> Result<()> { self.sql .execute( - format!("DELETE FROM multi_device_sync WHERE id IN ({});", ids), + &format!("DELETE FROM multi_device_sync WHERE id IN ({});", ids), paramsv![], ) .await?;