diff options
author | Geir Storli <geirst@yahoo-inc.com> | 2017-01-25 11:32:07 +0100 |
---|---|---|
committer | Geir Storli <geirst@yahoo-inc.com> | 2017-01-26 12:44:26 +0100 |
commit | 93958006886da9462961e5d1202ff05b9dd4c357 (patch) | |
tree | 426acd5c3a6996efb0371e7acb24ba007ff16165 /config-model | |
parent | d757ee1af9cf32b991c907ea21aa767118a5ab87 (diff) |
Simplify AST classes used for imported fields.
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/Search.java | 6 | ||||
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java | 33 | ||||
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java | 32 | ||||
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java (renamed from config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java) | 6 | ||||
-rw-r--r-- | config-model/src/main/javacc/SDParser.jj | 22 | ||||
-rw-r--r-- | config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java | 10 |
6 files changed, 39 insertions, 70 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java index 710f49dddb6..2e31dfe37d5 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java @@ -70,7 +70,7 @@ public class Search implements Serializable { // Ranking constants defined inside this s.d. private Map<String, RankingConstant> rankingConstants = new HashMap<>(); - private ImportedFields importedFields = new ImportedFields(); + private TemporaryImportedFields temporaryImportedFields = new TemporaryImportedFields(); private ApplicationPackage sourceApplication; @@ -156,8 +156,8 @@ public class Search implements Serializable { return rankingConstants.values(); } - public ImportedFields importedFields() { - return importedFields; + public TemporaryImportedFields importedFields() { + return temporaryImportedFields; } /** diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java deleted file mode 100644 index 2dea3f9bf88..00000000000 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java +++ /dev/null @@ -1,33 +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; - -/** - * Temporary reference to a field in another document type. - * - * After all SD files are parsed this temporary reference can be validated and connected - * to the actual field instance in the referenced document type. - * - * @author geirst - */ -public class TemporaryFieldReference { - - private final String refFieldName; - private final String fieldNameInRefType; - - /** - * @param refFieldName points to a field of type reference (in this document type). - * @param fieldNameInRefType points to a field in the referenced document type. - */ - public TemporaryFieldReference(String refFieldName, String fieldNameInRefType) { - this.refFieldName = refFieldName; - this.fieldNameInRefType = fieldNameInRefType; - } - - public String refFieldName() { - return refFieldName; - } - - public String fieldNameInRefType() { - return fieldNameInRefType; - } -} diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java index 23a5e05c55f..5c400c8d5f2 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java @@ -2,28 +2,36 @@ package com.yahoo.searchdefinition.document; /** - * Temporary field that is imported from a field in a referenced document type. + * A field that is imported from a field in a referenced document type and given an alias name. * - * After all SD files are parsed this temporary field can be validated and connected - * to the actual field instance in the referenced document type. + * This is temporary AST structure that only refers to the imported field by name. * * @author geirst */ public class TemporaryImportedField { - private final String fieldName; - private final TemporaryFieldReference reference; + private final String aliasFieldName; + private final String documentReferenceFieldName; + private final String foreignFieldName; - public TemporaryImportedField(String fieldName, TemporaryFieldReference reference) { - this.fieldName = fieldName; - this.reference = reference; + public TemporaryImportedField(String aliasFieldName, + String documentReferenceFieldName, + String foreignFieldName) { + this.aliasFieldName = aliasFieldName; + this.documentReferenceFieldName = documentReferenceFieldName; + this.foreignFieldName = foreignFieldName; } - public String fieldName() { - return fieldName; + public String aliasFieldName() { + return aliasFieldName; } - public TemporaryFieldReference reference() { - return reference; + public String documentReferenceFieldName() { + return documentReferenceFieldName; } + + public String foreignFieldName() { + return foreignFieldName; + } + } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java index 01d14104d2b..e791e27e534 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java @@ -8,14 +8,16 @@ import java.util.Map; /** * A set of fields that are imported from referenced document types. * + * This is temporary AST structure that only refers to the imported fields by name. + * * @author geirst */ -public class ImportedFields { +public class TemporaryImportedFields { private final Map<String, TemporaryImportedField> fields = new LinkedHashMap<>(); public void add(TemporaryImportedField importedField) { - fields.put(importedField.fieldName(), importedField); + fields.put(importedField.aliasFieldName(), importedField); } public Map<String, TemporaryImportedField> fields() { diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj index d8725b81969..cb6ac8c96f3 100644 --- a/config-model/src/main/javacc/SDParser.jj +++ b/config-model/src/main/javacc/SDParser.jj @@ -2392,32 +2392,24 @@ TensorType tensorType(String errorMessage) : void importField(Search search) : { - TemporaryFieldReference reference; - String fieldName; -} -{ - <IMPORT> <FIELD> reference = fieldReference() <AS> fieldName = identifier() lbrace() - <RBRACE> - { - search.importedFields().add(new TemporaryImportedField(fieldName, reference)); - } -} - -TemporaryFieldReference fieldReference() : -{ String fieldRefSpec; + String aliasFieldName; } { - fieldRefSpec = identifier() + <IMPORT> <FIELD> fieldRefSpec = identifier() <AS> aliasFieldName = identifier() lbrace() + <RBRACE> { if (StringUtils.countMatches(fieldRefSpec, ".") != 1) { throw new IllegalArgumentException("Illegal field reference spec '" + fieldRefSpec + "': Does not include a single '.'"); } int indexOfDot = fieldRefSpec.indexOf('.'); - return new TemporaryFieldReference(fieldRefSpec.substring(0, indexOfDot), fieldRefSpec.substring(indexOfDot + 1)); + String documentReferenceFieldName = fieldRefSpec.substring(0, indexOfDot); + String foreignFieldName = fieldRefSpec.substring(indexOfDot + 1); + search.importedFields().add(new TemporaryImportedField(aliasFieldName, documentReferenceFieldName, foreignFieldName)); } } + /** * This rule consumes an expression token and returns its image. * diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java index 434cfd72136..083c74409c2 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java @@ -51,10 +51,10 @@ public class ImportedFieldsTestCase { return builder.getSearch(); } - private static void assertSearchContainsTemporaryImportedField(String fieldName, String refFieldName, String fieldNameInRefType, Search search) { - TemporaryImportedField importedField = search.importedFields().fields().get(fieldName); - assertEquals(fieldName, importedField.fieldName()); - assertEquals(refFieldName, importedField.reference().refFieldName()); - assertEquals(fieldNameInRefType, importedField.reference().fieldNameInRefType()); + private static void assertSearchContainsTemporaryImportedField(String aliasFieldName, String documentReferenceFieldName, String foreignFieldName, Search search) { + TemporaryImportedField importedField = search.importedFields().fields().get(aliasFieldName); + assertEquals(aliasFieldName, importedField.aliasFieldName()); + assertEquals(documentReferenceFieldName, importedField.documentReferenceFieldName()); + assertEquals(foreignFieldName, importedField.foreignFieldName()); } } |