refactor(sql): add query_map_vec()

This also replaces some cases where flatten()
was used, effectively ignoring the errors.
This commit is contained in:
link2xt
2025-10-24 00:58:58 +00:00
committed by l
parent 45a1d81805
commit 5f3948b462
16 changed files with 83 additions and 203 deletions

View File

@@ -1095,7 +1095,7 @@ impl Context {
pub async fn get_fresh_msgs(&self) -> Result<Vec<MsgId>> {
let list = self
.sql
.query_map(
.query_map_vec(
concat!(
"SELECT m.id",
" FROM msgs m",
@@ -1113,13 +1113,6 @@ impl Context {
),
(MessageState::InFresh, time()),
|row| row.get::<_, MsgId>(0),
|rows| {
let mut list = Vec::new();
for row in rows {
list.push(row?);
}
Ok(list)
},
)
.await?;
Ok(list)
@@ -1152,7 +1145,7 @@ impl Context {
let list = self
.sql
.query_map(
.query_map_vec(
"SELECT m.id
FROM msgs m
LEFT JOIN contacts ct
@@ -1172,13 +1165,6 @@ impl Context {
let msg_id: MsgId = row.get(0)?;
Ok(msg_id)
},
|rows| {
let mut list = Vec::new();
for row in rows {
list.push(row?);
}
Ok(list)
},
)
.await?;
Ok(list)
@@ -1219,7 +1205,7 @@ impl Context {
let list = if let Some(chat_id) = chat_id {
self.sql
.query_map(
.query_map_vec(
"SELECT m.id AS id
FROM msgs m
LEFT JOIN contacts ct
@@ -1231,13 +1217,6 @@ impl Context {
ORDER BY m.timestamp,m.id;",
(chat_id, str_like_in_text),
|row| row.get::<_, MsgId>("id"),
|rows| {
let mut ret = Vec::new();
for id in rows {
ret.push(id?);
}
Ok(ret)
},
)
.await?
} else {
@@ -1252,7 +1231,7 @@ impl Context {
// According to some tests, this limit speeds up eg. 2 character searches by factor 10.
// The limit is documented and UI may add a hint when getting 1000 results.
self.sql
.query_map(
.query_map_vec(
"SELECT m.id AS id
FROM msgs m
LEFT JOIN contacts ct
@@ -1267,13 +1246,6 @@ impl Context {
ORDER BY m.id DESC LIMIT 1000",
(str_like_in_text,),
|row| row.get::<_, MsgId>("id"),
|rows| {
let mut ret = Vec::new();
for id in rows {
ret.push(id?);
}
Ok(ret)
},
)
.await?
};