mirror of https://github.com/milvus-io/milvus.git
105 lines
2.7 KiB
Go
105 lines
2.7 KiB
Go
package model
|
|
|
|
import (
|
|
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
|
|
)
|
|
|
|
type StructArrayField struct {
|
|
FieldID int64
|
|
Name string
|
|
Description string
|
|
Fields []*Field
|
|
}
|
|
|
|
func (s *StructArrayField) Clone() *StructArrayField {
|
|
return &StructArrayField{
|
|
FieldID: s.FieldID,
|
|
Name: s.Name,
|
|
Description: s.Description,
|
|
Fields: CloneFields(s.Fields),
|
|
}
|
|
}
|
|
|
|
func CloneStructArrayFields(structArrayFields []*StructArrayField) []*StructArrayField {
|
|
clone := make([]*StructArrayField, len(structArrayFields))
|
|
for i, structArrayField := range structArrayFields {
|
|
clone[i] = structArrayField.Clone()
|
|
}
|
|
return clone
|
|
}
|
|
|
|
func (s *StructArrayField) Equal(other StructArrayField) bool {
|
|
return s.FieldID == other.FieldID &&
|
|
s.Name == other.Name &&
|
|
s.Description == other.Description &&
|
|
CheckFieldsEqual(s.Fields, other.Fields)
|
|
}
|
|
|
|
func CheckStructArrayFieldsEqual(structArrayFieldsA, structArrayFieldsB []*StructArrayField) bool {
|
|
if len(structArrayFieldsA) != len(structArrayFieldsB) {
|
|
return false
|
|
}
|
|
|
|
mapA := make(map[int64]*StructArrayField)
|
|
for _, f := range structArrayFieldsA {
|
|
mapA[f.FieldID] = f
|
|
}
|
|
|
|
for _, f := range structArrayFieldsB {
|
|
if other, exists := mapA[f.FieldID]; !exists || !f.Equal(*other) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func MarshalStructArrayFieldModel(structArrayField *StructArrayField) *schemapb.StructArrayFieldSchema {
|
|
if structArrayField == nil {
|
|
return nil
|
|
}
|
|
|
|
return &schemapb.StructArrayFieldSchema{
|
|
FieldID: structArrayField.FieldID,
|
|
Name: structArrayField.Name,
|
|
Description: structArrayField.Description,
|
|
Fields: MarshalFieldModels(structArrayField.Fields),
|
|
}
|
|
}
|
|
|
|
func MarshalStructArrayFieldModels(fieldSchemas []*StructArrayField) []*schemapb.StructArrayFieldSchema {
|
|
if fieldSchemas == nil {
|
|
return nil
|
|
}
|
|
|
|
structArrayFields := make([]*schemapb.StructArrayFieldSchema, len(fieldSchemas))
|
|
for idx, structArrayField := range fieldSchemas {
|
|
structArrayFields[idx] = MarshalStructArrayFieldModel(structArrayField)
|
|
}
|
|
return structArrayFields
|
|
}
|
|
|
|
func UnmarshalStructArrayFieldModel(fieldSchema *schemapb.StructArrayFieldSchema) *StructArrayField {
|
|
if fieldSchema == nil {
|
|
return nil
|
|
}
|
|
|
|
return &StructArrayField{
|
|
FieldID: fieldSchema.FieldID,
|
|
Name: fieldSchema.Name,
|
|
Description: fieldSchema.Description,
|
|
Fields: UnmarshalFieldModels(fieldSchema.Fields),
|
|
}
|
|
}
|
|
|
|
func UnmarshalStructArrayFieldModels(fieldSchemas []*schemapb.StructArrayFieldSchema) []*StructArrayField {
|
|
if fieldSchemas == nil {
|
|
return nil
|
|
}
|
|
|
|
structArrayFields := make([]*StructArrayField, len(fieldSchemas))
|
|
for idx, StructArrayFieldSchema := range fieldSchemas {
|
|
structArrayFields[idx] = UnmarshalStructArrayFieldModel(StructArrayFieldSchema)
|
|
}
|
|
return structArrayFields
|
|
}
|