From 1949eb0aed9b8137a9ed3c0255831510d2764da6 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Tue, 28 Jan 2020 09:52:51 +0100 Subject: Make match settings order independent --- .../fieldoperation/FieldOperationContainer.java | 2 +- config-model/src/main/javacc/SDParser.jj | 22 +++++++++++++++------- .../src/test/derived/indexschema/indexschema.sd | 2 +- 3 files changed, 17 insertions(+), 9 deletions(-) (limited to 'config-model') 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(); } { -
setName = identifier() lbrace() { matchSettings = new SDField(setName, DataType.STRING); } +
setName = identifier() lbrace() (( - ( field=identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } - ( field=identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } )* ) + ( field = identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } + ( field = identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } )* ) | ( (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); } )()*)+ { + // 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) : { } { ( ( matchType(field)) | (lbrace() (matchItem(field) ()*)* ) ) - { 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 { -- cgit v1.2.3