summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj
diff options
context:
space:
mode:
authorGeir Storli <geirst@oath.com>2018-09-07 11:53:25 +0000
committerGeir Storli <geirst@oath.com>2018-09-10 12:18:49 +0000
commit2b799d684ffc9129f51025d2b835e2b1f587a7b8 (patch)
tree256321ceb53cf44f4d33ca789c36ba321574c0f1 /container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj
parente3d76a10ea55c9e195bb19fd7c67a760b23a15c4 (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/GroupingParser.jj')
-rw-r--r--container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj27
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() :