summaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-02-16 13:39:45 +0100
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-02-16 13:39:45 +0100
commitb0434818ef350079746b20d6f75b9f39ba96582d (patch)
tree9dcec87d6e2ac18a36d6d4d53d563662f2dcd1ed /config-model/src
parentaa1c38bfb7bd0eb26d014abe9345a7cdc5ff3446 (diff)
Disallow reference field to refer to an index field
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java4
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java14
2 files changed, 17 insertions, 1 deletions
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 bc8d1eccbbc..7ff17329609 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
@@ -59,11 +59,13 @@ public class ImportedFieldsResolver extends Processor {
fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Not found");
} else if (!targetField.doesAttributing()) {
fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Is not an attribute");
+ } else if (targetField.doesIndexing()) {
+ fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Index not allowed");
}
return targetField;
}
- private String targetFieldAsString(String targetFieldName, DocumentReference reference) {
+ private static String targetFieldAsString(String targetFieldName, DocumentReference reference) {
return "Field '" + targetFieldName + "' via reference field '" + reference.referenceField().getName() + "'";
}
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 ecd5af7e3b4..c14ee4f16e5 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
@@ -72,6 +72,17 @@ public class ImportedFieldsResolverTestCase {
new SearchModel().add(new TemporaryImportedField("my_not_attribute", "campaign_ref", "not_attribute")).resolve();
}
+ @Test
+ public void resolver_fails_is_referenced_fields_is_indexing() {
+ exceptionRule.expect(IllegalArgumentException.class);
+ exceptionRule.expectMessage(
+ "For search 'ad', import field 'my_attribute_and_index': " +
+ "Field 'attribute_and_index' via reference field 'campaign_ref': Index not allowed");
+ new SearchModel()
+ .add(new TemporaryImportedField("my_attribute_and_index", "campaign_ref", "attribute_and_index"))
+ .resolve();
+ }
+
private static class SearchModel {
public final Search campaignSearch;
public final Search adSearch;
@@ -83,7 +94,10 @@ public class ImportedFieldsResolverTestCase {
campaignSearch.addDocument(new SDDocumentType("campaign"));
TemporarySDField budgetField = new TemporarySDField("budget", DataType.INT);
budgetField.parseIndexingScript("{ attribute }");
+ TemporarySDField attributeAndIndexField = new TemporarySDField("attribute_and_index", DataType.INT);
+ attributeAndIndexField.parseIndexingScript("{ attribute | index }");
campaignSearch.getDocument().addField(budgetField);
+ campaignSearch.getDocument().addField(attributeAndIndexField);
campaignSearch.getDocument().addField(new TemporarySDField("not_attribute", DataType.INT));
adSearch = new Search("ad", app);