summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-01-28 09:52:51 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-01-28 09:52:51 +0100
commit1949eb0aed9b8137a9ed3c0255831510d2764da6 (patch)
tree9b4ec7e94d1f943c8a9f879efb92aa0f05fdb089 /config-model
parent9694c1d69e82edf8ce14c73b1dafcb57a9e07169 (diff)
Make match settings order independent
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java2
-rw-r--r--config-model/src/main/javacc/SDParser.jj22
-rw-r--r--config-model/src/test/derived/indexschema/indexschema.sd2
3 files changed, 17 insertions, 9 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java
index 09e8b3ccdfa..ab9148992e0 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java
@@ -11,7 +11,7 @@ public interface FieldOperationContainer {
/** Adds an operation */
void addOperation(FieldOperation op);
- /** Apply all operations. Operations must be sorted in thjeir natural order before applying each operation. */
+ /** Apply all operations. Operations must be sorted in their natural order before applying each operation. */
void applyOperations(SDField field);
String getName();
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 9b49fd50749..7543e3f030c 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -655,22 +655,30 @@ void fieldSet(Search search) :
String field;
String queryCommand;
List queryCommands = new ArrayList();
- SDField matchSettings;
+ FieldOperationContainer matchSetting;
+ List matchSettings = new ArrayList();
}
{
- <FIELDSET> setName = identifier() lbrace() { matchSettings = new SDField(setName, DataType.STRING); }
+ <FIELDSET> setName = identifier() lbrace()
((
- ( <FIELDS><COLON> field=identifier() { search.fieldSets().addUserFieldSetItem(setName, field); }
- ( <COMMA> field=identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } )* )
+ ( <FIELDS><COLON> field = identifier() { search.fieldSets().addUserFieldSetItem(setName, field); }
+ ( <COMMA> field = identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } )* )
|
( <QUERYCOMMAND> <COLON> (queryCommand = identifierWithDash() | queryCommand = quotedString())) { queryCommands.add(queryCommand); }
|
- ( match(matchSettings) ) { matchSettings.applyOperations(); search.fieldSets().userFieldSets().get(setName).setMatching(matchSettings.getMatching());}
+ ( matchSetting = match(new SDField(setName, DataType.STRING)) ) { matchSettings.add(matchSetting); }
)(<NL>)*)+
<RBRACE>
{
+ // Apply settings after parsing since all user field items must be set first
+
for (Object command : queryCommands)
search.fieldSets().userFieldSets().get(setName).queryCommands().add((String)command);
+
+ for (Object setting : matchSettings) {
+ ((SDField)setting).applyOperations();
+ search.fieldSets().userFieldSets().get(setName).setMatching(((SDField)setting).getMatching());
+ }
}
}
@@ -1551,11 +1559,11 @@ void alias(FieldOperationContainer container) :
}
}
-Object match(FieldOperationContainer field) : { }
+FieldOperationContainer match(FieldOperationContainer field) : { }
{
<MATCH> ( (<COLON> matchType(field))
| (lbrace() (matchItem(field) (<NL>)*)* <RBRACE>) )
- { return null; }
+ { return field; }
}
/**
diff --git a/config-model/src/test/derived/indexschema/indexschema.sd b/config-model/src/test/derived/indexschema/indexschema.sd
index 010eb8ec3e8..01f552a8c32 100644
--- a/config-model/src/test/derived/indexschema/indexschema.sd
+++ b/config-model/src/test/derived/indexschema/indexschema.sd
@@ -137,11 +137,11 @@ search indexschema {
}
fieldset exactexplicit2 {
- fields:sc, sd
match {
exact
exact-terminator: "Arnold"
}
+ fields:sc, sd
}
fieldset gram {