From ada154418fb223e742112e58ef169193e588eafb Mon Sep 17 00:00:00 2001
From: ai_xiaopei <xiaopei@aisim.cn>
Date: Thu, 03 Sep 2026 14:29:28 +0800
Subject: [PATCH] fix(index): GetFileStats 容忍旧库 NULL 指纹(sql.NullInt64),升级后自动补指纹

---
 internal/index/sqlite.go |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/internal/index/sqlite.go b/internal/index/sqlite.go
index 9f8d4c5..043d483 100644
--- a/internal/index/sqlite.go
+++ b/internal/index/sqlite.go
@@ -156,9 +156,15 @@
 	for rows.Next() {
 		var st FileStat
 		var hash sql.NullString
-		if err := rows.Scan(&st.Path, &st.Size, &st.Mtime, &hash); err != nil {
+		var size, mtime sql.NullInt64
+		// 旧库迁移到 v2 后,老行的 size/mtime/content_hash 为 NULL(ALTER ADD COLUMN 不带值)。
+		// 用 Null 类型容忍 NULL:指纹缺失的行在对账时 size/mtime 必然不等,会走
+		// sha256 二次确认并重新写入指纹,实现自愈,不会误判为"未变更"。
+		if err := rows.Scan(&st.Path, &size, &mtime, &hash); err != nil {
 			return nil, err
 		}
+		st.Size = size.Int64
+		st.Mtime = mtime.Int64
 		st.ContentHash = hash.String
 		m[st.Path] = st
 	}

--
Gitblit v1.10.0