diff options
author | Geir Storli <geirst@oath.com> | 2018-09-07 11:53:25 +0000 |
---|---|---|
committer | Geir Storli <geirst@oath.com> | 2018-09-10 12:18:49 +0000 |
commit | 2b799d684ffc9129f51025d2b835e2b1f587a7b8 (patch) | |
tree | 256321ceb53cf44f4d33ca789c36ba321574c0f1 /container-search/src/main/javacc/com/yahoo/search/grouping/request/parser | |
parent | e3d76a10ea55c9e195bb19fd7c67a760b23a15c4 (diff) |
Extend grouping parser to handle map syntax with indirect key via attribute vector.
Diffstat (limited to 'container-search/src/main/javacc/com/yahoo/search/grouping/request/parser')
-rw-r--r-- | container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj b/container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj index 0678b030bc5..6a55a32eb8a 100644 --- a/container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj +++ b/container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj @@ -404,14 +404,31 @@ AndFunction andFunction(GroupingOperation grp) : AttributeValue attributeValue() : { - StringBuilder ret = new StringBuilder(); + StringBuilder prefix = new StringBuilder(); + StringBuilder suffix = new StringBuilder(); String str; + String key = null; + AttributeFunction keySourceAttr = null; } { - ( str = identifier() { ret.append(str); } - ( ( <DOT> { ret.append(token.image); } ( str = identifier() { ret.append(str); } ) ) | - ( lcurly() str = string() { ret.append("{\"").append(str).append("\"}"); } rcurly() ) )* ) - { return new AttributeValue(ret.toString()); } + ( str = identifier() { prefix.append(str); } + ( LOOKAHEAD(2) <DOT> { prefix.append(token.image); } ( str = identifier() { prefix.append(str); } ) )* + ( LOOKAHEAD(3) + ( lcurly() key = string() rcurly() ) | + ( lcurly() keySourceAttr = attributeFunction() rcurly() ) + )? + ( <DOT> { suffix.append(token.image); } ( str = identifier() { suffix.append(str); } ) )* + ) + { + if (key != null) { + return AttributeMapLookupValue.fromKey(prefix.toString(), key, suffix.toString()); + } else if (keySourceAttr != null) { + return AttributeMapLookupValue.fromKeySourceAttribute(prefix.toString(), keySourceAttr.getAttributeName(), suffix.toString()); + } else { + prefix.append(suffix.toString()); + return new AttributeValue(prefix.toString()); + } + } } AttributeFunction attributeFunction() : |