From 49aab7b1a1fd2cad127610a5b1452627d279e8c4 Mon Sep 17 00:00:00 2001 From: Geir Storli Date: Mon, 23 Jan 2017 15:58:41 +0100 Subject: Add parsing of imported fields in SD file. --- config-model/src/main/javacc/SDParser.jj | 36 +++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'config-model/src/main/javacc') diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj index 3fc84f2860b..624aee5bb59 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" > @@ -420,7 +423,8 @@ Object rootSearchItem(Search search) : { } | useDocument(search) | structOutside(search) | annotationOutside(search) - | fieldSet(search) ) + | fieldSet(search) + | importField(search) ) { return null; } } @@ -2371,6 +2375,34 @@ TensorType tensorType(String errorMessage) : } } +void importField(Search search) : +{ + TemporaryFieldReference reference; + String fieldName; +} +{ + reference = fieldReference() fieldName = identifier() lbrace() + + { + 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. * @@ -2401,6 +2433,7 @@ String identifier() : { } | | | + | | | | @@ -2439,6 +2472,7 @@ String identifier() : { } | | | + | | | | -- cgit v1.2.3