import 'package:drift/drift.dart'; import 'package:drift_flutter/drift_flutter.dart'; import 'package:path_provider/path_provider.dart'; import 'package:surface/database/account.dart'; import 'package:surface/database/attachment.dart'; import 'package:surface/database/chat.dart'; import 'package:surface/database/database.steps.dart'; import 'package:surface/database/keypair.dart'; import 'package:surface/database/realm.dart'; import 'package:surface/database/sticker.dart'; import 'package:surface/types/chat.dart'; import 'package:surface/types/attachment.dart'; import 'package:surface/types/account.dart'; import 'package:surface/types/realm.dart'; part 'database.g.dart'; @DriftDatabase(tables: [ SnLocalChatChannel, SnLocalChatMessage, SnLocalChannelMember, SnLocalKeyPair, SnLocalAccount, SnLocalAttachment, SnLocalSticker, SnLocalStickerPack, SnLocalRealm, ]) class AppDatabase extends _$AppDatabase { AppDatabase([QueryExecutor? e]) : super(e ?? _openConnection()); @override int get schemaVersion => 4; static QueryExecutor _openConnection() { return driftDatabase( name: 'solar_network_data', native: const DriftNativeOptions( databaseDirectory: getApplicationSupportDirectory, ), web: DriftWebOptions( sqlite3Wasm: Uri.parse('sqlite3.wasm'), driftWorker: Uri.parse('drift_worker.dart.js'), ), ); } @override MigrationStrategy get migration { return MigrationStrategy( onUpgrade: stepByStep(from1To2: (m, schema) async { // Nothing else to do here }, from2To3: (m, schema) async { // Nothing else to do here, too }, from3To4: (m, schema) async { m.createTable(schema.snLocalRealm); m.createIndex(schema.idxRealmAccount); m.createIndex(schema.idxRealmAlias); }), ); } }