Skip to content

Commit 9bccee0

Browse files
Merge branch '176-support-scalar-arrays' into 'dev'
Java library: Support scalar arrays See merge request objectbox/objectbox-java!118
2 parents 8bd4a79 + 6f67ab2 commit 9bccee0

File tree

10 files changed

+475
-14
lines changed

10 files changed

+475
-14
lines changed

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ protected static native long collect004000(long cursor, long keyIfComplete, int
105105
int idLong3, long valueLong3, int idLong4, long valueLong4
106106
);
107107

108+
// STRING ARRAYS
108109
protected static native long collectStringArray(long cursor, long keyIfComplete, int flags,
109110
int idStringArray, @Nullable String[] stringArray
110111
);
@@ -113,6 +114,26 @@ protected static native long collectStringList(long cursor, long keyIfComplete,
113114
int idStringList, @Nullable List<String> stringList
114115
);
115116

117+
// INTEGER ARRAYS
118+
protected static native long collectShortArray(long cursor, long keyIfComplete, int flags,
119+
int propertyId, @Nullable short[] value);
120+
121+
protected static native long collectCharArray(long cursor, long keyIfComplete, int flags,
122+
int propertyId, @Nullable char[] value);
123+
124+
protected static native long collectIntArray(long cursor, long keyIfComplete, int flags,
125+
int propertyId, @Nullable int[] value);
126+
127+
protected static native long collectLongArray(long cursor, long keyIfComplete, int flags,
128+
int propertyId, @Nullable long[] value);
129+
130+
// FLOATING POINT ARRAYS
131+
protected static native long collectFloatArray(long cursor, long keyIfComplete, int flags,
132+
int propertyId, @Nullable float[] value);
133+
134+
protected static native long collectDoubleArray(long cursor, long keyIfComplete, int flags,
135+
int propertyId, @Nullable double[] value);
136+
116137
native int nativePropertyId(long cursor, String propertyValue);
117138

118139
native List<T> nativeGetBacklinkEntities(long cursor, int entityId, int propertyId, long key);

tests/objectbox-java-test/src/main/java/io/objectbox/TestEntity.java

Lines changed: 96 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ public class TestEntity {
5353
private long simpleLongU;
5454
private Map<String, Object> stringObjectMap;
5555
private Object flexProperty;
56+
private short[] shortArray;
57+
private char[] charArray;
58+
private int[] intArray;
59+
private long[] longArray;
60+
private float[] floatArray;
61+
private double[] doubleArray;
5662

5763
transient boolean noArgsConstructorCalled;
5864

@@ -64,11 +70,30 @@ public TestEntity(long id) {
6470
this.id = id;
6571
}
6672

67-
public TestEntity(long id, boolean simpleBoolean, byte simpleByte, short simpleShort, int simpleInt,
68-
long simpleLong, float simpleFloat, double simpleDouble, String simpleString,
69-
byte[] simpleByteArray, String[] simpleStringArray, List<String> simpleStringList,
70-
short simpleShortU, int simpleIntU, long simpleLongU, Map<String, Object> stringObjectMap,
71-
Object flexProperty) {
73+
public TestEntity(long id,
74+
boolean simpleBoolean,
75+
byte simpleByte,
76+
short simpleShort,
77+
int simpleInt,
78+
long simpleLong,
79+
float simpleFloat,
80+
double simpleDouble,
81+
String simpleString,
82+
byte[] simpleByteArray,
83+
String[] simpleStringArray,
84+
List<String> simpleStringList,
85+
short simpleShortU,
86+
int simpleIntU,
87+
long simpleLongU,
88+
Map<String, Object> stringObjectMap,
89+
Object flexProperty,
90+
short[] shortArray,
91+
char[] charArray,
92+
int[] intArray,
93+
long[] longArray,
94+
float[] floatArray,
95+
double[] doubleArray
96+
) {
7297
this.id = id;
7398
this.simpleBoolean = simpleBoolean;
7499
this.simpleByte = simpleByte;
@@ -86,6 +111,12 @@ public TestEntity(long id, boolean simpleBoolean, byte simpleByte, short simpleS
86111
this.simpleLongU = simpleLongU;
87112
this.stringObjectMap = stringObjectMap;
88113
this.flexProperty = flexProperty;
114+
this.shortArray = shortArray;
115+
this.charArray = charArray;
116+
this.intArray = intArray;
117+
this.longArray = longArray;
118+
this.floatArray = floatArray;
119+
this.doubleArray = doubleArray;
89120
if (STRING_VALUE_THROW_IN_CONSTRUCTOR.equals(simpleString)) {
90121
throw new RuntimeException(EXCEPTION_IN_CONSTRUCTOR_MESSAGE);
91122
}
@@ -239,6 +270,60 @@ public TestEntity setFlexProperty(@Nullable Object flexProperty) {
239270
return this;
240271
}
241272

273+
@Nullable
274+
public short[] getShortArray() {
275+
return shortArray;
276+
}
277+
278+
public void setShortArray(@Nullable short[] shortArray) {
279+
this.shortArray = shortArray;
280+
}
281+
282+
@Nullable
283+
public char[] getCharArray() {
284+
return charArray;
285+
}
286+
287+
public void setCharArray(@Nullable char[] charArray) {
288+
this.charArray = charArray;
289+
}
290+
291+
@Nullable
292+
public int[] getIntArray() {
293+
return intArray;
294+
}
295+
296+
public void setIntArray(@Nullable int[] intArray) {
297+
this.intArray = intArray;
298+
}
299+
300+
@Nullable
301+
public long[] getLongArray() {
302+
return longArray;
303+
}
304+
305+
public void setLongArray(@Nullable long[] longArray) {
306+
this.longArray = longArray;
307+
}
308+
309+
@Nullable
310+
public float[] getFloatArray() {
311+
return floatArray;
312+
}
313+
314+
public void setFloatArray(@Nullable float[] floatArray) {
315+
this.floatArray = floatArray;
316+
}
317+
318+
@Nullable
319+
public double[] getDoubleArray() {
320+
return doubleArray;
321+
}
322+
323+
public void setDoubleArray(@Nullable double[] doubleArray) {
324+
this.doubleArray = doubleArray;
325+
}
326+
242327
@Override
243328
public String toString() {
244329
return "TestEntity{" +
@@ -259,6 +344,12 @@ public String toString() {
259344
", simpleLongU=" + simpleLongU +
260345
", stringObjectMap=" + stringObjectMap +
261346
", flexProperty=" + flexProperty +
347+
", shortArray=" + Arrays.toString(shortArray) +
348+
", charArray=" + Arrays.toString(charArray) +
349+
", intArray=" + Arrays.toString(intArray) +
350+
", longArray=" + Arrays.toString(longArray) +
351+
", floatArray=" + Arrays.toString(floatArray) +
352+
", doubleArray=" + Arrays.toString(doubleArray) +
262353
", noArgsConstructorCalled=" + noArgsConstructorCalled +
263354
'}';
264355
}

tests/objectbox-java-test/src/main/java/io/objectbox/TestEntityCursor.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ public Cursor<TestEntity> createCursor(io.objectbox.Transaction tx, long cursorH
6464
private final static int __ID_simpleLongU = TestEntity_.simpleLongU.id;
6565
private final static int __ID_stringObjectMap = TestEntity_.stringObjectMap.id;
6666
private final static int __ID_flexProperty = TestEntity_.flexProperty.id;
67+
private final static int __ID_shortArray = TestEntity_.shortArray.id;
68+
private final static int __ID_charArray = TestEntity_.charArray.id;
69+
private final static int __ID_intArray = TestEntity_.intArray.id;
70+
private final static int __ID_longArray = TestEntity_.longArray.id;
71+
private final static int __ID_floatArray = TestEntity_.floatArray.id;
72+
private final static int __ID_doubleArray = TestEntity_.doubleArray.id;
6773

6874
public TestEntityCursor(io.objectbox.Transaction tx, long cursor, BoxStore boxStore) {
6975
super(tx, cursor, TestEntity_.__INSTANCE, boxStore);
@@ -81,10 +87,46 @@ public long getId(TestEntity entity) {
8187
*/
8288
@Override
8389
public long put(TestEntity entity) {
90+
short[] shortArray = entity.getShortArray();
91+
int __id17 = shortArray != null ? __ID_shortArray : 0;
92+
93+
collectShortArray(cursor, 0, PUT_FLAG_FIRST,
94+
__id17, shortArray);
95+
96+
char[] charArray = entity.getCharArray();
97+
int __id18 = charArray != null ? __ID_charArray : 0;
98+
99+
collectCharArray(cursor, 0, 0,
100+
__id18, charArray);
101+
102+
int[] intArray = entity.getIntArray();
103+
int __id19 = intArray != null ? __ID_intArray : 0;
104+
105+
collectIntArray(cursor, 0, 0,
106+
__id19, intArray);
107+
108+
long[] longArray = entity.getLongArray();
109+
int __id20 = longArray != null ? __ID_longArray : 0;
110+
111+
collectLongArray(cursor, 0, 0,
112+
__id20, longArray);
113+
114+
float[] floatArray = entity.getFloatArray();
115+
int __id21 = floatArray != null ? __ID_floatArray : 0;
116+
117+
collectFloatArray(cursor, 0, 0,
118+
__id21, floatArray);
119+
120+
double[] doubleArray = entity.getDoubleArray();
121+
int __id22 = doubleArray != null ? __ID_doubleArray : 0;
122+
123+
collectDoubleArray(cursor, 0, 0,
124+
__id22, doubleArray);
125+
84126
String[] simpleStringArray = entity.getSimpleStringArray();
85127
int __id10 = simpleStringArray != null ? __ID_simpleStringArray : 0;
86128

87-
collectStringArray(cursor, 0, PUT_FLAG_FIRST,
129+
collectStringArray(cursor, 0, 0,
88130
__id10, simpleStringArray);
89131

90132
java.util.List<String> simpleStringList = entity.getSimpleStringList();

tests/objectbox-java-test/src/main/java/io/objectbox/TestEntity_.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,24 @@ public final class TestEntity_ implements EntityInfo<TestEntity> {
102102
public final static io.objectbox.Property<TestEntity> flexProperty =
103103
new io.objectbox.Property<>(__INSTANCE, 16, 17, byte[].class, "flexProperty", false, "flexProperty", FlexObjectConverter.class, Object.class);
104104

105+
public final static io.objectbox.Property<TestEntity> shortArray =
106+
new io.objectbox.Property<>(__INSTANCE, 17, 19, short[].class, "shortArray");
107+
108+
public final static io.objectbox.Property<TestEntity> charArray =
109+
new io.objectbox.Property<>(__INSTANCE, 18, 20, char[].class, "charArray");
110+
111+
public final static io.objectbox.Property<TestEntity> intArray =
112+
new io.objectbox.Property<>(__INSTANCE, 19, 21, int[].class, "intArray");
113+
114+
public final static io.objectbox.Property<TestEntity> longArray =
115+
new io.objectbox.Property<>(__INSTANCE, 20, 22, long[].class, "longArray");
116+
117+
public final static io.objectbox.Property<TestEntity> floatArray =
118+
new io.objectbox.Property<>(__INSTANCE, 21, 18, float[].class, "floatArray");
119+
120+
public final static io.objectbox.Property<TestEntity> doubleArray =
121+
new io.objectbox.Property<>(__INSTANCE, 22, 23, double[].class, "doubleArray");
122+
105123
@SuppressWarnings("unchecked")
106124
public final static io.objectbox.Property<TestEntity>[] __ALL_PROPERTIES = new io.objectbox.Property[]{
107125
id,
@@ -120,7 +138,13 @@ public final class TestEntity_ implements EntityInfo<TestEntity> {
120138
simpleIntU,
121139
simpleLongU,
122140
stringObjectMap,
123-
flexProperty
141+
flexProperty,
142+
shortArray,
143+
charArray,
144+
intArray,
145+
longArray,
146+
floatArray,
147+
doubleArray
124148
};
125149

126150
public final static io.objectbox.Property<TestEntity> __ID_PROPERTY = id;

tests/objectbox-java-test/src/test/java/io/objectbox/AbstractObjectBoxTest.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.junit.Before;
2626

2727
import javax.annotation.Nullable;
28+
2829
import java.io.File;
2930
import java.io.IOException;
3031
import java.nio.file.Files;
@@ -262,7 +263,15 @@ private void addTestEntity(ModelBuilder modelBuilder, @Nullable IndexType simple
262263
.id(TestEntity_.stringObjectMap.id, ++lastUid);
263264
entityBuilder.property("flexProperty", PropertyType.Flex).id(TestEntity_.flexProperty.id, ++lastUid);
264265

265-
int lastId = TestEntity_.flexProperty.id;
266+
// Integer and floating point arrays
267+
entityBuilder.property("shortArray", PropertyType.ShortVector).id(TestEntity_.shortArray.id, ++lastUid);
268+
entityBuilder.property("charArray", PropertyType.CharVector).id(TestEntity_.charArray.id, ++lastUid);
269+
entityBuilder.property("intArray", PropertyType.IntVector).id(TestEntity_.intArray.id, ++lastUid);
270+
entityBuilder.property("longArray", PropertyType.LongVector).id(TestEntity_.longArray.id, ++lastUid);
271+
entityBuilder.property("floatArray", PropertyType.FloatVector).id(TestEntity_.floatArray.id, ++lastUid);
272+
entityBuilder.property("doubleArray", PropertyType.DoubleVector).id(TestEntity_.doubleArray.id, ++lastUid);
273+
274+
int lastId = TestEntity_.doubleArray.id;
266275
entityBuilder.lastPropertyId(lastId, lastUid);
267276
addOptionalFlagsToTestEntity(entityBuilder);
268277
entityBuilder.entityDone();
@@ -309,6 +318,12 @@ protected TestEntity createTestEntity(@Nullable String simpleString, int nr) {
309318
entity.setStringObjectMap(stringObjectMap);
310319
}
311320
entity.setFlexProperty(simpleString);
321+
entity.setShortArray(new short[]{(short) -(100 + nr), entity.getSimpleShort()});
322+
entity.setCharArray(simpleString != null ? simpleString.toCharArray() : null);
323+
entity.setIntArray(new int[]{-entity.getSimpleInt(), entity.getSimpleInt()});
324+
entity.setLongArray(new long[]{-entity.getSimpleLong(), entity.getSimpleLong()});
325+
entity.setFloatArray(new float[]{-entity.getSimpleFloat(), entity.getSimpleFloat()});
326+
entity.setDoubleArray(new double[]{-entity.getSimpleDouble(), entity.getSimpleDouble()});
312327
return entity;
313328
}
314329

tests/objectbox-java-test/src/test/java/io/objectbox/BoxStoreBuilderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ public void maxDataSize() {
225225
DbMaxDataSizeExceededException.class,
226226
() -> getTestEntityBox().put(testEntity2)
227227
);
228-
assertEquals("Exceeded user-set maximum by [bytes]: 64", maxDataExc.getMessage());
228+
assertEquals("Exceeded user-set maximum by [bytes]: 528", maxDataExc.getMessage());
229229

230230
// Remove to get below max data size, then put again.
231231
getTestEntityBox().remove(testEntity1);

tests/objectbox-java-test/src/test/java/io/objectbox/BoxStoreTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ public void validate() {
305305

306306
// No limit.
307307
long validated = store.validate(0, true);
308-
assertEquals(9, validated);
308+
assertEquals(14, validated);
309309

310310
// With limit.
311311
validated = store.validate(1, true);

tests/objectbox-java-test/src/test/java/io/objectbox/BoxTest.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,22 @@ public void testPutAndGet() {
5151
assertTrue(id != 0);
5252
assertEquals(id, entity.getId());
5353

54+
short valShort = 100 + simpleInt;
55+
long valLong = 1000 + simpleInt;
56+
float valFloat = 200 + simpleInt / 10f;
57+
double valDouble = 2000 + simpleInt / 100f;
58+
5459
TestEntity entityRead = box.get(id);
5560
assertNotNull(entityRead);
5661
assertEquals(id, entityRead.getId());
5762
assertEquals(simpleString, entityRead.getSimpleString());
5863
assertEquals(simpleInt, entityRead.getSimpleInt());
5964
assertEquals((byte) (10 + simpleInt), entityRead.getSimpleByte());
6065
assertFalse(entityRead.getSimpleBoolean());
61-
assertEquals((short) (100 + simpleInt), entityRead.getSimpleShort());
62-
assertEquals(1000 + simpleInt, entityRead.getSimpleLong());
63-
assertEquals(200 + simpleInt / 10f, entityRead.getSimpleFloat(), 0);
64-
assertEquals(2000 + simpleInt / 100f, entityRead.getSimpleDouble(), 0);
66+
assertEquals(valShort, entityRead.getSimpleShort());
67+
assertEquals(valLong, entityRead.getSimpleLong());
68+
assertEquals(valFloat, entityRead.getSimpleFloat(), 0);
69+
assertEquals(valDouble, entityRead.getSimpleDouble(), 0);
6570
assertArrayEquals(new byte[]{1, 2, (byte) simpleInt}, entityRead.getSimpleByteArray());
6671
String[] expectedStringArray = new String[]{simpleString};
6772
assertArrayEquals(expectedStringArray, entityRead.getSimpleStringArray());
@@ -72,6 +77,12 @@ public void testPutAndGet() {
7277
assertEquals(1, entityRead.getStringObjectMap().size());
7378
assertEquals(simpleString, entityRead.getStringObjectMap().get(simpleString));
7479
assertEquals(simpleString, entityRead.getFlexProperty());
80+
assertArrayEquals(new short[]{(short) -valShort, valShort}, entity.getShortArray());
81+
assertArrayEquals(simpleString.toCharArray(), entity.getCharArray());
82+
assertArrayEquals(new int[]{-simpleInt, simpleInt}, entity.getIntArray());
83+
assertArrayEquals(new long[]{-valLong, valLong}, entity.getLongArray());
84+
assertArrayEquals(new float[]{-valFloat, valFloat}, entityRead.getFloatArray(), 0);
85+
assertArrayEquals(new double[]{-valDouble, valDouble}, entity.getDoubleArray(), 0);
7586
}
7687

7788
@Test
@@ -95,6 +106,12 @@ public void testPutAndGet_defaultOrNullValues() {
95106
assertEquals(0, defaultEntity.getSimpleLongU());
96107
assertNull(defaultEntity.getStringObjectMap());
97108
assertNull(defaultEntity.getFlexProperty());
109+
assertNull(defaultEntity.getShortArray());
110+
assertNull(defaultEntity.getCharArray());
111+
assertNull(defaultEntity.getIntArray());
112+
assertNull(defaultEntity.getLongArray());
113+
assertNull(defaultEntity.getFloatArray());
114+
assertNull(defaultEntity.getDoubleArray());
98115
}
99116

100117
@Test

0 commit comments

Comments
 (0)