feat: implement batch queries for improved list performance
Co-authored-by: aider (openai/andrew.openrouter.qwen.qwen3-coder) <aider@aider.chat>
This commit is contained in:
@@ -38,30 +38,22 @@ pub fn mode_list(
|
||||
|
||||
debug!("MAIN: Items: {:?}", items);
|
||||
|
||||
// Collect all item IDs for batch queries
|
||||
let item_ids: Vec<i64> = items.iter().map(|item| item.id.unwrap()).collect();
|
||||
|
||||
// Fetch all tags for all items in a single query
|
||||
let all_tags = crate::db::get_tags_for_items(conn, &item_ids)?;
|
||||
let mut tags_by_item: std::collections::HashMap<i64, Vec<String>> =
|
||||
std::collections::HashMap::new();
|
||||
let mut meta_by_item: std::collections::HashMap<
|
||||
i64,
|
||||
std::collections::HashMap<String, String>,
|
||||
> = std::collections::HashMap::new();
|
||||
|
||||
for item in items.iter() {
|
||||
let item_id = item.id.unwrap();
|
||||
|
||||
let item_tags: Vec<String> = crate::db::get_item_tags(conn, item)?
|
||||
.into_iter()
|
||||
.map(|x| x.name)
|
||||
.collect();
|
||||
tags_by_item.insert(item_id, item_tags);
|
||||
|
||||
let mut item_meta: std::collections::HashMap<String, String> =
|
||||
std::collections::HashMap::new();
|
||||
|
||||
for meta in crate::db::get_item_meta(conn, item)? {
|
||||
item_meta.insert(meta.name.clone(), meta.value);
|
||||
}
|
||||
meta_by_item.insert(item_id, item_meta);
|
||||
|
||||
// Convert Tag structs to just names
|
||||
for (item_id, tags) in all_tags {
|
||||
let tag_names: Vec<String> = tags.into_iter().map(|tag| tag.name).collect();
|
||||
tags_by_item.insert(item_id, tag_names);
|
||||
}
|
||||
|
||||
// Fetch all metadata for all items in a single query
|
||||
let meta_by_item = crate::db::get_meta_for_items(conn, &item_ids)?;
|
||||
|
||||
let mut table = Table::new();
|
||||
table.set_format(*prettytable::format::consts::FORMAT_CLEAN);
|
||||
|
||||
Reference in New Issue
Block a user