Skip to content

Commit

Permalink
Merge pull request #27559 from vespa-engine/bjorncs/grouping-long-min
Browse files Browse the repository at this point in the history
Add workaround for handling of unary minus operator in combination wi…
  • Loading branch information
baldersheim authored Jun 27, 2023
2 parents 0de3298 + aea9a78 commit 642713d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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; }
}
Expand Down Expand Up @@ -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) :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.yahoo.search.grouping.request.AttributeMapLookupValue;
import com.yahoo.search.grouping.request.EachOperation;
import com.yahoo.search.grouping.request.GroupingOperation;
import com.yahoo.search.grouping.request.LongValue;
import com.yahoo.search.query.parser.Parsable;
import com.yahoo.search.query.parser.ParserEnvironment;
import com.yahoo.search.yql.VespaGroupingStep;
Expand All @@ -15,7 +16,11 @@
import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

/**
* @author Simon Thoresen Hult
Expand Down Expand Up @@ -581,6 +586,8 @@ void testMisc() {
assertTrue(assertParse("all(group(artist) max(inf))").get(0).hasUnlimitedMax());
assertEquals(1, assertParse("all(group(artist) max(1))").get(0).getMax());
assertFalse(assertParse("all(group(artist))").get(0).hasMax());
var res = assertParse("all(group(-9223372036854775808))");
assertEquals(Long.MIN_VALUE, ((LongValue)res.get(0).getGroupBy()).getValue());
}

@Test
Expand Down

0 comments on commit 642713d

Please sign in to comment.