update code level

This commit is contained in:
lychang
2026-07-21 01:43:16 +08:00
parent 90c493d41b
commit f68a8f880d
2 changed files with 35 additions and 16 deletions

View File

@@ -1,11 +1,29 @@
-- 移除不再使用的扩展列(数据已迁移到 search.db.bak)
-- SQLite 3.35.0+ 支持 ALTER TABLE DROP COLUMN
-- 清理不再使用的扩展列(安全重建方式)
-- 通过重建表来移除列,兼容列已存在或已删除的任意状态
-- 先删除引用这些列的索引
DROP INDEX IF EXISTS idx_albums_cleaned;
ALTER TABLE albums DROP COLUMN tags;
ALTER TABLE albums DROP COLUMN all_words;
ALTER TABLE albums DROP COLUMN person_name_original;
ALTER TABLE albums DROP COLUMN person_name_cleaned;
ALTER TABLE albums DROP COLUMN raw_title;
-- 重建 albums 表,只保留需要的列
CREATE TABLE IF NOT EXISTS albums_v2 (
id TEXT PRIMARY KEY NOT NULL,
title TEXT NOT NULL DEFAULT '',
document TEXT DEFAULT '',
description TEXT,
cover_image_id TEXT,
image_count INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime'))
);
-- 安全复制数据(SELECT 只取确定存在的列)
INSERT OR IGNORE INTO albums_v2 (id, title, document, description, cover_image_id, image_count, created_at)
SELECT id, title,
COALESCE(document, ''),
description,
cover_image_id,
image_count,
created_at
FROM albums;
-- 替换旧表
DROP TABLE IF EXISTS albums;
ALTER TABLE albums_v2 RENAME TO albums;

17
src/cache/mod.rs vendored
View File

@@ -215,22 +215,23 @@ pub async fn refresh_all_caches(
persons_cache: &Arc<RwLock<PersonCache>>,
tags_cache: &Arc<RwLock<TagCache>>,
) {
// 1. 从主库读取相册(含 tags 和 persons 关联)
// 1. 从主库读取相册(tags 和 persons 从 search.db 关联)
if let Ok(albums) = db.get_all_albums().await {
// 批量获取 album → tags 映射
let tag_rows = sqlx::query("SELECT album_id, tag FROM album_tags")
.fetch_all(&db.pool).await.unwrap_or_default();
// 从 search.db 批量获取 album → tags 映射
let tag_rows = sqlx::query(
r#"SELECT at.album_id, t.name FROM album_tags at JOIN tags t ON at.tag_id = t.id"#
).fetch_all(&search_db.pool).await.unwrap_or_default();
let mut album_tags: std::collections::HashMap<String, Vec<String>> = std::collections::HashMap::new();
for r in &tag_rows {
let aid: String = r.get("album_id");
let tag: String = r.get("tag");
let tag: String = r.get("name");
album_tags.entry(aid).or_default().push(tag);
}
// 批量获取 album → persons 映射
// 从 search.db 批量获取 album → persons 映射
let person_rows = sqlx::query(
r#"SELECT pa.album_id, p.name FROM person_albums pa JOIN persons p ON pa.person_id = p.id"#
).fetch_all(&db.pool).await.unwrap_or_default();
r#"SELECT ap.album_id, p.name FROM album_persons ap JOIN persons p ON ap.person_id = p.id"#
).fetch_all(&search_db.pool).await.unwrap_or_default();
let mut album_persons: std::collections::HashMap<String, Vec<String>> = std::collections::HashMap::new();
for r in &person_rows {
let aid: String = r.get("album_id");