summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/javacc/com/yahoo/search/grouping/request/parser/GroupingParser.jj
diff options
context:
space:
mode:
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.jj12
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) :