summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirstorli@yahoo.no>2018-04-25 17:14:30 +0200
committerGitHub <noreply@github.com>2018-04-25 17:14:30 +0200
commitadd9063f792957502be3905d58a139d824835ed7 (patch)
treeffe9f1300cad4003d2d7b944585015e2bddbf11a /config-model
parenta908dbcdaa5d33859b3151f42a112354b988429e (diff)
parent63b800d3a93ffe9365b2400ce3cc6cc61fbadae8 (diff)
Merge pull request #5680 from vespa-engine/geirst/enable-grand-parent-support-in-config-model
Geirst/enable grand parent support in config model
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedField.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java19
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java3
-rw-r--r--config-model/src/test/derived/importedfields/attributes.cfg20
-rw-r--r--config-model/src/test/derived/importedfields/child.sd4
-rw-r--r--config-model/src/test/derived/importedfields/grandparent.sd8
-rw-r--r--config-model/src/test/derived/importedfields/imported-fields.cfg5
-rw-r--r--config-model/src/test/derived/importedfields/index-info.cfg6
-rw-r--r--config-model/src/test/derived/importedfields/indexschema.cfg1
-rw-r--r--config-model/src/test/derived/importedfields/parent_a.sd4
-rw-r--r--config-model/src/test/derived/importedfields/summary.cfg4
-rw-r--r--config-model/src/test/derived/importedfields/summarymap.cfg3
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java29
14 files changed, 83 insertions, 33 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
index 4502468379f..125e6b976b5 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
@@ -27,6 +27,10 @@ public class ImmutableImportedSDField implements ImmutableSDField {
this.importedField = importedField;
}
+ public ImportedField getImportedField() {
+ return importedField;
+ }
+
@Override
public <T extends Expression> boolean containsExpression(Class<T> searchFor) {
throw createUnsupportedException(searchFor.getSimpleName());
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedField.java
index 5c3f8bf18bf..1a6a24275ac 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedField.java
@@ -12,11 +12,11 @@ public class ImportedField {
private final String fieldName;
private final DocumentReference reference;
- private final SDField targetField;
+ private final ImmutableSDField targetField;
public ImportedField(String fieldName,
DocumentReference reference,
- SDField targetField) {
+ ImmutableSDField targetField) {
this.fieldName = fieldName;
this.reference = reference;
this.targetField = targetField;
@@ -30,7 +30,7 @@ public class ImportedField {
return reference;
}
- public SDField targetField() {
+ public ImmutableSDField targetField() {
return targetField;
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
index 9997351d246..50e24e2f07d 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
@@ -6,6 +6,7 @@ import com.yahoo.searchdefinition.DocumentReference;
import com.yahoo.searchdefinition.DocumentReferences;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.searchdefinition.document.ImportedField;
import com.yahoo.searchdefinition.document.ImportedFields;
import com.yahoo.searchdefinition.document.SDField;
@@ -39,7 +40,7 @@ public class ImportedFieldsResolver extends Processor {
private void resolveImportedField(TemporaryImportedField importedField, boolean validate) {
DocumentReference reference = validateDocumentReference(importedField);
- SDField targetField = validateTargetField(importedField, reference, validate);
+ ImmutableSDField targetField = validateTargetField(importedField, reference, validate);
importedFields.put(importedField.fieldName(), new ImportedField(importedField.fieldName(), reference, targetField));
}
@@ -52,16 +53,12 @@ public class ImportedFieldsResolver extends Processor {
return reference;
}
- private SDField validateTargetField(TemporaryImportedField importedField,
- DocumentReference reference,
- boolean validate) {
+ private ImmutableSDField validateTargetField(TemporaryImportedField importedField,
+ DocumentReference reference,
+ boolean validate) {
String targetFieldName = importedField.targetFieldName();
Search targetSearch = reference.targetSearch();
- if (validate && isImportedField(targetSearch, targetFieldName)) {
- fail(importedField, targetFieldAsString(targetFieldName, reference) +
- ": Is an imported field. Not supported");
- }
- SDField targetField = targetSearch.getConcreteField(targetFieldName);
+ ImmutableSDField targetField = targetSearch.getField(targetFieldName);
if (targetField == null) {
fail(importedField, targetFieldAsString(targetFieldName, reference) +
": Not found");
@@ -77,10 +74,6 @@ public class ImportedFieldsResolver extends Processor {
return targetField;
}
- private static boolean isImportedField(Search targetSearch, String targetFieldName) {
- return targetSearch.importedFields().isPresent() && targetSearch.importedFields().get().fields().containsKey(targetFieldName);
- }
-
private static String targetFieldAsString(String targetFieldName, DocumentReference reference) {
return "Field '" + targetFieldName + "' via reference field '" + reference.referenceField().getName() + "'";
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
index e402217cb9f..21567edb94b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
@@ -11,6 +11,7 @@ import com.yahoo.searchdefinition.RankProfile;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Search;
import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.searchdefinition.document.ImportedField;
import com.yahoo.searchdefinition.document.ImportedFields;
import com.yahoo.searchdefinition.document.SDField;
@@ -57,7 +58,7 @@ public class RankProfileTypeSettingsProcessor extends Processor {
}
private void processImportedField(ImportedField field) {
- SDField targetField = field.targetField();
+ ImmutableSDField targetField = field.targetField();
Attribute attribute = targetField.getAttributes().get(targetField.getName());
if (attribute != null && attribute.tensorType().isPresent()) {
addAttributeTypeToRankProfiles(field.fieldName(), attribute.tensorType().get().toString());
diff --git a/config-model/src/test/derived/importedfields/attributes.cfg b/config-model/src/test/derived/importedfields/attributes.cfg
index f51bbc012b9..f1cfab59e65 100644
--- a/config-model/src/test/derived/importedfields/attributes.cfg
+++ b/config-model/src/test/derived/importedfields/attributes.cfg
@@ -158,3 +158,23 @@ attribute[].upperbound 300
attribute[].densepostinglistthreshold 0.4
attribute[].tensortype ""
attribute[].imported true
+attribute[].name "my_ancient_int_field"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported true
diff --git a/config-model/src/test/derived/importedfields/child.sd b/config-model/src/test/derived/importedfields/child.sd
index 07fa7d15719..e7a2953506c 100644
--- a/config-model/src/test/derived/importedfields/child.sd
+++ b/config-model/src/test/derived/importedfields/child.sd
@@ -10,9 +10,10 @@ search child {
import field a_ref.int_array_field as my_int_array_field {}
import field a_ref.int_wset_field as my_int_wset_field {}
import field a_ref.predicate_field as my_predicate_field {}
+ import field a_ref.ancient_int_field as my_ancient_int_field {}
fieldset myfieldset {
- fields: my_int_field, my_string_field
+ fields: my_int_field, my_string_field, my_ancient_int_field
}
document-summary mysummary {
@@ -22,5 +23,6 @@ search child {
summary my_string_field type string {}
summary my_int_array_field type array<int> {}
summary my_int_wset_field type weightedset<int> {}
+ summary my_ancient_int_field type int {}
}
}
diff --git a/config-model/src/test/derived/importedfields/grandparent.sd b/config-model/src/test/derived/importedfields/grandparent.sd
new file mode 100644
index 00000000000..9e0e628f742
--- /dev/null
+++ b/config-model/src/test/derived/importedfields/grandparent.sd
@@ -0,0 +1,8 @@
+# Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+search grandparent {
+ document grandparent {
+ field int_field type int {
+ indexing: attribute
+ }
+ }
+}
diff --git a/config-model/src/test/derived/importedfields/imported-fields.cfg b/config-model/src/test/derived/importedfields/imported-fields.cfg
index 59413ca5eb7..2c36fee177d 100644
--- a/config-model/src/test/derived/importedfields/imported-fields.cfg
+++ b/config-model/src/test/derived/importedfields/imported-fields.cfg
@@ -23,3 +23,8 @@ attribute[].referencefield "a_ref"
attribute[].targetfield "predicate_field"
attribute[].datatype NONE
attribute[].collectiontype SINGLE
+attribute[].name "my_ancient_int_field"
+attribute[].referencefield "a_ref"
+attribute[].targetfield "ancient_int_field"
+attribute[].datatype NONE
+attribute[].collectiontype SINGLE
diff --git a/config-model/src/test/derived/importedfields/index-info.cfg b/config-model/src/test/derived/importedfields/index-info.cfg
index adba0036409..9291956447b 100644
--- a/config-model/src/test/derived/importedfields/index-info.cfg
+++ b/config-model/src/test/derived/importedfields/index-info.cfg
@@ -55,6 +55,12 @@ indexinfo[].command[].indexname "my_predicate_field"
indexinfo[].command[].command "index"
indexinfo[].command[].indexname "my_predicate_field"
indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "my_ancient_int_field"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "my_ancient_int_field"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "my_ancient_int_field"
+indexinfo[].command[].command "numerical"
indexinfo[].command[].indexname "myfieldset"
indexinfo[].command[].command "attribute"
indexinfo[].command[].indexname "myfieldset"
diff --git a/config-model/src/test/derived/importedfields/indexschema.cfg b/config-model/src/test/derived/importedfields/indexschema.cfg
index 5905de5e42e..9d479cefcd4 100644
--- a/config-model/src/test/derived/importedfields/indexschema.cfg
+++ b/config-model/src/test/derived/importedfields/indexschema.cfg
@@ -1,3 +1,4 @@
fieldset[].name "myfieldset"
+fieldset[].field[].name "my_ancient_int_field"
fieldset[].field[].name "my_int_field"
fieldset[].field[].name "my_string_field"
diff --git a/config-model/src/test/derived/importedfields/parent_a.sd b/config-model/src/test/derived/importedfields/parent_a.sd
index edc81df5609..4950e5e01c3 100644
--- a/config-model/src/test/derived/importedfields/parent_a.sd
+++ b/config-model/src/test/derived/importedfields/parent_a.sd
@@ -1,6 +1,9 @@
# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
search parent_a {
document parent_a {
+ field grandparent_ref type reference<grandparent> {
+ indexing: attribute
+ }
field int_field type int {
indexing: attribute
}
@@ -19,4 +22,5 @@ search parent_a {
}
}
}
+ import field grandparent_ref.int_field as ancient_int_field {}
}
diff --git a/config-model/src/test/derived/importedfields/summary.cfg b/config-model/src/test/derived/importedfields/summary.cfg
index 17bb1fd1e23..68ad270a314 100644
--- a/config-model/src/test/derived/importedfields/summary.cfg
+++ b/config-model/src/test/derived/importedfields/summary.cfg
@@ -9,7 +9,7 @@ classes[].fields[].name "summaryfeatures"
classes[].fields[].type "featuredata"
classes[].fields[].name "documentid"
classes[].fields[].type "longstring"
-classes[].id 762794406
+classes[].id 1660388492
classes[].name "mysummary"
classes[].fields[].name "a_ref"
classes[].fields[].type "longstring"
@@ -23,6 +23,8 @@ classes[].fields[].name "my_int_array_field"
classes[].fields[].type "jsonstring"
classes[].fields[].name "my_int_wset_field"
classes[].fields[].type "jsonstring"
+classes[].fields[].name "my_ancient_int_field"
+classes[].fields[].type "integer"
classes[].fields[].name "rankfeatures"
classes[].fields[].type "featuredata"
classes[].fields[].name "summaryfeatures"
diff --git a/config-model/src/test/derived/importedfields/summarymap.cfg b/config-model/src/test/derived/importedfields/summarymap.cfg
index 84f76490dd9..d038e2313a8 100644
--- a/config-model/src/test/derived/importedfields/summarymap.cfg
+++ b/config-model/src/test/derived/importedfields/summarymap.cfg
@@ -11,6 +11,9 @@ override[].arguments "my_int_array_field"
override[].field "my_int_wset_field"
override[].command "attribute"
override[].arguments "my_int_wset_field"
+override[].field "my_ancient_int_field"
+override[].command "attribute"
+override[].arguments "my_ancient_int_field"
override[].field "rankfeatures"
override[].command "rankfeatures"
override[].arguments ""
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 ff801c122b2..815f696acdc 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
@@ -11,6 +11,8 @@ import com.yahoo.document.TensorDataType;
import com.yahoo.searchdefinition.DocumentReference;
import com.yahoo.searchdefinition.DocumentReferences;
import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.document.ImmutableImportedSDField;
+import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.searchdefinition.document.ImportedField;
import com.yahoo.searchdefinition.document.ImportedFields;
import com.yahoo.searchdefinition.document.SDDocumentType;
@@ -48,13 +50,23 @@ public class ImportedFieldsResolverTestCase {
assertEquals(fieldName, myField.fieldName());
assertSame(model.childSearch.getConcreteField("ref"), myField.reference().referenceField());
assertSame(model.parentSearch, myField.reference().targetSearch());
- assertSame(model.parentSearch.getConcreteField(targetFieldName), myField.targetField());
+ ImmutableSDField targetField = model.parentSearch.getField(targetFieldName);
+ if (targetField instanceof SDField) {
+ assertSame(targetField, myField.targetField());
+ } else {
+ assertSame(getImportedField(targetField), getImportedField(myField.targetField()));
+ }
+ }
+
+ private static ImportedField getImportedField(ImmutableSDField field) {
+ return ((ImmutableImportedSDField) field).getImportedField();
}
@Test
public void valid_imported_fields_are_resolved() {
- resolve_imported_field("my_attribute_field", "attribute_field");
- resolve_imported_field("my_tensor_field", "tensor_field");
+ resolve_imported_field("my_attribute_field", "attribute_field");
+ resolve_imported_field("my_tensor_field", "tensor_field");
+ resolve_imported_field("my_ancient_field", "ancient_field");
}
@Test
@@ -92,17 +104,6 @@ public class ImportedFieldsResolverTestCase {
.resolve();
}
- @Test
- public void resolver_fails_if_imported_field_is_also_an_imported_field() {
- exceptionRule.expect(IllegalArgumentException.class);
- exceptionRule.expectMessage(
- "For search 'child', import field 'my_ancient_field': " +
- "Field 'ancient_field' via reference field 'ref': Is an imported field. Not supported");
- new SearchModel()
- .addImportedField("my_ancient_field", "ref", "ancient_field")
- .resolve();
- }
-
static class SearchModel {
private final ApplicationPackage app = MockApplicationPackage.createEmpty();