diff options
author | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-02-16 13:39:45 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-02-16 13:39:45 +0100 |
commit | b0434818ef350079746b20d6f75b9f39ba96582d (patch) | |
tree | 9dcec87d6e2ac18a36d6d4d53d563662f2dcd1ed /config-model/src | |
parent | aa1c38bfb7bd0eb26d014abe9345a7cdc5ff3446 (diff) |
Disallow reference field to refer to an index field
Diffstat (limited to 'config-model/src')
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); |