summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/javacc
diff options
context:
space:
mode:
authorGeir Storli <geirstorli@yahoo.no>2017-01-23 16:58:55 +0100
committerGitHub <noreply@github.com>2017-01-23 16:58:55 +0100
commita5a30171965cea021761e629b45a837d2d1c4629 (patch)
tree184dbf35c633c02d6ceadb694d38f34a9f39e3a7 /config-model/src/main/javacc
parentf316bb001a345b259aa15b3a7cb5c07ca8c0f5c0 (diff)
parent4960f7ce8b00943a56dd750cf0b6e9fe5e5025a4 (diff)
Merge pull request #1579 from yahoo/geirst/parsing-of-imported-fields-in-sd-file
Add parsing of imported fields in SD file.
Diffstat (limited to 'config-model/src/main/javacc')
-rw-r--r--config-model/src/main/javacc/SDParser.jj36
1 files changed, 35 insertions, 1 deletions
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 30b9b77f368..a5d1af6b4cb 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -60,6 +60,7 @@ import com.yahoo.search.query.ranking.Diversity;
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.logging.Level;
+import org.apache.commons.lang.StringUtils;
/**
* A search definition parser
@@ -193,6 +194,8 @@ TOKEN :
| < FIELDS: "fields" >
| < FIELDSET: "fieldset" >
| < STRUCTFIELD: "struct-field" >
+| < IMPORT: "import" >
+| < AS: "as" >
| < INDEXING: "indexing" >
| < SUMMARYTO: "summary-to" >
| < DOCUMENTSUMMARY: "document-summary" >
@@ -421,7 +424,8 @@ Object rootSearchItem(Search search) : { }
| useDocument(search)
| structOutside(search)
| annotationOutside(search)
- | fieldSet(search) )
+ | fieldSet(search)
+ | importField(search) )
{ return null; }
}
@@ -2386,6 +2390,34 @@ 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;
+}
+{
+ fieldRefSpec = identifier()
+ {
+ 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));
+ }
+}
+
/**
* This rule consumes an expression token and returns its image.
*
@@ -2416,6 +2448,7 @@ String identifier() : { }
| <ANNOTATIONREFERENCE>
| <ARITY>
| <ARRAY>
+ | <AS>
| <ASCENDING>
| <ATTRIBUTE>
| <BODY>
@@ -2454,6 +2487,7 @@ String identifier() : { }
| <IDENTICAL>
| <IDENTIFIER>
| <IGNOREDEFAULTRANKFEATURES>
+ | <IMPORT>
| <INDEX>
| <INDEXING>
| <INDEXINGREWRITE>