summaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-10-19 15:21:25 +0200
committerJon Bratseth <bratseth@gmail.com>2021-10-19 15:21:25 +0200
commit43145b73ee81d4656c6869117c80177837044fa8 (patch)
treeb2d64e5caffbc6d764e2043b9484c6295ed0853b /config-model/src
parente4651cd18ffa22ceec76ea982be8a9fbe171b4b1 (diff)
Inherit imported fields
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/Schema.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java24
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java6
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFieldsTestCase.java1
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java1
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();
}