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 | 12 |
1 files changed, 9 insertions, 3 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 8d7ad7a3ffd..8059a397bc7 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 @@ -35,8 +35,14 @@ public class GroupingParser { if (str.indexOf('.') >= 0) { return Double.valueOf(str); } + if (str.equals(Long.toString(Long.MIN_VALUE).substring(1))) return Double.NaN; return Long.valueOf(str); } + + private static GroupingExpression resolveNegation(GroupingExpression exp) { + if (exp instanceof DoubleValue && ((DoubleValue)exp).getValue().isNaN()) return new LongValue(Long.MIN_VALUE); + return new NegFunction(exp); + } } PARSER_END(GroupingParser) @@ -299,7 +305,7 @@ GroupingExpression exp(GroupingOperation grp) : } { ( [ add() | sub() { neg = true; } ] - exp = expAlias(grp) { if (neg) { exp = new NegFunction(exp); } } + exp = expAlias(grp) { if (neg) { exp = resolveNegation(exp); } } [ <AS> lbrace() str = string() rbrace() { exp.setLabel(str); } ] ) { return exp; } } @@ -623,13 +629,13 @@ MulFunction mulFunction(GroupingOperation grp) : return new MulFunction(arg1, arg2, argN.toArray(new GroupingExpression[argN.size()])); } } -NegFunction negFunction(GroupingOperation grp) : +GroupingExpression negFunction(GroupingOperation grp) : { GroupingExpression exp; } { ( <NEG> lbrace() exp = exp(grp) rbrace() ) - { return new NegFunction(exp); } + { return resolveNegation(exp); } } NormalizeSubjectFunction normalizeSubjectFunction(GroupingOperation grp) : |