Skip to content

Commit dad53ee

Browse files
committed
added getRelationIds() and related methods
1 parent c64d3e9 commit dad53ee

2 files changed

Lines changed: 46 additions & 1 deletion

File tree

objectbox-java/src/main/java/io/objectbox/Box.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import io.objectbox.internal.IdGetter;
3737
import io.objectbox.internal.ReflectionCache;
3838
import io.objectbox.query.QueryBuilder;
39+
import io.objectbox.relation.RelationInfo;
3940

4041
/**
4142
* A box to store objects of a particular class.
@@ -599,6 +600,32 @@ public List<T> internalGetRelationEntities(int sourceEntityId, int relationId, l
599600
}
600601
}
601602

603+
@Internal
604+
public long[] internalGetRelationIds(int sourceEntityId, int relationId, long key, boolean backlink) {
605+
Cursor<T> reader = getReader();
606+
try {
607+
return reader.getRelationIds(sourceEntityId, relationId, key, backlink);
608+
} finally {
609+
releaseReader(reader);
610+
}
611+
}
612+
613+
public List<T> getRelationEntities(RelationInfo relationInfo, long id) {
614+
return internalGetRelationEntities(relationInfo.sourceInfo.getEntityId(), relationInfo.relationId, id, false);
615+
}
616+
617+
public List<T> getRelationBacklinkEntities(RelationInfo relationInfo, long id) {
618+
return internalGetRelationEntities(relationInfo.targetInfo.getEntityId(), relationInfo.relationId, id, true);
619+
}
620+
621+
public long[] getRelationIds(RelationInfo relationInfo, long id) {
622+
return internalGetRelationIds(relationInfo.sourceInfo.getEntityId(), relationInfo.relationId, id, false);
623+
}
624+
625+
public long[] getRelationBacklinkIds(RelationInfo relationInfo, long id) {
626+
return internalGetRelationIds(relationInfo.targetInfo.getEntityId(), relationInfo.relationId, id, true);
627+
}
628+
602629
@Internal
603630
public <RESULT> RESULT internalCallWithReaderHandle(CallWithHandle<RESULT> task) {
604631
Cursor<T> reader = getReader();

objectbox-java/src/main/java/io/objectbox/Cursor.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import io.objectbox.annotation.apihint.Beta;
2626
import io.objectbox.annotation.apihint.Internal;
27-
import io.objectbox.annotation.apihint.Temporary;
2827
import io.objectbox.relation.ToMany;
2928

3029
@SuppressWarnings({"unchecked", "SameParameterValue", "unused", "WeakerAccess", "UnusedReturnValue"})
@@ -113,8 +112,12 @@ protected static native long collect004000(long cursor, long keyIfComplete, int
113112

114113
static native List nativeGetBacklinkEntities(long cursor, int entityId, int propertyId, long key);
115114

115+
static native long[] nativeGetBacklinkIds(long cursor, int entityId, int propertyId, long key);
116+
116117
static native List nativeGetRelationEntities(long cursor, int sourceEntityId, int relationId, long key, boolean backlink);
117118

119+
static native long[] nativeGetRelationIds(long cursor, int sourceEntityId, int relationId, long key, boolean backlink);
120+
118121
static native void nativeModifyRelations(long cursor, int relationId, long key, long[] targetKeys, boolean remove);
119122

120123
static native void nativeModifyRelationsSingle(long cursor, int relationId, long key, long targetKey, boolean remove);
@@ -281,11 +284,26 @@ List<T> getBacklinkEntities(int entityId, Property relationIdProperty, long key)
281284
}
282285
}
283286

287+
@Internal
288+
long[] getBacklinkIds(int entityId, Property relationIdProperty, long key) {
289+
try {
290+
return nativeGetBacklinkIds(cursor, entityId, relationIdProperty.getId(), key);
291+
} catch (IllegalArgumentException e) {
292+
throw new IllegalArgumentException("Please check if the given property belongs to a valid @Relation: "
293+
+ relationIdProperty, e);
294+
}
295+
}
296+
284297
@Internal
285298
public List<T> getRelationEntities(int sourceEntityId, int relationId, long key, boolean backlink) {
286299
return nativeGetRelationEntities(cursor, sourceEntityId, relationId, key, backlink);
287300
}
288301

302+
@Internal
303+
public long[] getRelationIds(int sourceEntityId, int relationId, long key, boolean backlink) {
304+
return nativeGetRelationIds(cursor, sourceEntityId, relationId, key, backlink);
305+
}
306+
289307
@Internal
290308
public void modifyRelations(int relationId, long key, long[] targetKeys, boolean remove) {
291309
nativeModifyRelations(cursor, relationId, key, targetKeys, remove);

0 commit comments

Comments
 (0)