diff options
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.jj | 10 |
1 files changed, 9 insertions, 1 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 6d4ca1e9841..8d7ad7a3ffd 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 @@ -245,6 +245,7 @@ GroupingOperation eachOperation(GroupingOperation parent) : void operationBody(GroupingOperation parent) : { + ConstantValue<?> maxOperand = null; String str; Number num; GroupingExpression exp; @@ -255,7 +256,14 @@ void operationBody(GroupingOperation parent) : ( ( <ACCURACY> lbrace() num = number() rbrace() { parent.setAccuracy(num.doubleValue()); } ) | ( <ALIAS> lbrace() str = identifier() comma() exp = exp(parent) rbrace() { parent.putAlias(str, exp); } ) | ( <HINT> lbrace() str = identifier() rbrace() { parent.addHint(str); } ) | - ( <MAX> lbrace() num = number() rbrace() { parent.setMax(num.intValue()); } ) | + ( <MAX> lbrace() ( maxOperand = infinitePositiveValue() | maxOperand = constantValue() ) rbrace() + { + if (maxOperand instanceof InfiniteValue) { + parent.setMax(GroupingOperation.UNLIMITED_MAX); + } else { + parent.setMax(((Number)maxOperand.getValue()).intValue()); + } + } ) | ( <ORDER> lbrace() lst = expList(parent) rbrace() { parent.addOrderBy(lst); } ) | ( <OUTPUT> lbrace() lst = expList(parent) rbrace() { parent.addOutputs(lst); } ) | ( <PRECISION> lbrace() num = number() rbrace() { parent.setPrecision(num.intValue()); } ) | |