diff --git a/mobile/lib/infrastructure/repositories/local_asset.repository.dart b/mobile/lib/infrastructure/repositories/local_asset.repository.dart index 0559dc32d7..8396d6d2a6 100644 --- a/mobile/lib/infrastructure/repositories/local_asset.repository.dart +++ b/mobile/lib/infrastructure/repositories/local_asset.repository.dart @@ -30,7 +30,9 @@ class DriftLocalAssetRepository extends DriftDatabaseRepository { _db.remoteAssetEntity, _db.localAssetEntity.checksum.equalsExp(_db.remoteAssetEntity.checksum) & _db.remoteAssetEntity.ownerId.isInQuery( - _db.selectOnly(_db.authUserEntity)..addColumns([_db.authUserEntity.id]), + _db.selectOnly(_db.authUserEntity) + ..addColumns([_db.authUserEntity.id]) + ..limit(1), ), useColumns: false, ), diff --git a/mobile/lib/infrastructure/repositories/remote_asset.repository.dart b/mobile/lib/infrastructure/repositories/remote_asset.repository.dart index aae0ed467b..19085023d9 100644 --- a/mobile/lib/infrastructure/repositories/remote_asset.repository.dart +++ b/mobile/lib/infrastructure/repositories/remote_asset.repository.dart @@ -64,7 +64,11 @@ class RemoteAssetRepository extends DriftDatabaseRepository { ..where( (row) => row.checksum.equals(checksum) & - row.ownerId.isInQuery(_db.selectOnly(_db.authUserEntity)..addColumns([_db.authUserEntity.id])), + row.ownerId.isInQuery( + _db.selectOnly(_db.authUserEntity) + ..addColumns([_db.authUserEntity.id]) + ..limit(1), + ), ) ..limit(1); diff --git a/mobile/lib/infrastructure/repositories/timeline.repository.dart b/mobile/lib/infrastructure/repositories/timeline.repository.dart index db41ae6275..82ad38c80f 100644 --- a/mobile/lib/infrastructure/repositories/timeline.repository.dart +++ b/mobile/lib/infrastructure/repositories/timeline.repository.dart @@ -164,7 +164,9 @@ class DriftTimelineRepository extends DriftDatabaseRepository { _db.remoteAssetEntity, _db.localAssetEntity.checksum.equalsExp(_db.remoteAssetEntity.checksum) & _db.remoteAssetEntity.ownerId.isInQuery( - _db.selectOnly(_db.authUserEntity)..addColumns([_db.authUserEntity.id]), + _db.selectOnly(_db.authUserEntity) + ..addColumns([_db.authUserEntity.id]) + ..limit(1), ), useColumns: false, ), diff --git a/mobile/test/medium/repositories/local_asset_repository_test.dart b/mobile/test/medium/repositories/local_asset_repository_test.dart index 32e5f42131..b77ffa72e7 100644 --- a/mobile/test/medium/repositories/local_asset_repository_test.dart +++ b/mobile/test/medium/repositories/local_asset_repository_test.dart @@ -58,10 +58,11 @@ void main() { expect(result.storage, AssetState.local); }); - test('allows the current user to have multiple remote rows for one checksum (#29973)', () async { - // A single user can have many remote assets with the same checksum (their upload + external library copy) + test('allows the current user to have access to multiple remote rows for one checksum (#29973)', () async { + // A single user can have their own remote asset, a partner's remote asset, and a local asset all with the same checksum const checksum = 'multi-library'; - await ctx.newRemoteAsset(ownerId: userId, checksum: checksum); + final partner = await ctx.newUser(); + await ctx.newRemoteAsset(ownerId: partner.id, checksum: checksum); await ctx.newRemoteAsset(ownerId: userId, checksum: checksum); final local = await ctx.newLocalAsset(checksum: checksum);