From 3b5f999e48bfe328d2d7fb65882a506b0a5bf8ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Overg=C3=A5rd=20Nielsen?= Date: Fri, 15 Sep 2023 19:36:14 +0200 Subject: [PATCH] Lift link restriction on asymmetric objects --- generator/lib/src/class_element_ex.dart | 8 +------- .../asymmetric_link_to_non_embedded.dart | 13 ------------- .../asymmetric_link_to_non_embedded.expected | 11 ----------- test/asymmetric_test.dart | 7 +++---- test/test.dart | 1 + 5 files changed, 5 insertions(+), 35 deletions(-) delete mode 100644 generator/test/error_test_data/asymmetric_link_to_non_embedded.dart delete mode 100644 generator/test/error_test_data/asymmetric_link_to_non_embedded.expected diff --git a/generator/lib/src/class_element_ex.dart b/generator/lib/src/class_element_ex.dart index 3305fb3c1..60d40192f 100644 --- a/generator/lib/src/class_element_ex.dart +++ b/generator/lib/src/class_element_ex.dart @@ -188,17 +188,11 @@ extension ClassElementEx on ClassElement { } } - // Check that asymmetric objects: - // 1) only have links to embedded objects. - // 2) have a primary key named _id. + // Check that asymmetric objects have a primary key named _id. if (objectType == ObjectType.asymmetricObject) { var hasPrimaryKey = false; for (final field in mappedFields) { final fieldElement = field.fieldElement; - final classElement = fieldElement.type.basicType.element as ClassElement; - if (field.type.basicType.isRealmModel && !classElement.thisType.isRealmModelOfType(ObjectType.embeddedObject)) { - throw RealmInvalidGenerationSourceError('Asymmetric objects cannot link to non-embedded objects', todo: '', element: fieldElement); - } if (field.isPrimaryKey) { hasPrimaryKey = true; if (field.realmName != '_id') { diff --git a/generator/test/error_test_data/asymmetric_link_to_non_embedded.dart b/generator/test/error_test_data/asymmetric_link_to_non_embedded.dart deleted file mode 100644 index 5d591cf8b..000000000 --- a/generator/test/error_test_data/asymmetric_link_to_non_embedded.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:realm_common/realm_common.dart'; - -@RealmModel() -class _Symmetric {} - -@RealmModel(ObjectType.asymmetricObject) -class _Asymmetric { - @PrimaryKey() - @MapTo('_id') - late ObjectId id; - - _Symmetric? illegal; -} diff --git a/generator/test/error_test_data/asymmetric_link_to_non_embedded.expected b/generator/test/error_test_data/asymmetric_link_to_non_embedded.expected deleted file mode 100644 index 254882d74..000000000 --- a/generator/test/error_test_data/asymmetric_link_to_non_embedded.expected +++ /dev/null @@ -1,11 +0,0 @@ -Asymmetric objects cannot link to non-embedded objects - -in: asset:pkg/test/error_test_data/asymmetric_link_to_non_embedded.dart:12:15 - ╷ -6 │ @RealmModel(ObjectType.asymmetricObject) -7 │ class _Asymmetric { - │ ━━━━━━━━━━━ in realm model for 'Asymmetric' -... │ -12 │ _Symmetric? illegal; - │ ^^^^^^^ ! - ╵ diff --git a/test/asymmetric_test.dart b/test/asymmetric_test.dart index a7584b944..2dc10aeeb 100644 --- a/test/asymmetric_test.dart +++ b/test/asymmetric_test.dart @@ -59,8 +59,8 @@ Future main([List? args]) async { await realm.syncSession.waitForUpload(); }); - baasTest('Asymmetric tricks to add non-embedded links', (config) async { - final realm = await getIntegrationRealm(appConfig: config); + baasTest('Asymmetric add non-embedded links', (config) async { + final realm = await getSyncRealm(config); realm.subscriptions.update((mutableSubscriptions) { mutableSubscriptions.add(realm.all()); @@ -68,8 +68,7 @@ Future main([List? args]) async { realm.write(() { final s = realm.add(Symmetric(ObjectId())); - // Since this shenanigan is allowed, I have opened a feature request to allow - // direct links on a symmetric objects. See https://github.com/realm/realm-core/issues/6976. + realm.ingest(Asymmetric(ObjectId(), symmetric: s)); realm.ingest(Asymmetric(ObjectId(), embeddedObjects: [Embedded(1, symmetric: s)])); realm.ingest(Asymmetric(ObjectId(), embeddedObjects: [Embedded(1, any: RealmValue.from(s))])); }); diff --git a/test/test.dart b/test/test.dart index 8f16db576..2df22d03a 100644 --- a/test/test.dart +++ b/test/test.dart @@ -333,6 +333,7 @@ class _Asymmetric { @MapTo('_id') late ObjectId id; + _Symmetric? symmetric; late List<_Embedded> embeddedObjects; }