Skip to content

Commit

Permalink
Lift link restriction on asymmetric objects
Browse files Browse the repository at this point in the history
  • Loading branch information
nielsenko authored and nirinchev committed Nov 1, 2023
1 parent 538c6aa commit 3b5f999
Show file tree
Hide file tree
Showing 5 changed files with 5 additions and 35 deletions.
8 changes: 1 addition & 7 deletions generator/lib/src/class_element_ex.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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') {
Expand Down

This file was deleted.

This file was deleted.

7 changes: 3 additions & 4 deletions test/asymmetric_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,16 @@ Future<void> main([List<String>? 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<Symmetric>());
});

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))]));
});
Expand Down
1 change: 1 addition & 0 deletions test/test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ class _Asymmetric {
@MapTo('_id')
late ObjectId id;

_Symmetric? symmetric;
late List<_Embedded> embeddedObjects;
}

Expand Down

0 comments on commit 3b5f999

Please sign in to comment.