aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-01-25 17:42:49 +0100
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-01-25 17:42:49 +0100
commit0c40998becbf149378e6e96fa7fcb054519471b9 (patch)
tree11cd4f538266ed1049cb638c038bef7c6dd2f01a /config-model
parent57f8c9b3df28c4b24ce7f18727ac89c3c5987954 (diff)
Remove TemporaryReferenceField
Replace use of TemporaryReferenceField with ReferenceDataType. Add campaign and salesperson definitions to ReferenceFieldTestCase. Add new factory method to ReferenceDataType.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryReferenceField.java45
-rw-r--r--config-model/src/main/javacc/SDParser.jj2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/DocumentReferenceResolverTest.java6
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java26
4 files changed, 24 insertions, 55 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryReferenceField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryReferenceField.java
deleted file mode 100644
index fa485b204ee..00000000000
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryReferenceField.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.searchdefinition.document;
-
-import com.yahoo.document.DataType;
-import com.yahoo.document.TemporaryStructuredDataType;
-import com.yahoo.document.datatypes.FieldValue;
-
-/**
- * Represents a reference field inside a SD document. This is temporary AST structure that only referes to the
- * target document type by name ({@link TemporaryStructuredDataType}.
- *
- * @author bjorncs
- */
-public class TemporaryReferenceField extends DataType {
-
- private final TemporaryStructuredDataType referencedDocument;
-
- public TemporaryReferenceField(TemporaryStructuredDataType referencedDocument) {
- super(createName(referencedDocument), 0);
- this.referencedDocument = referencedDocument;
- }
-
- private static String createName(TemporaryStructuredDataType referenceType) {
- return "reference<" + referenceType.getName() + ">";
- }
-
- public TemporaryStructuredDataType getReferencedDocument() {
- return referencedDocument;
- }
-
- @Override
- public FieldValue createFieldValue() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Class getValueClass() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isValueCompatible(FieldValue value) {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 4025ec4852f..d8725b81969 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -820,7 +820,7 @@ DataType dataType() :
| LOOKAHEAD(<MAP> <LESSTHAN>) ( mapType = mapDataType() { return mapType; } )
| LOOKAHEAD(<ANNOTATIONREFERENCE> <LESSTHAN>) ( mapType = annotationRefDataType() { return mapType; } )
| LOOKAHEAD(<TENSOR_TYPE>) ( tensorType = tensorType("Field type") { return DataType.getTensor(tensorType); } )
- | LOOKAHEAD(<REFERENCE>) ( <REFERENCE> <LESSTHAN> referenceType = referenceType() <GREATERTHAN> { return new TemporaryReferenceField(referenceType); } )
+ | LOOKAHEAD(<REFERENCE>) ( <REFERENCE> <LESSTHAN> referenceType = referenceType() <GREATERTHAN> { return ReferenceDataType.createWithInferredId(referenceType); } )
| ( typeName = identifier() ["[]" { isArrayOldStyle = true; }] )
)
{
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/DocumentReferenceResolverTest.java b/config-model/src/test/java/com/yahoo/searchdefinition/DocumentReferenceResolverTest.java
index 1176482fec9..0acf64ec4ee 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/DocumentReferenceResolverTest.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/DocumentReferenceResolverTest.java
@@ -33,7 +33,8 @@ public class DocumentReferenceResolverTest {
barSearch.addDocument(barDocument);
// Create foo document with document reference to bar and add another field
- SDField fooRefToBarField = new SDField("bar_ref", new ReferenceDataType(barDocument.getDocumentType(), 0));
+ SDField fooRefToBarField = new SDField
+ ("bar_ref", ReferenceDataType.createWithInferredId(barDocument.getDocumentType()));
SDField irrelevantField = new SDField("irrelevant_stuff", DataType.INT);
Search fooSearch = new Search();
SDDocumentType fooDocument = new SDDocumentType("foo", fooSearch);
@@ -54,7 +55,8 @@ public class DocumentReferenceResolverTest {
@Test
public void throws_user_friendly_exception_if_referenced_document_does_not_exist() {
// Create foo document with document reference to non-existing document bar
- SDField fooRefToBarField = new SDField("bar_ref", new ReferenceDataType(TemporaryStructuredDataType.create("bar"), 0));
+ SDField fooRefToBarField = new SDField(
+ "bar_ref", ReferenceDataType.createWithInferredId(TemporaryStructuredDataType.create("bar")));
Search fooSearch = new Search();
SDDocumentType fooDocument = new SDDocumentType("foo", fooSearch);
fooDocument.addField(fooRefToBarField);
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java
index bc8f60a0a87..f609c30c1c2 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java
@@ -2,10 +2,10 @@ package com.yahoo.searchdefinition.processing;
import com.yahoo.document.DataType;
import com.yahoo.document.Field;
+import com.yahoo.document.ReferenceDataType;
import com.yahoo.searchdefinition.Search;
import com.yahoo.searchdefinition.SearchBuilder;
import com.yahoo.searchdefinition.document.SDDocumentType;
-import com.yahoo.searchdefinition.document.TemporaryReferenceField;
import com.yahoo.searchdefinition.parser.ParseException;
import org.junit.Test;
@@ -22,16 +22,28 @@ public class ReferenceFieldTestCase {
@Test
public void reference_fields_are_parsed_from_search_definition() throws ParseException {
SearchBuilder builder = new SearchBuilder();
- String sdContent =
+ String campaignSdContent =
+ "search campaign {\n" +
+ " document campaign {\n" +
+ " }\n" +
+ "}";
+ String salespersonSdContent =
+ "search salesperson {\n" +
+ " document salesperson {\n" +
+ " }\n" +
+ "}";
+ String adSdContent =
"search ad {\n" +
" document ad {\n" +
" field campaign_ref type reference<campaign> {}\n" +
" field salesperson_ref type reference<salesperson> {}\n" +
" }\n" +
"}";
- builder.importString(sdContent);
+ builder.importString(campaignSdContent);
+ builder.importString(salespersonSdContent);
+ builder.importString(adSdContent);
builder.build();
- Search search = builder.getSearch();
+ Search search = builder.getSearch("ad");
assertSearchContainsReferenceField("campaign_ref", "campaign", search.getDocument());
assertSearchContainsReferenceField("salesperson_ref", "salesperson", search.getDocument());
}
@@ -42,8 +54,8 @@ public class ReferenceFieldTestCase {
Field field = documentType.getDocumentType().getField(expectedFieldname);
assertNotNull("Field does not exist in document type: " + expectedFieldname, field);
DataType dataType = field.getDataType();
- assertThat(dataType, instanceOf(TemporaryReferenceField.class));
- TemporaryReferenceField refField = (TemporaryReferenceField) dataType;
- assertEquals(referencedDocType, refField.getReferencedDocument().getName());
+ assertThat(dataType, instanceOf(ReferenceDataType.class));
+ ReferenceDataType refField = (ReferenceDataType) dataType;
+ assertEquals(referencedDocType, refField.getTargetType().getName());
}
}