56 lines
1.4 KiB
Dart
56 lines
1.4 KiB
Dart
import 'package:drift/drift.dart';
|
|
import 'package:im_app/data/local/drift/tables/users.dart';
|
|
import 'package:im_app/data/local/drift/tables/test_tables.dart';
|
|
|
|
part 'app_database.g.dart';
|
|
|
|
@DriftDatabase(tables: [Users,TestTables]) //update mapping here
|
|
class AppDatabase extends _$AppDatabase {
|
|
|
|
static Map<Type, TableInfo> getTableRegistry(GeneratedDatabase database) {
|
|
if (database is! AppDatabase) {
|
|
return {
|
|
};
|
|
}
|
|
return {
|
|
User: database.users,
|
|
TestTable: database.testTables,
|
|
};
|
|
}
|
|
|
|
AppDatabase(super.e);
|
|
|
|
@override
|
|
int get schemaVersion => 1;
|
|
|
|
@override
|
|
MigrationStrategy get migration {
|
|
return MigrationStrategy(
|
|
onCreate: (m) async {
|
|
await m.createAll();
|
|
},
|
|
onUpgrade: (m, from, to) async {
|
|
// 自动检测并添加缺失列
|
|
for (final table in allTables) {
|
|
//取原来的字段
|
|
final existingColumns = await m.database
|
|
.customSelect('PRAGMA table_info(${table.actualTableName})')
|
|
.get();
|
|
final existingNames = existingColumns
|
|
.map((r) => r.data['name'] as String)
|
|
.toSet();
|
|
|
|
for (final column in table.$columns) {
|
|
if (!existingNames.contains(column.name)) {
|
|
//字段缺失,添加。
|
|
await m.addColumn(table, column);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
);
|
|
}
|
|
|
|
|
|
}
|