summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahoo-inc.com>2017-03-23 16:28:23 +0100
committerGeir Storli <geirst@yahoo-inc.com>2017-03-23 16:28:23 +0100
commit391cad97a68d3e23174ac73317ff3ab167023414 (patch)
tree3c7f332f3394ec24527853003a18760a8367eb54 /config-model
parent146da74b3b165289dfa3272183074b17ca61476c (diff)
Imported field of type tensor is not supported.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java3
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java31
2 files changed, 26 insertions, 8 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 7ff17329609..df3f3701239 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
@@ -2,6 +2,7 @@
package com.yahoo.searchdefinition.processing;
import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.document.TensorDataType;
import com.yahoo.searchdefinition.DocumentReference;
import com.yahoo.searchdefinition.DocumentReferences;
import com.yahoo.searchdefinition.RankProfileRegistry;
@@ -61,6 +62,8 @@ public class ImportedFieldsResolver extends Processor {
fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Is not an attribute");
} else if (targetField.doesIndexing()) {
fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Index not allowed");
+ } else if (targetField.getDataType() instanceof TensorDataType) {
+ fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Type 'tensor' not supported");
}
return targetField;
}
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 c14ee4f16e5..f02b7efe07c 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
@@ -7,6 +7,7 @@ import com.yahoo.config.model.test.MockApplicationPackage;
import com.yahoo.document.DataType;
import com.yahoo.document.ReferenceDataType;
import com.yahoo.document.TemporaryStructuredDataType;
+import com.yahoo.document.TensorDataType;
import com.yahoo.searchdefinition.DocumentReference;
import com.yahoo.searchdefinition.DocumentReferences;
import com.yahoo.searchdefinition.Search;
@@ -16,6 +17,7 @@ import com.yahoo.searchdefinition.document.SDDocumentType;
import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.searchdefinition.document.TemporaryImportedField;
import com.yahoo.searchdefinition.document.TemporarySDField;
+import com.yahoo.tensor.TensorType;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -65,7 +67,7 @@ public class ImportedFieldsResolverTestCase {
}
@Test
- public void resolver_fails_if_referenced_field_is_not_an_attribute() {
+ public void resolver_fails_if_imported_field_is_not_an_attribute() {
exceptionRule.expect(IllegalArgumentException.class);
exceptionRule.expectMessage("For search 'ad', import field 'my_not_attribute': "
+ "Field 'not_attribute' via reference field 'campaign_ref': Is not an attribute");
@@ -73,7 +75,7 @@ public class ImportedFieldsResolverTestCase {
}
@Test
- public void resolver_fails_is_referenced_fields_is_indexing() {
+ public void resolver_fails_if_imported_field_is_indexing() {
exceptionRule.expect(IllegalArgumentException.class);
exceptionRule.expectMessage(
"For search 'ad', import field 'my_attribute_and_index': " +
@@ -83,6 +85,17 @@ public class ImportedFieldsResolverTestCase {
.resolve();
}
+ @Test
+ public void resolver_fails_if_imported_field_is_tensor_type() {
+ exceptionRule.expect(IllegalArgumentException.class);
+ exceptionRule.expectMessage(
+ "For search 'ad', import field 'my_tensor_field': " +
+ "Field 'tensor_field' via reference field 'campaign_ref': Type 'tensor' not supported");
+ new SearchModel()
+ .add(new TemporaryImportedField("my_tensor_field", "campaign_ref", "tensor_field"))
+ .resolve();
+ }
+
private static class SearchModel {
public final Search campaignSearch;
public final Search adSearch;
@@ -92,13 +105,10 @@ public class ImportedFieldsResolverTestCase {
campaignSearch = new Search("campaign", app);
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(createField("budget", DataType.INT, "{ attribute }"));
+ campaignSearch.getDocument().addField(createField("attribute_and_index", DataType.INT, "{ attribute | index }"));
campaignSearch.getDocument().addField(new TemporarySDField("not_attribute", DataType.INT));
+ campaignSearch.getDocument().addField(createField("tensor_field", new TensorDataType(TensorType.fromSpec("tensor(x[])")), "{ attribute }"));
adSearch = new Search("ad", app);
adSearch.addDocument(new SDDocumentType("ad"));
@@ -107,6 +117,11 @@ public class ImportedFieldsResolverTestCase {
adSearch.getDocument().setDocumentReferences(new DocumentReferences(ImmutableMap.of(campaignRefField.getName(),
new DocumentReference(campaignRefField, campaignSearch))));
}
+ private TemporarySDField createField(String name, DataType dataType, String indexingScript) {
+ TemporarySDField result = new TemporarySDField(name, dataType);
+ result.parseIndexingScript(indexingScript);
+ return result;
+ }
public SearchModel add(TemporaryImportedField importedField) {
adSearch.temporaryImportedFields().get().add(importedField);
return this;