fix(index): GetFileStats 容忍旧库 NULL 指纹(sql.NullInt64),升级后自动补指纹
| | |
| | | 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 |
| | | } |