aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahoo-inc.com>2017-01-25 11:32:07 +0100
committerGeir Storli <geirst@yahoo-inc.com>2017-01-26 12:44:26 +0100
commit93958006886da9462961e5d1202ff05b9dd4c357 (patch)
tree426acd5c3a6996efb0371e7acb24ba007ff16165 /config-model
parentd757ee1af9cf32b991c907ea21aa767118a5ab87 (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.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java33
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java32
-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.jj22
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java10
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());
}
}