diff --git a/mobile/drift_schemas/main/drift_schema_v3.json b/mobile/drift_schemas/main/drift_schema_v3.json new file mode 100644 index 000000000..1acfbaf49 Binary files /dev/null and b/mobile/drift_schemas/main/drift_schema_v3.json differ diff --git a/mobile/lib/infrastructure/entities/stack.entity.dart b/mobile/lib/infrastructure/entities/stack.entity.dart index 92375f19d..b5da42832 100644 --- a/mobile/lib/infrastructure/entities/stack.entity.dart +++ b/mobile/lib/infrastructure/entities/stack.entity.dart @@ -1,5 +1,4 @@ import 'package:drift/drift.dart'; -import 'package:immich_mobile/infrastructure/entities/remote_asset.entity.dart'; import 'package:immich_mobile/infrastructure/entities/user.entity.dart'; import 'package:immich_mobile/infrastructure/utils/drift_default.mixin.dart'; @@ -15,7 +14,7 @@ class StackEntity extends Table with DriftDefaultsMixin { TextColumn get ownerId => text().references(UserEntity, #id, onDelete: KeyAction.cascade)(); - TextColumn get primaryAssetId => text().references(RemoteAssetEntity, #id)(); + TextColumn get primaryAssetId => text()(); @override Set get primaryKey => {id}; diff --git a/mobile/lib/infrastructure/entities/stack.entity.drift.dart b/mobile/lib/infrastructure/entities/stack.entity.drift.dart index c0d000e02..df0390aea 100644 Binary files a/mobile/lib/infrastructure/entities/stack.entity.drift.dart and b/mobile/lib/infrastructure/entities/stack.entity.drift.dart differ diff --git a/mobile/lib/infrastructure/repositories/db.repository.dart b/mobile/lib/infrastructure/repositories/db.repository.dart index 0a763c91c..7562cf6ff 100644 --- a/mobile/lib/infrastructure/repositories/db.repository.dart +++ b/mobile/lib/infrastructure/repositories/db.repository.dart @@ -72,7 +72,7 @@ class Drift extends $Drift implements IDatabaseRepository { ); @override - int get schemaVersion => 2; + int get schemaVersion => 3; @override MigrationStrategy get migration => MigrationStrategy( @@ -84,12 +84,16 @@ class Drift extends $Drift implements IDatabaseRepository { from: from, to: to, steps: migrationSteps( - from1To2: (m, _) async { - for (final entity in allSchemaEntities) { + from1To2: (m, v2) async { + for (final entity in v2.entities) { await m.drop(entity); await m.create(entity); } }, + from2To3: (m, v3) async { + // Removed foreign key constraint on stack.primaryAssetId + await m.alterTable(TableMigration(v3.stackEntity)); + }, ), ); diff --git a/mobile/lib/infrastructure/repositories/db.repository.steps.dart b/mobile/lib/infrastructure/repositories/db.repository.steps.dart index 76e5df76d..a0703c371 100644 Binary files a/mobile/lib/infrastructure/repositories/db.repository.steps.dart and b/mobile/lib/infrastructure/repositories/db.repository.steps.dart differ diff --git a/mobile/lib/infrastructure/repositories/remote_asset.repository.dart b/mobile/lib/infrastructure/repositories/remote_asset.repository.dart index 28c229b46..52cfe2e7c 100644 --- a/mobile/lib/infrastructure/repositories/remote_asset.repository.dart +++ b/mobile/lib/infrastructure/repositories/remote_asset.repository.dart @@ -193,7 +193,7 @@ class RemoteAssetRepository extends DriftDatabaseRepository { Future stack(String userId, StackResponse stack) { return _db.transaction(() async { final stackIds = await _db.managers.stackEntity - .filter((row) => row.primaryAssetId.id.isIn(stack.assetIds)) + .filter((row) => row.primaryAssetId.isIn(stack.assetIds)) .map((row) => row.id) .get(); diff --git a/mobile/test/drift/main/generated/schema.dart b/mobile/test/drift/main/generated/schema.dart index b2b7404b5..209e70d78 100644 Binary files a/mobile/test/drift/main/generated/schema.dart and b/mobile/test/drift/main/generated/schema.dart differ diff --git a/mobile/test/drift/main/generated/schema_v3.dart b/mobile/test/drift/main/generated/schema_v3.dart new file mode 100644 index 000000000..8f655b3f7 Binary files /dev/null and b/mobile/test/drift/main/generated/schema_v3.dart differ