aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-03-24 12:37:23 +0000
committerArne H Juul <arnej@yahooinc.com>2022-04-07 14:01:28 +0000
commit1d04fdd423900847ddfc22f2a0f50134b5ea47d7 (patch)
tree59476600f913298cfe6d88f8ff901553125aad8e /config-model/src/main
parentd9d1a19fabc5631419973868733fce51fab5421c (diff)
allow duplicate struct names (in different document types)
Diffstat (limited to 'config-model/src/main')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java27
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedSchemas.java18
2 files changed, 27 insertions, 18 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
index 5b7b23d69d4..bfe0db6f65d 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
@@ -160,7 +160,7 @@ public class DocumentModelBuilder {
private static void addSearchField(SDField field, SearchDef searchDef) {
SearchField searchField =
new SearchField(field,
- field.getIndices().containsKey(field.getName()) && field.getIndices().get(field.getName()).getType().equals(Index.Type.VESPA),
+ field.getIndices().containsKey(field.getName()) && field.getIndices().get(field.getName()).getType().equals(Index.Type.VESPA),
field.getAttributes().containsKey(field.getName()));
searchDef.add(searchField);
@@ -485,7 +485,27 @@ public class DocumentModelBuilder {
targetDt.add(type);
}
return true;
- } else if ((type instanceof StructDataType) && (oldType instanceof StructDataType)) {
+ }
+ if (oldType == type) {
+ return false;
+ }
+ if (targetDt.getDataType(type.getId()) == null) {
+ if ((oldType instanceof OwnedStructDataType)
+ && (type instanceof OwnedStructDataType))
+ {
+ var oldOwned = (OwnedStructDataType) oldType;
+ var newOwned = (OwnedStructDataType) type;
+ if (newOwned.getOwnerName().equals(targetDt.getName()) &&
+ ! oldOwned.getOwnerName().equals(targetDt.getName()))
+ {
+ if ( ! dryRun) {
+ targetDt.add(type);
+ }
+ return true;
+ }
+ }
+ }
+ if ((type instanceof StructDataType) && (oldType instanceof StructDataType)) {
StructDataType s = (StructDataType) type;
StructDataType os = (StructDataType) oldType;
if ((os.getFieldCount() == 0) && (s.getFieldCount() > os.getFieldCount())) {
@@ -561,7 +581,6 @@ public class DocumentModelBuilder {
@SuppressWarnings("deprecation")
private StructDataType handleStruct(SDDocumentType type) {
- // System.err.println("handle struct " + type + " for doc " + targetDt.getName());
if (type.isStruct()) {
var st = type.getStruct();
if (st.getName().equals(type.getName()) &&
@@ -593,7 +612,7 @@ public class DocumentModelBuilder {
addType(s);
return s;
}
-
+
}
private static Set<NewDocumentType.Name> convertDocumentReferencesToNames(Optional<DocumentReferences> documentReferences) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedSchemas.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedSchemas.java
index e4d03a3f471..9c2d29282ae 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedSchemas.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedSchemas.java
@@ -108,25 +108,15 @@ public class ConvertParsedSchemas {
ConvertParsedFields fieldConverter)
{
SDDocumentType document = new SDDocumentType(parsed.name());
+ for (var struct : parsed.getStructs()) {
+ var structProxy = fieldConverter.convertStructDeclaration(schema, document, struct);
+ document.addType(structProxy);
+ }
for (String inherit : parsed.getInherited()) {
var parent = convertedDocuments.get(inherit);
assert(parent != null);
document.inherit(parent);
}
- for (var struct : parsed.getStructs()) {
- var structProxy = fieldConverter.convertStructDeclaration(schema, document, struct);
- var old = document.getType(struct.name());
- if (old == null) {
- document.addType(structProxy);
- } else {
- var oldFields = old.fieldSet();
- var newFields = structProxy.fieldSet();
- if (! newFields.equals(oldFields)) {
- throw new IllegalArgumentException("Cannot modify already-existing struct: " + struct.name());
- }
- deployLogger.logApplicationPackage(Level.WARNING, "Duplicate struct declaration for: " + struct.name());
- }
- }
for (var annotation : parsed.getAnnotations()) {
fieldConverter.convertAnnotation(schema, document, annotation);
}