diff options
author | Arne H Juul <arnej@yahooinc.com> | 2022-03-24 12:37:23 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2022-04-07 14:01:28 +0000 |
commit | 1d04fdd423900847ddfc22f2a0f50134b5ea47d7 (patch) | |
tree | 59476600f913298cfe6d88f8ff901553125aad8e /config-model/src/main/java/com | |
parent | d9d1a19fabc5631419973868733fce51fab5421c (diff) |
allow duplicate struct names (in different document types)
Diffstat (limited to 'config-model/src/main/java/com')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java | 27 | ||||
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedSchemas.java | 18 |
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); } |