diff options
author | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-01-25 17:42:49 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-01-25 17:42:49 +0100 |
commit | 0c40998becbf149378e6e96fa7fcb054519471b9 (patch) | |
tree | 11cd4f538266ed1049cb638c038bef7c6dd2f01a /config-model | |
parent | 57f8c9b3df28c4b24ce7f18727ac89c3c5987954 (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')
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()); } } |