更新数据库版本

This commit is contained in:
DelLevin-Home
2026-07-03 00:13:35 +08:00
parent f2bb3f72db
commit 48c1b05410
7 changed files with 223 additions and 12 deletions

View File

@@ -72,7 +72,7 @@ class DatabaseHelper {
return await openDatabase(
path,
version: 26,
version: 27,
onCreate: _createDB,
onUpgrade: _onUpgrade,
);
@@ -245,6 +245,40 @@ class DatabaseHelper {
await db.execute("ALTER TABLE movies ADD COLUMN category TEXT NOT NULL DEFAULT 'movie'");
}
}
if (oldVersion < 26) {
await _upgradeBooksTableV26(db);
}
if (oldVersion < 27) {
await _upgradeBooksTableV27(db);
}
}
/// 升级books表到V27添加阅读始末日期字段
Future<void> _upgradeBooksTableV27(Database db) async {
final columns = await db.rawQuery('PRAGMA table_info(books)');
final hasStartDate = columns.any((col) => col['name'] == 'start_date');
final hasFinishDate = columns.any((col) => col['name'] == 'finish_date');
if (!hasStartDate) {
await db.execute('ALTER TABLE books ADD COLUMN start_date TEXT');
}
if (!hasFinishDate) {
await db.execute('ALTER TABLE books ADD COLUMN finish_date TEXT');
}
}
/// 升级books表到V26添加阅读始末日期字段
Future<void> _upgradeBooksTableV26(Database db) async {
final columns = await db.rawQuery('PRAGMA table_info(books)');
final hasStartDate = columns.any((col) => col['name'] == 'start_date');
final hasFinishDate = columns.any((col) => col['name'] == 'finish_date');
if (!hasStartDate) {
await db.execute('ALTER TABLE books ADD COLUMN start_date TEXT');
}
if (!hasFinishDate) {
await db.execute('ALTER TABLE books ADD COLUMN finish_date TEXT');
}
}
/// 升级books表到V11添加ISBN和出版时间字段
@@ -635,6 +669,8 @@ class DatabaseHelper {
status TEXT NOT NULL,
isbn TEXT,
publish_date TEXT,
start_date TEXT,
finish_date TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
is_deleted INTEGER DEFAULT 0,

View File

@@ -6,14 +6,27 @@ class ReaderDao {
// ─── reader_books ─────────────────────────────────────────────────
/// 获取所有未删除的阅读记录
/// 获取所有未删除的阅读记录(包含关联书籍封面)
Future<List<Map<String, dynamic>>> getAllReaderBooks() async {
final db = await _db.database;
return db.query(
'reader_books',
where: 'is_deleted = 0',
orderBy: 'updated_at DESC',
);
final results = await db.rawQuery('''
SELECT rb.*,
COALESCE(b.cover_path, rb.cover_path) as display_cover_path
FROM reader_books rb
LEFT JOIN books b ON rb.book_id = b.id AND b.is_deleted = 0
WHERE rb.is_deleted = 0
ORDER BY rb.updated_at DESC
''');
return results.map((row) {
final map = Map<String, dynamic>.from(row);
// 如果有关联封面,覆盖 cover_path 供 UI 使用
final displayCover = map['display_cover_path'] as String?;
if (displayCover != null && displayCover.isNotEmpty) {
map['cover_path'] = displayCover;
}
map.remove('display_cover_path');
return map;
}).toList();
}
/// 根据 ID 获取阅读记录