SemanticSearchPOC / entities /schema /nested_properties.go
KevinStephenson
Adding in weaviate code
b110593
raw
history blame
1.57 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package schema
import "github.com/weaviate/weaviate/entities/models"
// merges nPropsExt with nPropsBase
// returns new slice without changing input ones
// and bool indicating whether there was changes done comparing to base slice
func MergeRecursivelyNestedProperties(nPropsBase, nPropsExt []*models.NestedProperty,
) ([]*models.NestedProperty, bool) {
merged := false
nProps := make([]*models.NestedProperty, len(nPropsBase), len(nPropsBase)+len(nPropsExt))
copy(nProps, nPropsBase)
existingIndexMap := map[string]int{}
for index := range nProps {
existingIndexMap[nProps[index].Name] = index
}
for _, nProp := range nPropsExt {
index, exists := existingIndexMap[nProp.Name]
if !exists {
existingIndexMap[nProp.Name] = len(nProps)
nProps = append(nProps, nProp)
merged = true
} else if _, isNested := AsNested(nProps[index].DataType); isNested {
if mergedProps, mergedNested := MergeRecursivelyNestedProperties(nProps[index].NestedProperties,
nProp.NestedProperties,
); mergedNested {
nPropCopy := *nProps[index]
nProps[index] = &nPropCopy
nProps[index].NestedProperties = mergedProps
merged = true
}
}
}
return nProps, merged
}