diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-10-19 15:21:25 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-10-19 15:21:25 +0200 |
commit | 43145b73ee81d4656c6869117c80177837044fa8 (patch) | |
tree | b2d64e5caffbc6d764e2043b9484c6295ed0853b /config-model/src | |
parent | e4651cd18ffa22ceec76ea982be8a9fbe171b4b1 (diff) |
Inherit imported fields
Diffstat (limited to 'config-model/src')
6 files changed, 34 insertions, 7 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Schema.java b/config-model/src/main/java/com/yahoo/searchdefinition/Schema.java index f5a2cd71c0f..252db79e72b 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/Schema.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/Schema.java @@ -87,7 +87,11 @@ public class Schema implements ImmutableSchema { private final OnnxModels onnxModels; - private Optional<TemporaryImportedFields> temporaryImportedFields = Optional.of(new TemporaryImportedFields()); + /** All imported fields of this (and parent schemas) */ + // TODO: Use empty, not optional + // TODO: Merge this and importedFields + private final Optional<TemporaryImportedFields> temporaryImportedFields = Optional.of(new TemporaryImportedFields(this)); + /** The resulting processed field */ private Optional<ImportedFields> importedFields = Optional.empty(); private final Application owner; @@ -226,7 +230,6 @@ public class Schema implements ImmutableSchema { } public void setImportedFields(ImportedFields importedFields) { - temporaryImportedFields = Optional.empty(); this.importedFields = Optional.of(importedFields); } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java index 92a55d40048..18bd3f43445 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java @@ -1,6 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.searchdefinition.document; +import com.yahoo.searchdefinition.Schema; + import java.util.Collections; import java.util.Map; diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java index 5733779ccc7..96f2f2f1d24 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java @@ -1,7 +1,10 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.searchdefinition.document; +import com.yahoo.searchdefinition.Schema; + import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -14,15 +17,32 @@ import java.util.Map; */ public class TemporaryImportedFields { + private final Schema owner; private final Map<String, TemporaryImportedField> fields = new LinkedHashMap<>(); + public TemporaryImportedFields(Schema owner) { + this.owner = owner; + } + public void add(TemporaryImportedField importedField) { fields.put(importedField.fieldName(), importedField); } - public boolean hasField(String fieldName) { return fields.get(fieldName) != null; } + public boolean hasField(String fieldName) { + boolean has = fields.get(fieldName) != null; + if (has) return true; + if (owner.inherited().isEmpty()) return false; + if (owner.inherited().get().temporaryImportedFields().isEmpty()) return false; + return owner.inherited().get().temporaryImportedFields().get().hasField(fieldName); + } public Map<String, TemporaryImportedField> fields() { - return Collections.unmodifiableMap(fields); + if (owner.inherited().isEmpty()) return Collections.unmodifiableMap(fields); + if (owner.inherited().get().temporaryImportedFields().isEmpty()) return Collections.unmodifiableMap(fields); + + var allFields = new HashMap<>(owner.inherited().get().temporaryImportedFields().get().fields()); + allFields.putAll(fields); + return allFields; } + } diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java index 764883feea9..cff9d6ceb37 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java @@ -3,6 +3,7 @@ package com.yahoo.searchdefinition; import com.yahoo.searchdefinition.document.Stemming; import com.yahoo.searchdefinition.parser.ParseException; +import com.yahoo.searchdefinition.processing.ImportedFieldsResolver; import com.yahoo.searchdefinition.processing.OnnxModelTypeResolver; import com.yahoo.vespa.model.test.utils.DeployLoggerStub; import org.junit.Test; @@ -98,7 +99,7 @@ public class SchemaTestCase { " document-summary parent_summary {" + " summary pf1 type string {}" + " }" + - //" import field parentschema_ref.name as parent_name {}" + + " import field parentschema_ref.name as parent_imported {}" + "}"); String childLines = joinLines( "schema child inherits parent {" + @@ -111,6 +112,7 @@ public class SchemaTestCase { SearchBuilder builder = new SearchBuilder(new DeployLoggerStub()); builder.processorsToSkip().add(OnnxModelTypeResolver.class); // Avoid discovering the Onnx model referenced does not exist + builder.processorsToSkip().add(ImportedFieldsResolver.class); // Avoid discovering the document reference leads nowhere builder.importString(parentLines); builder.importString(childLines); builder.build(true); @@ -132,6 +134,8 @@ public class SchemaTestCase { assertNotNull(child.getSummaryField("pf1")); assertNotNull(child.getExplicitSummaryField("pf1")); assertNotNull(child.getUniqueNamedSummaryFields().get("pf1")); + assertTrue(child.temporaryImportedFields().isPresent()); + assertNotNull(child.temporaryImportedFields().get().fields().get("parent_imported")); } } diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFieldsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFieldsTestCase.java index 51cd05f7178..3b5add5b3d8 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFieldsTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFieldsTestCase.java @@ -251,7 +251,6 @@ public class AdjustPositionSummaryFieldsTestCase { assertNotNull(schema.temporaryImportedFields().get()); assertFalse(schema.importedFields().isPresent()); new ImportedFieldsResolver(schema, null, null, null).process(true, false); - assertFalse(schema.temporaryImportedFields().isPresent()); assertNotNull(schema.importedFields().get()); new AdjustPositionSummaryFields(schema, null, null, null).process(true, false); } diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java index 2520b2e8ac3..522d4dc2b15 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java @@ -142,7 +142,6 @@ public class ImportedFieldsResolverTestCase { assertNotNull(schema.temporaryImportedFields().get()); assertFalse(schema.importedFields().isPresent()); new ImportedFieldsResolver(schema, null, null, null).process(true, false); - assertFalse(schema.temporaryImportedFields().isPresent()); assertNotNull(schema.importedFields().get()); return schema.importedFields().get(); } |