38
38
// Note: IdUid is a struct, not a table, and thus must be inlined
39
39
40
40
/**
41
- * Builds a flatbuffer representation of the database model to be passed when opening a store .
41
+ * Builds a flatbuffer representation of the database model to be passed to {@link BoxStoreBuilder} .
42
42
* <p>
43
43
* This is an internal API that should only be called by the generated MyObjectBox code.
44
44
*/
45
45
@ Internal
46
46
public class ModelBuilder {
47
- private static final int MODEL_VERSION = 2 ;
47
+ private static final String DEFAULT_MODEL_NAME = "default" ;
48
+ private static final int DEFAULT_MODEL_VERSION = 2 ;
48
49
49
50
private final FlatBufferBuilder fbb = new FlatBufferBuilder ();
50
51
private final List <Integer > entityOffsets = new ArrayList <>();
51
52
52
- private long version = 1 ;
53
+ private long version = DEFAULT_MODEL_VERSION ;
53
54
54
55
private Integer lastEntityId ;
55
56
private Long lastEntityUid ;
@@ -104,28 +105,37 @@ public final int finish() {
104
105
105
106
public static class PropertyBuilder extends PartBuilder {
106
107
107
- private final int type ;
108
- private final int virtualTargetOffset ;
109
108
private final int propertyNameOffset ;
110
109
private final int targetEntityOffset ;
110
+ private final int virtualTargetOffset ;
111
+ private final int type ;
111
112
112
113
private int secondaryNameOffset ;
113
- private int flags ;
114
114
private int id ;
115
115
private long uid ;
116
116
private int indexId ;
117
117
private long indexUid ;
118
118
private int indexMaxValueLength ;
119
- private int externalPropertyType ;
119
+ private int externalType ;
120
120
private int hnswParamsOffset ;
121
+ private int flags ;
121
122
122
123
private PropertyBuilder (FlatBufferBuilder fbb , String name , @ Nullable String targetEntityName ,
123
124
@ Nullable String virtualTarget , int type ) {
124
125
super (fbb );
125
- this .type = type ;
126
126
propertyNameOffset = fbb .createString (name );
127
127
targetEntityOffset = targetEntityName != null ? fbb .createString (targetEntityName ) : 0 ;
128
128
virtualTargetOffset = virtualTarget != null ? fbb .createString (virtualTarget ) : 0 ;
129
+ this .type = type ;
130
+ }
131
+
132
+ /**
133
+ * Sets the Java name of a renamed property when using {@link io.objectbox.annotation.NameInDb}.
134
+ */
135
+ public PropertyBuilder secondaryName (String secondaryName ) {
136
+ checkNotFinished ();
137
+ secondaryNameOffset = getFbb ().createString (secondaryName );
138
+ return this ;
129
139
}
130
140
131
141
public PropertyBuilder id (int id , long uid ) {
@@ -153,9 +163,9 @@ public PropertyBuilder indexMaxValueLength(int indexMaxValueLength) {
153
163
*
154
164
* @return this builder.
155
165
*/
156
- public PropertyBuilder externalType (int externalPropertyType ) {
166
+ public PropertyBuilder externalType (int externalType ) {
157
167
checkNotFinished ();
158
- this .externalPropertyType = externalPropertyType ;
168
+ this .externalType = externalType ;
159
169
return this ;
160
170
}
161
171
@@ -204,31 +214,23 @@ public PropertyBuilder hnswParams(long dimensions,
204
214
return this ;
205
215
}
206
216
217
+ /**
218
+ * One or more of {@link io.objectbox.model.PropertyFlags}.
219
+ */
207
220
public PropertyBuilder flags (int flags ) {
208
221
checkNotFinished ();
209
222
this .flags = flags ;
210
223
return this ;
211
224
}
212
225
213
- public PropertyBuilder secondaryName (String secondaryName ) {
214
- checkNotFinished ();
215
- secondaryNameOffset = getFbb ().createString (secondaryName );
216
- return this ;
217
- }
218
-
219
226
@ Override
220
227
public int createFlatBufferTable (FlatBufferBuilder fbb ) {
221
228
ModelProperty .startModelProperty (fbb );
222
229
ModelProperty .addName (fbb , propertyNameOffset );
223
- if (targetEntityOffset != 0 ) {
224
- ModelProperty .addTargetEntity (fbb , targetEntityOffset );
225
- }
226
- if (virtualTargetOffset != 0 ) {
227
- ModelProperty .addVirtualTarget (fbb , virtualTargetOffset );
228
- }
229
- if (secondaryNameOffset != 0 ) {
230
- ModelProperty .addNameSecondary (fbb , secondaryNameOffset );
231
- }
230
+ if (targetEntityOffset != 0 ) ModelProperty .addTargetEntity (fbb , targetEntityOffset );
231
+ if (virtualTargetOffset != 0 ) ModelProperty .addVirtualTarget (fbb , virtualTargetOffset );
232
+ ModelProperty .addType (fbb , type );
233
+ if (secondaryNameOffset != 0 ) ModelProperty .addNameSecondary (fbb , secondaryNameOffset );
232
234
if (id != 0 ) {
233
235
int idOffset = IdUid .createIdUid (fbb , id , uid );
234
236
ModelProperty .addId (fbb , idOffset );
@@ -237,19 +239,10 @@ public int createFlatBufferTable(FlatBufferBuilder fbb) {
237
239
int indexIdOffset = IdUid .createIdUid (fbb , indexId , indexUid );
238
240
ModelProperty .addIndexId (fbb , indexIdOffset );
239
241
}
240
- if (indexMaxValueLength > 0 ) {
241
- ModelProperty .addMaxIndexValueLength (fbb , indexMaxValueLength );
242
- }
243
- if (externalPropertyType != 0 ) {
244
- ModelProperty .addExternalType (fbb , externalPropertyType );
245
- }
246
- if (hnswParamsOffset != 0 ) {
247
- ModelProperty .addHnswParams (fbb , hnswParamsOffset );
248
- }
249
- ModelProperty .addType (fbb , type );
250
- if (flags != 0 ) {
251
- ModelProperty .addFlags (fbb , flags );
252
- }
242
+ if (indexMaxValueLength > 0 ) ModelProperty .addMaxIndexValueLength (fbb , indexMaxValueLength );
243
+ if (externalType != 0 ) ModelProperty .addExternalType (fbb , externalType );
244
+ if (hnswParamsOffset != 0 ) ModelProperty .addHnswParams (fbb , hnswParamsOffset );
245
+ if (flags != 0 ) ModelProperty .addFlags (fbb , flags );
253
246
return ModelProperty .endModelProperty (fbb );
254
247
}
255
248
}
@@ -261,7 +254,8 @@ public static class RelationBuilder extends PartBuilder {
261
254
private final long relationUid ;
262
255
private final int targetEntityId ;
263
256
private final long targetEntityUid ;
264
- private int externalPropertyType ;
257
+
258
+ private int externalType ;
265
259
266
260
private RelationBuilder (FlatBufferBuilder fbb , String name , int relationId , long relationUid ,
267
261
int targetEntityId , long targetEntityUid ) {
@@ -278,9 +272,9 @@ private RelationBuilder(FlatBufferBuilder fbb, String name, int relationId, long
278
272
*
279
273
* @return this builder.
280
274
*/
281
- public RelationBuilder externalType (int externalPropertyType ) {
275
+ public RelationBuilder externalType (int externalType ) {
282
276
checkNotFinished ();
283
- this .externalPropertyType = externalPropertyType ;
277
+ this .externalType = externalType ;
284
278
return this ;
285
279
}
286
280
@@ -294,30 +288,27 @@ public int createFlatBufferTable(FlatBufferBuilder fbb) {
294
288
ModelRelation .addId (fbb , relationIdOffset );
295
289
int targetEntityIdOffset = IdUid .createIdUid (fbb , targetEntityId , targetEntityUid );
296
290
ModelRelation .addTargetEntityId (fbb , targetEntityIdOffset );
297
- if (externalPropertyType != 0 ) {
298
- ModelRelation .addExternalType (fbb , externalPropertyType );
299
- }
291
+ if (externalType != 0 ) ModelRelation .addExternalType (fbb , externalType );
300
292
return ModelRelation .endModelRelation (fbb );
301
293
}
302
294
}
303
295
304
296
public static class EntityBuilder extends PartBuilder {
305
297
306
298
private final ModelBuilder model ;
307
- final String name ;
308
- final List <Integer > propertyOffsets = new ArrayList <>();
309
- final List <Integer > relationOffsets = new ArrayList <>();
310
-
311
- Integer id ;
312
- Long uid ;
313
- Integer flags ;
314
- Integer lastPropertyId ;
315
- Long lastPropertyUid ;
316
- @ Nullable PropertyBuilder propertyBuilder ;
317
- @ Nullable RelationBuilder relationBuilder ;
318
- boolean finished ;
319
-
320
- EntityBuilder (ModelBuilder model , FlatBufferBuilder fbb , String name ) {
299
+ private final String name ;
300
+ private final List <Integer > propertyOffsets = new ArrayList <>();
301
+ private final List <Integer > relationOffsets = new ArrayList <>();
302
+
303
+ private Integer id ;
304
+ private Long uid ;
305
+ private Integer lastPropertyId ;
306
+ private Long lastPropertyUid ;
307
+ private Integer flags ;
308
+ @ Nullable private PropertyBuilder propertyBuilder ;
309
+ @ Nullable private RelationBuilder relationBuilder ;
310
+
311
+ private EntityBuilder (ModelBuilder model , FlatBufferBuilder fbb , String name ) {
321
312
super (fbb );
322
313
this .model = model ;
323
314
this .name = name ;
@@ -337,6 +328,9 @@ public EntityBuilder lastPropertyId(int lastPropertyId, long lastPropertyUid) {
337
328
return this ;
338
329
}
339
330
331
+ /**
332
+ * One or more of {@link io.objectbox.model.EntityFlags}.
333
+ */
340
334
public EntityBuilder flags (int flags ) {
341
335
this .flags = flags ;
342
336
return this ;
@@ -350,6 +344,14 @@ public PropertyBuilder property(String name, @Nullable String targetEntityName,
350
344
return property (name , targetEntityName , null , type );
351
345
}
352
346
347
+ /**
348
+ * @param name The name of this property in the database.
349
+ * @param targetEntityName For {@link io.objectbox.model.PropertyType#Relation}, the name of the target entity.
350
+ * @param virtualTarget For {@link io.objectbox.model.PropertyType#Relation}, if this property does not really
351
+ * exist in the source code and is a virtual one, the name of the field this is based on that actually exists.
352
+ * Currently used for ToOne fields that create virtual target ID properties.
353
+ * @param type The {@link io.objectbox.model.PropertyType}.
354
+ */
353
355
public PropertyBuilder property (String name , @ Nullable String targetEntityName , @ Nullable String virtualTarget ,
354
356
int type ) {
355
357
checkNotFinished ();
@@ -392,12 +394,12 @@ public ModelBuilder entityDone() {
392
394
393
395
@ Override
394
396
public int createFlatBufferTable (FlatBufferBuilder fbb ) {
395
- int testEntityNameOffset = fbb .createString (name );
397
+ int nameOffset = fbb .createString (name );
396
398
int propertiesOffset = model .createVector (propertyOffsets );
397
399
int relationsOffset = relationOffsets .isEmpty () ? 0 : model .createVector (relationOffsets );
398
400
399
401
ModelEntity .startModelEntity (fbb );
400
- ModelEntity .addName (fbb , testEntityNameOffset );
402
+ ModelEntity .addName (fbb , nameOffset );
401
403
ModelEntity .addProperties (fbb , propertiesOffset );
402
404
if (relationsOffset != 0 ) ModelEntity .addRelations (fbb , relationsOffset );
403
405
if (id != null && uid != null ) {
@@ -408,9 +410,7 @@ public int createFlatBufferTable(FlatBufferBuilder fbb) {
408
410
int idOffset = IdUid .createIdUid (fbb , lastPropertyId , lastPropertyUid );
409
411
ModelEntity .addLastPropertyId (fbb , idOffset );
410
412
}
411
- if (flags != null ) {
412
- ModelEntity .addFlags (fbb , flags );
413
- }
413
+ if (flags != null ) ModelEntity .addFlags (fbb , flags );
414
414
return ModelEntity .endModelEntity (fbb );
415
415
}
416
416
@@ -452,11 +452,11 @@ public ModelBuilder lastRelationId(int lastRelationId, long lastRelationUid) {
452
452
}
453
453
454
454
public byte [] build () {
455
- int nameOffset = fbb .createString ("default" );
455
+ int nameOffset = fbb .createString (DEFAULT_MODEL_NAME );
456
456
int entityVectorOffset = createVector (entityOffsets );
457
457
Model .startModel (fbb );
458
458
Model .addName (fbb , nameOffset );
459
- Model .addModelVersion (fbb , MODEL_VERSION );
459
+ Model .addModelVersion (fbb , version );
460
460
Model .addVersion (fbb , 1 );
461
461
Model .addEntities (fbb , entityVectorOffset );
462
462
if (lastEntityId != null ) {
0 commit comments