Skip to content

Commit f22ea11

Browse files
Test target ID is reset when removing target object with large ID #151
Public issue: #740
1 parent 983778d commit f22ea11

File tree

3 files changed

+82
-2
lines changed

3 files changed

+82
-2
lines changed

objectbox_test/test/box_test.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,32 @@ void main() {
2525

2626
tearDown(() => env.closeAndDelete());
2727

28+
test('target ID is reset when removing target object with large ID', () {
29+
final modelABox = store.box<ModelA>();
30+
final modelBBox = store.box<ModelB>();
31+
32+
// final modelAdbId = 4294967295; // 32-bit unsigned integer MAX WORKS
33+
final modelAdbId = 4294967295 + 1; // FAILS
34+
35+
final modelB = ModelB()..modelA.target = ModelA(dbId: modelAdbId);
36+
final modelBId = modelBBox.put(modelB);
37+
// Need to put target object as using manually assigned IDs
38+
modelABox.put(ModelA(dbId: modelAdbId));
39+
40+
// Check ToOne has target
41+
final modelA = modelBBox.get(modelBId)!.modelA;
42+
expect(modelA.targetId, modelAdbId, reason: "target ID doesn't match");
43+
expect(modelA.target, isNotNull);
44+
45+
// Remove target object
46+
expect(modelABox.remove(modelAdbId), true);
47+
48+
// Check ToOne has no target
49+
final modelARemoved = modelBBox.get(modelBId)!.modelA;
50+
expect(modelARemoved.targetId, 0, reason: "target ID not 0");
51+
expect(modelARemoved.target, isNull);
52+
});
53+
2854
test('store box vending', () {
2955
final box1 = store.box<TestEntity>();
3056
expect(box1.isEmpty(), isTrue);

objectbox_test/test/entity.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,3 +504,21 @@ class RelatedNamedEntity {
504504

505505
String? name;
506506
}
507+
508+
@Entity()
509+
class ModelA {
510+
@Id(assignable: true)
511+
int dbId;
512+
513+
ModelA({required this.dbId});
514+
}
515+
516+
@Entity()
517+
class ModelB {
518+
@Id()
519+
int dbId;
520+
521+
final modelA = ToOne<ModelA>();
522+
523+
ModelB({this.dbId = 0});
524+
}

objectbox_test/test/objectbox-model.json

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,10 +767,46 @@
767767
"targetId": "16:5931645853908059165"
768768
}
769769
]
770+
},
771+
{
772+
"id": "17:1916197463975409850",
773+
"lastPropertyId": "1:7361238329179935424",
774+
"name": "ModelA",
775+
"properties": [
776+
{
777+
"id": "1:7361238329179935424",
778+
"name": "dbId",
779+
"type": 6,
780+
"flags": 129
781+
}
782+
],
783+
"relations": []
784+
},
785+
{
786+
"id": "18:2680158095061865736",
787+
"lastPropertyId": "2:533966917738031607",
788+
"name": "ModelB",
789+
"properties": [
790+
{
791+
"id": "1:6351192468911651752",
792+
"name": "dbId",
793+
"type": 6,
794+
"flags": 1
795+
},
796+
{
797+
"id": "2:533966917738031607",
798+
"name": "modelAId",
799+
"indexId": "24:4321803250180166911",
800+
"type": 11,
801+
"flags": 520,
802+
"relationTarget": "ModelA"
803+
}
804+
],
805+
"relations": []
770806
}
771807
],
772-
"lastEntityId": "16:5931645853908059165",
773-
"lastIndexId": "23:6649884639373473085",
808+
"lastEntityId": "18:2680158095061865736",
809+
"lastIndexId": "24:4321803250180166911",
774810
"lastRelationId": "2:313640065593441165",
775811
"lastSequenceId": "0:0",
776812
"modelVersion": 5,

0 commit comments

Comments
 (0)