diff options
author | Geir Storli <geirstorli@yahoo.no> | 2017-01-23 16:58:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-23 16:58:55 +0100 |
commit | a5a30171965cea021761e629b45a837d2d1c4629 (patch) | |
tree | 184dbf35c633c02d6ceadb694d38f34a9f39e3a7 /config-model/src/main/javacc | |
parent | f316bb001a345b259aa15b3a7cb5c07ca8c0f5c0 (diff) | |
parent | 4960f7ce8b00943a56dd750cf0b6e9fe5e5025a4 (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.jj | 36 |
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> |