This commit is contained in:
dzc committed 2026-08-31 15:09:38 +08:00
1 parent f6b37348c4
commit 917f03bc58
61 files changed
+4233 -367

No files matched your search

@@ -351,6 +351,41 @@ abstract class DatabaseMigration {
}
});
/// 版本12为本地人脸增加质量诊断结果;全部字段可空或带默认值,不影响历史识别数据。
static Migration migration11To12 = Migration(11, 12, (database) async {
final columns = await database.rawQuery('PRAGMA table_info(face)');
final names = columns.map((column) => column['name']).toSet();
if (!names.contains('qualityScore')) {
await database.execute('ALTER TABLE face ADD COLUMN qualityScore REAL');
}
if (!names.contains('qualityStatus')) {
await database.execute(
"ALTER TABLE face ADD COLUMN qualityStatus TEXT NOT NULL DEFAULT 'pending'",
);
}
if (!names.contains('qualityCheckedAt')) {
await database.execute(
'ALTER TABLE face ADD COLUMN qualityCheckedAt TEXT',
);
}
if (!names.contains('qualityErrorCode')) {
await database.execute(
'ALTER TABLE face ADD COLUMN qualityErrorCode INTEGER',
);
}
await database.execute(
"UPDATE face SET qualityStatus = 'pending' WHERE qualityStatus IS NULL OR qualityStatus NOT IN ('pending', 'detected', 'failed')",
);
// 项目现有 DateTimeEmptyConverter 以空字符串表示业务空值;迁移旧记录时同步规范化,
// 避免 Floor 生成代码把 SQLite NULL 强转为 String 后读取失败。
await database.execute(
"UPDATE face SET qualityCheckedAt = '' WHERE qualityCheckedAt IS NULL",
);
await database.execute(
'CREATE INDEX IF NOT EXISTS index_face_qualityStatus_qualityScore ON face(qualityStatus, qualityScore)',
);
});
/// 按起始版本升序返回全部迁移,Floor 打开旧数据库时据此连续升级到当前版本。
static List<Migration> getDatabaseMigrations() {
return [
@@ -364,6 +399,7 @@ abstract class DatabaseMigration {
migration8To9,
migration9To10,
migration10To11,
migration11To12,
];
}
}