diff --git a/src/chat.rs b/src/chat.rs index d51aa6d85..60ce50776 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -3049,7 +3049,7 @@ pub async fn forward_msgs(context: &Context, msg_ids: &[MsgId], chat_id: ChatId) .query_map( format!( "SELECT id FROM msgs WHERE id IN({}) ORDER BY timestamp,id", - sql::repeat_vars(msg_ids.len())? + sql::repeat_vars(msg_ids.len()) ), rusqlite::params_from_iter(msg_ids), |row| row.get::<_, MsgId>(0), diff --git a/src/contact.rs b/src/contact.rs index cd8406929..de82debbf 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -706,7 +706,7 @@ impl Contact { AND (iif(c.name='',c.authname,c.name) LIKE ? OR c.addr LIKE ?) \ AND (1=? OR LENGTH(ps.verified_key_fingerprint)!=0) \ ORDER BY LOWER(iif(c.name='',c.authname,c.name)||c.addr),c.id;", - sql::repeat_vars(self_addrs.len())? + sql::repeat_vars(self_addrs.len()) ), rusqlite::params_from_iter(params_iter(&self_addrs).chain(params_iterv![ ContactId::LAST_SPECIAL, @@ -755,7 +755,7 @@ impl Contact { AND origin>=? AND blocked=0 ORDER BY LOWER(iif(name='',authname,name)||addr),id;", - sql::repeat_vars(self_addrs.len())? + sql::repeat_vars(self_addrs.len()) ), rusqlite::params_from_iter(params_iter(&self_addrs).chain(params_iterv![ ContactId::LAST_SPECIAL, diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 0be5ff53e..7b644df39 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -1967,7 +1967,7 @@ async fn create_adhoc_grp_id(context: &Context, member_ids: &[ContactId]) -> Res let member_cs = context.get_primary_self_addr().await?.to_lowercase(); let query = format!( "SELECT addr FROM contacts WHERE id IN({}) AND id!=?", - sql::repeat_vars(member_ids.len())? + sql::repeat_vars(member_ids.len()) ); let mut params = Vec::new(); params.extend_from_slice(member_ids); @@ -2065,7 +2065,7 @@ async fn check_verified_properties( 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())? + sql::repeat_vars(to_ids.len()) ), rusqlite::params_from_iter(to_ids), |row| { diff --git a/src/ephemeral.rs b/src/ephemeral.rs index 565dd8e00..3fc251b15 100644 --- a/src/ephemeral.rs +++ b/src/ephemeral.rs @@ -315,7 +315,7 @@ pub(crate) async fn start_ephemeral_timers_msgids( "UPDATE msgs SET ephemeral_timestamp = ? + ephemeral_timer WHERE (ephemeral_timestamp == 0 OR ephemeral_timestamp > ? + ephemeral_timer) AND ephemeral_timer > 0 AND id IN ({})", - sql::repeat_vars(msg_ids.len())? + sql::repeat_vars(msg_ids.len()) ), rusqlite::params_from_iter( std::iter::once(&now as &dyn crate::ToSql) diff --git a/src/imap.rs b/src/imap.rs index 088e6bec9..64736dbc5 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -912,7 +912,7 @@ impl Imap { .execute( format!( "DELETE FROM imap WHERE id IN ({})", - sql::repeat_vars(row_ids.len())? + sql::repeat_vars(row_ids.len()) ), rusqlite::params_from_iter(row_ids), ) @@ -949,7 +949,7 @@ impl Imap { .execute( format!( "DELETE FROM imap WHERE id IN ({})", - sql::repeat_vars(row_ids.len())? + sql::repeat_vars(row_ids.len()) ), rusqlite::params_from_iter(row_ids), ) @@ -991,7 +991,7 @@ impl Imap { .execute( format!( "UPDATE imap SET target='' WHERE id IN ({})", - sql::repeat_vars(row_ids.len())? + sql::repeat_vars(row_ids.len()) ), rusqlite::params_from_iter(row_ids), ) @@ -1103,7 +1103,7 @@ impl Imap { .execute( format!( "DELETE FROM imap_markseen WHERE id IN ({})", - sql::repeat_vars(rowid_set.len())? + sql::repeat_vars(rowid_set.len()) ), rusqlite::params_from_iter(rowid_set), ) diff --git a/src/job.rs b/src/job.rs index 65c4b1e73..20856eef0 100644 --- a/src/job.rs +++ b/src/job.rs @@ -399,7 +399,7 @@ async fn kill_ids(context: &Context, job_ids: &[u32]) -> Result<()> { } let q = format!( "DELETE FROM jobs WHERE id IN({})", - sql::repeat_vars(job_ids.len())? + sql::repeat_vars(job_ids.len()) ); context .sql diff --git a/src/message.rs b/src/message.rs index c2b4d6b8e..b13d5b9e1 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1296,7 +1296,7 @@ pub async fn markseen_msgs(context: &Context, msg_ids: Vec) -> Result<()> c.blocked AS blocked FROM msgs m LEFT JOIN chats c ON c.id=m.chat_id WHERE m.id IN ({}) AND m.chat_id>9", - sql::repeat_vars(msg_ids.len())? + sql::repeat_vars(msg_ids.len()) ), rusqlite::params_from_iter(&msg_ids), |row| { diff --git a/src/sql.rs b/src/sql.rs index 96162fc56..2706f498d 100644 --- a/src/sql.rs +++ b/src/sql.rs @@ -843,10 +843,10 @@ async fn prune_tombstones(sql: &Sql) -> Result<()> { /// /// Use this together with [`rusqlite::ParamsFromIter`] to use dynamically generated /// parameter lists. -pub fn repeat_vars(count: usize) -> Result { +pub fn repeat_vars(count: usize) -> String { let mut s = "?,".repeat(count); s.pop(); // Remove trailing comma - Ok(s) + s } #[cfg(test)]