Skip to content

Commit 5c88fae

Browse files
Exclude flex properties when generating C/C++ binding code.
1 parent bce720a commit 5c88fae

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

internal/generator/binding/field.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type Field struct {
3535
Name string
3636
Optional string
3737
IsSkipped bool
38+
IsFlex bool
3839
}
3940

4041
func CreateField(prop *model.Property) *Field {
@@ -110,6 +111,15 @@ func (field *Field) ProcessAnnotations(a map[string]*Annotation) error {
110111
field.ModelProperty.AddFlag(model.PropertyFlagIdCompanion)
111112
}
112113

114+
if a["flex"] != nil {
115+
if field.ModelProperty.Type != model.PropertyTypeByteVector {
116+
return errors.New("flex must be used with type [byte]")
117+
}
118+
// Overwrite recognized type.
119+
field.ModelProperty.Type = model.PropertyTypeFlex
120+
field.IsFlex = true
121+
}
122+
113123
if a["unique"] != nil {
114124
field.ModelProperty.AddFlag(model.PropertyFlagUnique)
115125

internal/generator/c/cgenerator.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,33 @@ func (gen *CGenerator) generateBindingFile(bindingFile, headerFile string, m *mo
124124
var fileIdentifier = strings.ToLower(filepath.Base(bindingFile))
125125
fileIdentifier = replaceSpecialChars.Replace(fileIdentifier)
126126

127+
// Remove flex properties only for binding code generation:
128+
// create a (shallow) copy of the ModelInfo struct,
129+
// create copies of each Entity and replace the list
130+
// of properties with a filtered one.
131+
storedModelCopy := *m
132+
storedModelCopy.Entities = nil
133+
for _, e := range m.Entities {
134+
entityCopy := *e
135+
storedModelCopy.Entities = append(storedModelCopy.Entities, &entityCopy)
136+
}
137+
for _, e := range storedModelCopy.Entities {
138+
var filteredProperties []*model.Property
139+
for _, p := range e.Properties {
140+
if !p.Meta.(*fbsField).IsFlex {
141+
filteredProperties = append(filteredProperties, p)
142+
}
143+
}
144+
e.Properties = filteredProperties
145+
}
146+
127147
var tplArguments = struct {
128148
Model *model.ModelInfo
129149
GeneratorVersion int
130150
FileIdentifier string
131151
HeaderFile string
132152
Optional string
133-
}{m, generator.VersionId, fileIdentifier, filepath.Base(headerFile), gen.Optional}
153+
}{&storedModelCopy, generator.VersionId, fileIdentifier, filepath.Base(headerFile), gen.Optional}
134154

135155
var tpl *template.Template
136156

test/comparison/testdata/fbs/typeful/c/objectbox-model.h.expected

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,10 @@ static inline OBX_model* create_obx_model() {
8585
obx_model_property(model, "uid", OBXPropertyType_Int, 9, 6972732843819909978);
8686
obx_model_property_flags(model, (OBXPropertyFlags) (OBXPropertyFlags_INDEXED | OBXPropertyFlags_UNIQUE));
8787
obx_model_property_index_id(model, 8, 5558237345453186302);
88+
obx_model_property(model, "flexValue", OBXPropertyType_Flex, 10, 7845762441295307478);
8889
obx_model_relation(model, 1, 7845762441295307478, 1, 8717895732742165505);
8990
obx_model_relation(model, 2, 771642788862502430, 1, 8717895732742165505);
90-
obx_model_entity_last_property_id(model, 9, 6972732843819909978);
91+
obx_model_entity_last_property_id(model, 10, 7845762441295307478);
9192

9293
obx_model_entity(model, "TSDate", 3, 6050128673802995827);
9394
obx_model_property(model, "id", OBXPropertyType_Long, 1, 8514850266767180993);

test/comparison/testdata/fbs/typeful/cpp/objectbox-model.h.expected

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,10 @@ static inline OBX_model* create_obx_model() {
8585
obx_model_property(model, "uid", OBXPropertyType_Int, 9, 6972732843819909978);
8686
obx_model_property_flags(model, (OBXPropertyFlags) (OBXPropertyFlags_INDEXED | OBXPropertyFlags_UNIQUE));
8787
obx_model_property_index_id(model, 8, 5558237345453186302);
88+
obx_model_property(model, "flexValue", OBXPropertyType_Flex, 10, 7845762441295307478);
8889
obx_model_relation(model, 1, 7845762441295307478, 1, 8717895732742165505);
8990
obx_model_relation(model, 2, 771642788862502430, 1, 8717895732742165505);
90-
obx_model_entity_last_property_id(model, 9, 6972732843819909978);
91+
obx_model_entity_last_property_id(model, 10, 7845762441295307478);
9192

9293
obx_model_entity(model, "TSDate", 3, 6050128673802995827);
9394
obx_model_property(model, "id", OBXPropertyType_Long, 1, 8514850266767180993);

0 commit comments

Comments
 (0)